2016-09-06 3 views
-1

У меня была ошибка при создании моего кода на устройстве Android. его сообщение об ошибкеFATAL EXCEPTION: AsyncTask # 1: java.lang.RuntimeException: Произошла ошибка во время выполнения doInBackground()

FATAL ИСКЛЮЧЕНИЕ: AsyncTask # 1 процесса: com.example.guntu, PID: 1248 java.lang.RuntimeException: Произошла ошибка при выполнении doInBackground() в android.os. AsyncTask $ 3.done (AsyncTask.java:304) на java.util.concurrent.FutureTask.finishCompletion (FutureTask.java:355) в java.util.concurrent.FutureTask.setException (FutureTask.java:222) в java.util.concurrent.FutureTask.run (FutureTask.java:242) на android.os.AsyncTask $ SerialExecutor $ 1.run (AsyncTask.java:231) на java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1112) на java.util.concurrent.ThreadPoolExecutor $ Worker .run (ThreadPoolExecutor.java:587) на java.lang.Thread.run (Thread.java:818) Вызванный: java.lang.NullPointerException: попытка вызвать виртуальный метод «org.json.JSONArray Org. json.JSONObject.getJSONArray (java.lang.String) 'на нулевом объекте ссылка на com.example.guntu.List $ DownloadJSON.doInBackgroun d (List.java:74) at com.example.guntu.List $ DownloadJSON.doInBackground (List.java:49) на android.os.AsyncTask $ 2.call (AsyncTask.java:292) на java. util.concurrent.FutureTask.run (FutureTask.java:237) at android.os.AsyncTask $ SerialExecutor $ 1.run (AsyncTask.java:231) at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java: 1112) по адресу java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:587) at java.lang.Thread.run (Thread.java:818) 09-06 07: 37: 48.656 1248-1248/com.example.guntu E/WindowManager: android.view.WindowLeaked: активность com.example.guntu.List просочилась окно com.android.internal.policy.impl.PhoneWindow $ DecorView {35557537 В.Е. .... R ...... D 0,0-684,322}, который был первоначально добавлен здесь на android.view.ViewRootImpl. (ViewRootImpl.java:364) на android.view.WindowManagerGlobal.addView (WindowManagerGlobal .java: 271) на android.view.WindowManagerImpl.addView (WindowManagerImpl.java:85) в android.app.Dialog.show (Dialog.java:298) в com.example.guntu.List $ DownloadJSON. onPreExecut e (List.java:62) на android.os.AsyncTask.executeOnExecutor (AsyncTask.java:591) на android.os.AsyncTask.execute (AsyncTask.java:539) на com.example.guntu.List. OnCreate (List.java:44) на android.app.Activity.performCreate (Activity.java:6033) на android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1106) на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2288) на android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2397) в android.app.ActivityThread.access $ 800 (ActivityThread.java:151) в android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1310) на android.os.Handler.dispatchMessage (Handler.java:102) на android.os.Looper.loop (Looper.java:135) на android.app.ActivityThread .main (ActivityThread.java:5268) по адресу java.lang.reflect.Method.invoke (собственный метод) по адресу java.lang.reflect.Method.inv oke (Method.java:372) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:902) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:697)

вот мой код

private class DownloadJSON extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     // Create a progressdialog 
     mProgressDialog = new ProgressDialog(List.this); 
     // Set progressdialog title 
     mProgressDialog.setTitle("Android JSON Parse Tutorial"); 
     // Set progressdialog message 
     mProgressDialog.setMessage("Loading..."); 
     mProgressDialog.setIndeterminate(false); 
     // Show progressdialog 
     mProgressDialog.show(); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     // Create an array 
     arraylist = new ArrayList<HashMap<String, String>>(); 
     // Retrieve JSON Objects from the given URL address 
     jsonobject = JSONFunction 
       .getJSONfromURL("http://localhost/atm_db/json/json.php"); 
     try { 
      // Locate the array name in JSON 
      jsonarray = jsonobject.getJSONArray(""); 

      for (int i = 0; i < jsonarray.length(); i++) { 
       HashMap<String, String> map = new HashMap<String, String>(); 
       jsonobject = jsonarray.getJSONObject(i); 
       // Retrive JSON Objects 
       map.put("nama_atm", jsonobject.getString("nama_atm")); 
       map.put("alamat", jsonobject.getString("alamat")); 
       map.put("latitude", jsonobject.getString("latitude")); 
       map.put("longtitude", jsonobject.getString("longtitude")); 
       // Set the JSON Objects into the array 
       arraylist.add(map); 
      } 
     } catch (JSONException e) { 
      Log.e("Error", e.getMessage()); 
      e.printStackTrace(); 
     } 
     return null; 
    } 
+0

В какой строке указывается ваша ошибка? –

ответ

0

похоже jsonobject.getJSONArray(""); бросает ошибку из-за того, что JSONObject является нулевым.

Вам нужно будет дважды проверить, что вы получаете данные, и если да, то формат данных JSON.

+1

Yup. Это возвращает null: jsonobject = JSONFunction.getJSONfromURL ("http: //localhost/atm_db/json/json.php"); Это может быть недостающее разрешение INTERNET, или вы оставили «localhost» в URL-адресе, когда это должен быть IP-адрес сервера, на который вы пытаетесь попасть. : D – DataDino

0

Заменить DownloadJSON со следующим кодом:

public class DownloadJSON extends AsyncTask<String ,Integer , JSONObject> { 

    DownloadJSON(){ 
     // Create an array 
     arraylist = new ArrayList<HashMap<String, String>>(); 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     // Create a progressdialog 
     mProgressDialog = new ProgressDialog(List.this); 
     // Set progressdialog title 
     mProgressDialog.setTitle("Android JSON Parse Tutorial"); 
     // Set progressdialog message 
     mProgressDialog.setMessage("Loading..."); 
     mProgressDialog.setIndeterminate(false); 
     // Show progressdialog 
     mProgressDialog.show(); 
    } 

    @Override 
    protected JSONObject doInBackground(String... params) { 
     // Retrieve JSON Objects from the given URL address 
     jsonobject = JSONFunction.getJSONfromURL("http://localhost/atm_db/json/json.php"); 
     return jsonobject; 
    } 

    @Override 
    protected void onPostExecute(JSONObject s) { 
     super.onPostExecute(s); 
     try { 
      // Locate the array name in JSON 
      jsonarray = jsonobject.getJSONArray("PUT KEY OF JSON HERE"); 

      for (int i = 0; i < jsonarray.length(); i++) { 
       HashMap<String, String> map = new HashMap<String, String>(); 
       jsonobject = jsonarray.getJSONObject(i); 
       // Retrive JSON Objects 
       map.put("nama_atm", jsonobject.getString("nama_atm")); 
       map.put("alamat", jsonobject.getString("alamat")); 
       map.put("latitude", jsonobject.getString("latitude")); 
       map.put("longtitude", jsonobject.getString("longtitude")); 
       // Set the JSON Objects into the array 
       arraylist.add(map); 
      } 
     } catch (JSONException e) { 
      Log.e("Error", e.getMessage()); 
      e.printStackTrace(); 
     } 
    } 


    @Override 
    protected void onProgressUpdate(Integer... values) { 
     super.onProgressUpdate(values); 
    } 
} 

Примечание:

1. Перед возвратом jsonobject из doInBackground() убедитесь, что вы получаете действительный jsonobject из указанного вами URL-адреса.

2. При получении jsonArray из jsonobject используйте ключ массива.

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

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