I have this codes
public ArrayList<StationData> getAllStations(String num1){
ArrayList<StationData> stationData = new ArrayList<>();
Cursor cursor = mydb.rawQuery(" select * from Stations where lines like '%"+num1+"%' ORDER BY id DESC", null);
if (cursor.moveToFirst()){
do {
int id = cursor.getInt(cursor.getColumnIndex("id"));
char faName = (char)(cursor.getColumnIndex("name"));
char enName = (char) (cursor.getColumnIndex("enName"));
char lines = (char)(cursor.getColumnIndex("lines"));
char address = (char) (cursor.getColumnIndex("address"));
float latitude = cursor.getFloat(cursor.getColumnIndex("latitude"));
float longitude = cursor.getFloat(cursor.getColumnIndex("longitude"));
StationData hh = new StationData(id, faName, enName, lines, address, latitude, longitude);
stationData.add(hh);
} while (cursor.moveToNext());
cursor.close();
}else{
}
return stationData;
}
and this is my AsyncTask
class MetroLineMaker extends AsyncTask<String,Void,String>{
MetroDataBase metroDataBase = new MetroDataBase(getApplicationContext());
ArrayList<StationData> metroData;
StationData stationData = new StationData();
// metroData = new ArrayList<>();
protected void onPreExecute() {
}
@Override
protected String doInBackground(String... strings) {
metroData = metroDataBase.getAllStations(strings[0]);
for (int i=0;i<metroData.size()-1 ;i++) {
LatLng last = new LatLng(metroData.get(i).getLatitude(), metroData.get(i).getLongitude());
LatLng next = new LatLng(metroData.get(i + 1).getLatitude(), metroData.get(i + 1).getLongitude());
// createMarker(metroData.get(i).getLatitude(), metroData.get(i).getLongitude());
mMap.addMarker(new MarkerOptions()
.position(new LatLng(metroData.get(i).getLatitude(), metroData.get(i).getLongitude()))
.anchor(0.5f, 0.5f)
.icon(BitmapDescriptorFactory.fromResource(R.mipmap.ic_metro_line_one)));
mMap.addPolyline(
new PolylineOptions().add(
last, next
).width(10).color(Color.RED)
);
}
return null;
}
protected void onPostExecute(String result) {
}
}
and I have this errors
E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1 Process: com.arnaway.metromap, PID: 9493 java.lang.RuntimeException: An error occurred while executing doInBackground() at android.os.AsyncTask$3.done(AsyncTask.java:353) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383) at java.util.concurrent.FutureTask.setException(FutureTask.java:252) at java.util.concurrent.FutureTask.run(FutureTask.java:271) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) at java.lang.Thread.run(Thread.java:764) Caused by: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0 at com.arnaway.metromap.MainActivity$MetroLineMaker.doInBackground(MainActivity.java:1028) at com.arnaway.metromap.MainActivity$MetroLineMaker.doInBackground(MainActivity.java:1013) at android.os.AsyncTask$2.call(AsyncTask.java:333) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) at java.lang.Thread.run(Thread.java:764)
how can I use my database in an AsyncTask and show my marker in MainActivity my AsyncTask is in MainActivity too.