2017-02-17 32 views
-1

我還是新的Android開發,現在我正在嘗試開發一個簡單的應用程序來學習更多的Android開發。我也嘗試使用JSON解析器,但是當顯示數據時我有點問題。嘗試JSON解析得到一個錯誤的致命例外主

我從我的調試得到了一個錯誤:

E/AndroidRuntime: FATAL EXCEPTION: main 
       Process: com.banjir.info.infobanjir, PID: 1847 
       java.lang.NullPointerException 
        at com.banjir.info.infobanjir.perak_activity$GetData.onPostExecute(perak_activity.java:146) 
        at com.banjir.info.infobanjir.perak_activity$GetData.onPostExecute(perak_activity.java:40) 
        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:149) 
        at android.app.ActivityThread.main(ActivityThread.java:5257) 
        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:793) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609) 
        at dalvik.system.NativeStart.main(Native Method) 

我已經看線146和40,但我無法找到問題。在問這裏之前,我已經在谷歌做了一些研究,因爲我不明白這個概念,我無法解決這個問題。

這裏是我的活動代碼:

package com.banjir.info.infobanjir; 

import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.SimpleAdapter; 
import android.widget.Toast; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.util.ArrayList; 
import java.util.HashMap; 

/** 
* Created by USER on 15/2/2017. 
*/ 
public class perak_activity extends AppCompatActivity { 

    private String TAG = perak_activity.class.getSimpleName(); 
    private ListView lv; 

    ArrayList<HashMap<String, String>> banjirList; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.perak_layout); 

     banjirList = new ArrayList<>(); 
     lv = (ListView) findViewById(R.id.list); 

     new GetData().execute(); 
    } 

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

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      Toast.makeText(perak_activity.this,"Json Data is downloading",Toast.LENGTH_LONG).show(); 
     } 

     @Override 
     protected Void doInBackground(Void... arg0) { 
      HttpHandler sh = new HttpHandler(); 
      // Making a request to url and getting response 
      String url = "https://banjir-api.herokuapp.com/api/v1/reports.json"; 
      String jsonStr = sh.makeServiceCall(url); 

      Log.e(TAG, "Response from url: " + jsonStr); 
      if (jsonStr != null) { 
       try { 
        JSONObject jsonObj = new JSONObject(jsonStr); 

        // Getting JSON Array node 
        JSONArray data = jsonObj.getJSONArray("data"); 


        // looping through All data 
        for (int i = 0; i < data.length(); i++) { 
         JSONObject c = data.getJSONObject(i); 
         String id = c.getString("id"); 
         String paras_air = c.getString("paras_air"); 
         String jenis_jalan = c.getString("jenis_jalan"); 
         String section = c.getString("section"); 
         String no_laluan = c.getString("no_laluan"); 
         String nama_laluan = c.getString("nama_laluan"); 
         String nama_jalan = c.getString("nama_jalan"); 
         String daerah = c.getString("daerah"); 
         String negeri = c.getString("negeri"); 
         String dikemaskini = c.getString("dikemaskini"); 
         String status = c.getString("status"); 
         String latitude = c.getString("latitude"); 
         String longitude = c.getString("longitude"); 
         String google_maps_url = c.getString("google_maps_url"); 

         // tmp hash map for single contact 
         HashMap<String, String> data1 = new HashMap<>(); 

         // adding each child node to HashMap key => value 
         data1.put("id", id); 
         data1.put("paras_air", paras_air); 
         data1.put("jenis_jalan", jenis_jalan); 
         data1.put("section", section); 
         data1.put("no_laluan", no_laluan); 
         data1.put("nama_laluan", nama_laluan); 
         data1.put("nama_jalan", nama_jalan); 
         data1.put("daerah", daerah); 
         data1.put("negeri", negeri); 
         data1.put("dikemaskini", dikemaskini); 
         data1.put("status", status); 
         data1.put("latitude", latitude); 
         data1.put("longitude", longitude); 
         data1.put("google_maps_url", google_maps_url); 

         // adding contact to contact list 
         banjirList.add(data1); 
        } 

        // Getting JSON Object About 
        JSONObject about = jsonObj.getJSONObject("about"); 
        String github = about.getString("github"); 
        String source = about.getString("source"); 
        String created_by = about.getString("created_by"); 


       } catch (final JSONException e) { 
        Log.e(TAG, "Json parsing error: " + e.getMessage()); 
        runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          Toast.makeText(getApplicationContext(), 
            "Json parsing error: " + e.getMessage(), 
            Toast.LENGTH_LONG).show(); 
         } 
        }); 

       } 

      } else { 
       Log.e(TAG, "Couldn't get json from server."); 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         Toast.makeText(getApplicationContext(), 
           "Couldn't get json from server. Check LogCat for possible errors!", 
           Toast.LENGTH_LONG).show(); 
        } 
       }); 
      } 

      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      super.onPostExecute(result); 
      ListAdapter adapter = new SimpleAdapter(perak_activity.this, banjirList, 
        R.layout.list_item, new String[]{ "paras_air","nama_laluan", "daerah", "status"}, 
        new int[]{R.id.paras_air, R.id.nama_laluan, R.id.daerah, R.id.status}); 
      lv.setAdapter(adapter); 
     } 
    } 
} 

我從TutorialPoint跟着教程JSON解析,我試圖改變API URL探索更多。但是我得到了一個像這樣的錯誤,來自教程的原始編碼工作。

+0

在此處添加您的代碼! –

+0

並添加您的適配器代碼! –

+0

可能會更改此JSONArray數據=新的JSONArray(jsonObj.getJSONArray(「data」));在你的代碼中。 –

回答

0

確保您的R.layout.perak_layoutListView的編號爲R.id.list。如果它沒有編號爲R.id.list的視圖,那麼您的ListView lv將不會被初始化,因此它是空的,因此NullPointerExceptionlv.setAdapter(adapter);

+0

對不起,我只是改變它,忘記在佈局中添加ListView。我無法理解這個問題,爲什麼我不能意識到我犯的這個簡單的錯誤。我希望這可能是我最後的錯誤。 –

相關問題