Hello I would parser several xml files and display their data each in a list. I manage to parse a single file. The code is just below. How to parse multiple files in a folder of external memory and display their data in a list?
this is my MainActivity
public List<ModelKmlData> modelkmldata = null;
private View parent_view;
private RecyclerView recyclerView;
private AdapterListInbox mAdapter;
private androidx.appcompat.view.ActionMode actionMode;
private Toolbar toolbar;
private FloatingActionButton fabbtn;
SqliteHelper sqliteHelper;
public List<KmlDataModel> kmldatamodel = null;
@override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gps_data);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
if (ActivityCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED){
// Analyser les données KML dans un thread non-ui
new LoadKmlTask().execute();
}
else{
ActivityCompat.requestPermissions(this, new String[]
{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
}
}
else{
//startActivity(new Intent(getActivity(),
SQLite2ExcelActivity.class));
}
/*sqliteHelper = new SqliteHelper(this);
initToolbar();
initComponent();
Toast.makeText(this, "Appui long effectué",
Toast.LENGTH_SHORT).show();*/
}
private class LoadKmlTask extends AsyncTask<String, Void, Cursor>{
@override
protected Cursor doInBackground(String... args) {
// interroger la base de données et retourner un curseur des
//données kml.
SqliteHelper sqliteHelper = new
SqliteHelper(getApplicationContext());
Cursor cursor = sqliteHelper.getAllKmlCursor();
return cursor;
}
@override
protected void onPostExecute(Cursor cursor) {
String[] dataColumns = { sqliteHelper.COLUMN_KMLNAME,
sqliteHelper.COLUMN_KMLUNID, sqliteHelper.COLUMN_KMLDESC,
sqliteHelper.COLUMN_KMLCOORD};
int[] viewIDs = { R.id.list_item_name, R.id.list_item_title,
R.id.list_item_department,R.id.list_item_email };
SimpleCursorAdapter records = new
SimpleCursorAdapter(getBaseContext(), R.layout.item_inbox,
cursor, dataColumns, viewIDs, 0);
ListView listView = (ListView) findViewById(R.id.list);
if (listView != null) {
listView.setAdapter(records);
}
}
}
the code that parses :
// noms des balises KML
private static final String PLACEMARK = "Placemark";
private static final String DOCUMENT = "Document";
private static final String VALUE = "value";
private static final String NAME = "name";
private static final String DESCRIPTION = "description";
private static final String COORDINATES = "coordinates";
private ArrayList<ModelKmlData> kmlList = null;
private ModelKmlData currentKml = null;
private boolean done = false;
private String currentTag = null;
public ArrayList<ModelKmlData> parse(Context context) {
try{
String state = Environment.getExternalStorageState();
String path = Environment.getExternalStorageDirectory()
+ File.separator + "Fodecc_csv" + File.separator + "GFAM-
20190916-150100.kml";
XmlPullParserFactory xppf = XmlPullParserFactory.newInstance();
xppf.setNamespaceAware(true);
XmlPullParser parser = xppf.newPullParser();
File file = new File(Environment.getExternalStorageDirectory()
+ File.separator + "Fodecc_csv" + File.separator + "GFAM-
20190916-150100.kml");
FileInputStream fis = new FileInputStream(file);
parser.setInput(new InputStreamReader(fis));
//XmlPullParser parser = fis;
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT && !done) {
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
kmlList = new ArrayList<ModelKmlData>();
break;
case XmlPullParser.START_TAG:
currentTag = parser.getName();
if (currentTag.equalsIgnoreCase(PLACEMARK)) {
currentKml = new ModelKmlData();
} else if (currentKml != null) {
if (currentTag.equalsIgnoreCase(NAME)) {
currentKml.set_kmlName(parser.nextText());
// currentEmployee.setId(parser.nextText());
} else if (currentTag.equalsIgnoreCase(VALUE)) {
currentKml.set_kmlUNID(parser.nextText());
} else if
(currentTag.equalsIgnoreCase(DESCRIPTION)) {
currentKml.set_kmlDesc(parser.nextText());
} else if
(currentTag.equalsIgnoreCase(COORDINATES)) {
currentKml.set_kmlCoord(parser.nextText());
}
}
break;
case XmlPullParser.END_TAG:
currentTag = parser.getName();
if (currentTag.equalsIgnoreCase(PLACEMARK) &&
currentKml != null) {
kmlList.add(currentKml);
} else if (currentTag.equalsIgnoreCase(DOCUMENT)) {
done = true;
}
break;
}
eventType = parser.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return kmlList;
}
}
How could I add a loop that will recover all files and view their contents ?