2017-02-22 6 views
-2

Мне нужна помощь здесь! В моем AsyncTask я добавляю значение ArrayList Результата и когда я пытаюсь получить значение результата в onPostExecute поОшибка asynctask onPostExecute

final String output = result.get(0); 

Приложение усилия закрывание. Я знаю, что это глупая ошибка. Но я не понимаю, почему!

public class deviceVerify extends AsyncTask<ArrayList<String>, Void, ArrayList<String>> { 
     protected void onPreExecute(){ 
      progress1.setVisibility(View.VISIBLE); 
     } 
     @Override 
     protected ArrayList<String> doInBackground(ArrayList<String>... passing) { 
      // Locate the WorldhavingDelay Class 
      // JSON file URL address 
      final ArrayList<String> result = new ArrayList<String>(); 
      String android_id = Settings.Secure.getString(getContentResolver(), 
        Settings.Secure.ANDROID_ID); 
      try { 
       Log.e("URL",Constants.BASE_URL_LOGIN+"?deviceid="+android_id); 
       RestClientHelper.getInstance().get(Constants.BASE_URL_LOGIN+"?deviceid="+android_id, new RestClientHelper.RestClientListener() { 
        @Override 
        public void onSuccess(String response) { 
         Log.e("Resposnse",response); 
         result.add("true"); 
        } 

        @Override 
        public void onError(String error) { 
         Log.e("Error",error); 
         result.add("false"); 
        } 
       }); 
      } catch (Exception e) { 
       result.add("false"); 
      } 
      return result; 
     } 
     protected void onPostExecute(final ArrayList<String> result) { 
      final String output = result.get(0); 
      final Handler handler = new Handler(); 
      handler.postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        progress1.setVisibility(View.INVISIBLE); 
        if(output.equals("true")){ 
         TextView verifytext = (TextView) findViewById(R.id.verifytext); 
         verifytext.setText("Device Verified"); 
         ImageView error = (ImageView) findViewById(R.id.messageImage); 
         error.setImageResource(DeviceVerification.this.getResources().getIdentifier("check", "drawable", DeviceVerification.this.getPackageName())); 
        } 
        else{ 
         TextView verifytext = (TextView) findViewById(R.id.verifytext); 
         verifytext.setText("An Error Occured on verifying device!"); 
         ImageView error = (ImageView) findViewById(R.id.messageImage); 
         error.setImageResource(DeviceVerification.this.getResources().getIdentifier("warning", "drawable", DeviceVerification.this.getPackageName())); 
         Button tryagain = (Button) findViewById(R.id.trygain); 
         tryagain.setVisibility(View.VISIBLE); 
        } 

       } 
      }, 10000); 
     } 

LOG ОШИБКА:

02-22 15:06:34.708 10664-10664/in.juasoft.mobeeload E/AndroidRuntime: FATAL EXCEPTION: main 
                     Process: in.juasoft.mobeeload, PID: 10664 
                     java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 
                      at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) 
                      at java.util.ArrayList.get(ArrayList.java:308) 
                      at in.juasoft.mobeeload.DeviceVerification$deviceVerify.onPostExecute(DeviceVerification.java:110) 
                      at in.juasoft.mobeeload.DeviceVerification$deviceVerify.onPostExecute(DeviceVerification.java:78) 
                      at android.os.AsyncTask.finish(AsyncTask.java:632) 
                      at android.os.AsyncTask.access$600(AsyncTask.java:177) 
                      at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:136) 
                      at android.app.ActivityThread.main(ActivityThread.java:5037) 
                      at java.lang.reflect.Method.invokeNative(Native Method) 
                      at java.lang.reflect.Method.invoke(Method.java:515) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
                      at dalvik.system.NativeStart.main(Native Method) 
+0

final Строковый вывод = result.get (0) .toString(); попробуйте это –

+0

Сделайте все вещи onPostExcecute в методе OnSuceess –

+0

Зачем принимать результат как строку? – FreedomPride

ответ

0

Я думаю, что ваша попытка изменить окончательную переменную здесь result.add("true"); и здесь result.add("false");

1

изменения

ArrayList<String> result = new ArrayList<String>; 
//remove final from result 

также изменить его не требуется но только для стенда ар codding

if(result != null && result.size()>0){ 
     final String output = result.get(0); 
    } 

изменение на onpost метода Вы gettting эту ошибку, потому что у получить размер результата ноль

1

Вы добавляете данные в «результате» ArrayList на «OnSuccess» метод, который является метод обратного вызова. , но до того, как onSuccess получит исполняемый метод onPostExcecute, вызывается в то время ArrayList «результат» пуст, поэтому IndexOutOfBoundExeption укрупнен.

+0

Да, я так думаю! Позвольте мне избежать asynTask и проверить –

+0

поместить весь код метода onPostExcecute на метод onSuccess .. и удалить AsyncTask. –

Смежные вопросы