1
votes

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.

1
in which line is the error ? you should check if the cursor.getCount > 0 or nothimel

1 Answers

0
votes

I havent got experience in databases but where is the rest of your code in an activity? Where do you declare mydb? Seems like your array list metroData is not being populated so it gives array out of bounds error.

Where is your getAllStations method? In metroDataBase class? Then where is the code for this class?