2016-09-06 7 views
-1

アンドロイドデバイスで自分のコードをビルドするときにエラーが発生しました。そのエラーレポート致命的な例外:AsyncTask#1:java.lang.RuntimeException:doInBackground()の実行中にエラーが発生しました

致命的な例外:AsyncTask#1 プロセス:com.example.guntu、PID:1248 java.lang.RuntimeExceptionは:android.osで doInBackground() の実行中にエラーが発生しました。 AsyncTask $ 3.done java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)で(AsyncTask.java:304) 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 $ワーカーで.run(ThreadPoolExecutor.java:587) java.lang.Thread.run(Thread.java:818) によって引き起こされた:java.lang.NullPointerException:仮想の呼び出しを試みる メソッド 'org.json.JSONArray org。 json.JSONObject.getJSONArray(java.lang.String) 'nullオブジェクトの場合 参照 の場合 com.example.guntu.List $ DownloadJSON.doInBackgroun d(List.java:74) at com.example.guntu.List $ DownloadJSON.doInBackground(List.java:49) at android.os.AsyncTask $ 2.call(AsyncTask.java:292) at java。 (UnlockTask.java:231) ( )java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:)このスレッドに返信します...返信> 1112) java.lang.Thread.run(Thread.java:818)9月6日07時 java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:587) で:37:48.656 1248-1248/com.example.guntu E /ウィンドウマネージャ: はandroid.view.WindowLeaked:活動 com.example.guntu.Listが窓 com.android.internal.policy.impl.PhoneWindow $ DecorViewを{35557537 がVE漏れました.... R ...... D 0,0-684,322} android.view.ViewRootImpl。(ViewRootImpl.java:364) at android.view.WindowManagerGlobal.addView(WindowManagerGlobal .javaファイル:271) com.example.guntu.List $ DownloadJSONでandroid.app.Dialog.show(Dialog.java:298) でandroid.view.WindowManagerImpl.addView(WindowManagerImpl.java:85) で 。 onPreExecut e(List.java:62) android.os.AsyncTask.executeOnExecutor(AsyncTask.java:591) android.os.AsyncTask.execute(AsyncTask.java:539) at com.example.guntu.List。 onCreate android.app.ActivityThreadでandroid.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)で(List.java:44)android.app.Activity.performCreate(Activity.java:6033)で 。 android.app.ActivityThreadでandroid.app.ActivityThread.access $ 800からperformLaunchActivity android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2397)で(ActivityThread.java:2288) (ActivityThread.java:151) $ 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)(ネイティブメソッド) at 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) )

はここに起因するjsonobjectがnullであるという事実に私のコード

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("");がエラーを投げているように見えています。

データを取得しているかどうかをチェックし、その場合はそのJSONデータの形式を確認します。

+1

である。これはnullを返しています。jsonobject = JSONFunction.getJSONfromURL( "http://localhost/atm_db/json/json.php"); インターネットアクセスが不足している可能性があります。ヒットしようとしているサーバーのIPアドレスにする必要がある場合は、URLに "localhost"を残してください。 :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()から返す前に、あなたが指定したURLから有効なjsonobjectを受け取っていることを確認してください。

2。 jsonobjectからjsonArrayを取得する際に、配列のキーを使用します。

関連する問題