I would like to read an XML file in my activity that I copied to an SD card.
If the file does not exist, I read the data from the string file. This part works.
I’ve tried and researched a lot, but unfortunately, I can’t get anywhere. Maybe someone has the right tip for me?
My AndroidManifest.xml:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
In the MainActivity.java, under onCreate:
// first check for runtime permission
String permission = android.Manifest.permission.READ_EXTERNAL_STORAGE;
int grant = ContextCompat.checkSelfPermission(this, permission);
if (grant != PackageManager.PERMISSION_GRANTED) {
String[] permission_list = new String[1];
permission_list[0] = permission;
ActivityCompat.requestPermissions(this, permission_list, 1);
}else {
Log.v(TAG, "OnCreate(): grant is not READ_EXTERAL_STORAGE");
}
// Switch-Liste erstellen und an den View binden
createSwitchlList();
bindAdapterToListView();
In createSwitchList():
private void createSwitchlList() {
boolean fromFile = false;
Log.v(TAG, "createSwitchList() entered.");
//First check if the sd card is mounted or not
if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) {
// sd card mounted
Log.v(TAG, "SD-CARD is available");
}
String myFile = new File(getExternalStorageDirectory() + File.separator + "MyWifiDemo" + File.separator + "switch.xml").toString();
if (myFile != null) {
Log.v(TAG, "Find path/file " + myFile);
fromFile = true;
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder;
try {
dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(myFile);
doc.getDocumentElement().normalize();
Log.v(TAG, "XML-root: " + doc.getDocumentElement().getNodeName());
} catch (RuntimeException e) {
Log.v(TAG, "Read-XML-Document RuntimeExeption: " + e);
fromFile = false;
} catch (Exception e) {
Log.v(TAG, "Read-XML-Document Exeption: " + e);
fromFile = false;
}
}
if (!fromFile) {
Log.v(TAG, "Path or file not found");
String[] geradeOn = getResources().getStringArray(R.array.gerade_an);
String[] geradeOff = getResources().getStringArray(R.array.gerade_aus);
String[] abzweigOn = getResources().getStringArray(R.array.abzweig_an);
String[] abzweigOff = getResources().getStringArray(R.array.abzweig_aus);
mSwitchListe.clear();
for (int i = 0; i < geradeOn.length; i++) {
Switch newSwitch = new Switch(getString(R.string.dcc_address) + (i + 1),
getString(R.string.dcc_status_gerade), geradeOn[i], geradeOff[i],
abzweigOn[i], abzweigOff[i]);
mSwitchListe.add(newSwitch);
}
Toast.makeText(getApplicationContext(), "Acht Schalter erstellt, XML-Datei existiert nicht", Toast.LENGTH_SHORT).show();
Log.v(TAG, "*** Acht Schalter erstellt, XML-Datei existiert nicht");
}
}
And this is my log:
15:12:57.759 MainActivity de.dfwschmidts.mywifidemo V MainActivity Version 5.0.17
15:12:57.777 MainActivity de.dfwschmidts.mywifidemo V createSwitchList() entered.
15:12:57.780 MainActivity de.dfwschmidts.mywifidemo V SD-CARD is available
15:13:05.072 MainActivity de.dfwschmidts.mywifidemo V Find path/file /storage/emulated/0/MyWifiDemo/switch.xml
15:13:23.857 MainActivity de.dfwschmidts.mywifidemo V Read-XML-Document Exeption: java.net.MalformedURLException: no protocol: /storage/emulated/0/MyWifiDemo/switch.xml
15:13:28.351 MainActivity de.dfwschmidts.mywifidemo V Path or file not found
15:13:32.895 MainActivity de.dfwschmidts.mywifidemo V *** Acht Schalter erstellt, XML-Datei existiert nicht
15:13:32.905 MainActivity de.dfwschmidts.mywifidemo V 2. Stufe: onStart() betreten
15:13:32.911 MainActivity de.dfwschmidts.mywifidemo V 3. Stufe: onResume() betreten
15:13:33.293 MainActivity de.dfwschmidts.mywifidemo V 4. Stufe: onPause() betreten
15:13:33.309 MainActivity de.dfwschmidts.mywifidemo V onRequestPermissionsResult: READ_EXTERNAL_STORAGE permission not granted. Result: -1
15:13:33.310 MainActivity de.dfwschmidts.mywifidemo V 3. Stufe: onResume() betreten
15:13:40.663 MainActivity de.dfwschmidts.mywifidemo V 4. Stufe: onPause() betreten
15:13:41.077 MainActivity de.dfwschmidts.mywifidemo V 5. Stufe: onStop() betreten
15:13:41.085 MainActivity de.dfwschmidts.mywifidemo V --> Zustand speichern: onSaveInstanceState() betreten
15:13:44.884 MainActivity de.dfwschmidts.mywifidemo V 6. Stufe: onDestroy() betreten
New contributor
DFW_S is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.