2017-02-17 4 views
-1

Ich bin immer noch neu in Android-Entwicklung, jetzt versuche ich eine einfache Apps zu entwickeln, um mehr Android-Entwicklung zu studieren. Ich versuche auch, JSON Parser zu verwenden, aber ich habe ein kleines Problem, wenn ich Daten zeige.Versuchen JSON Parse erhalten einen Fehler von FATAL EXCEPTION Haupt

bekam ich einen Fehler von meinem Debugger:

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) 

Ich sehe schon an der Linie 146 und 40, aber ich konnte das Problem nicht finden. Ich mache bereits einige Recherchen in Google, bevor ich hier frage, weil ich das Konzept nicht verstanden habe, konnte ich dieses Problem nicht beheben.

Hier ist meine Aktivitätscode:

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); 
     } 
    } 
} 

Ich folgte Tutorial JSON Parse aus TutorialPoint und ich versuchte, die api-URL zu ändern, um mehr zu erkunden. Aber ich habe so einen Fehler bekommen, die ursprüngliche Programmierung aus dem Tutorial.

+0

fügen Sie Code hier! –

+0

und fügen Sie Ihren Adaptercode hinzu! –

+0

Kann geändert werden Dieses JSONArray data = new JSONArray (jsonObj.getJSONArray ("data")); in deinem Code. –

Antwort

0

Stellen Sie sicher, dass Ihre R.layout.perak_layout eine ListView mit ID R.id.list hat. Wenn es nicht eine Ansicht mit id hat R.id.list dann ListView lv wird nicht initialisiert und es null sein und damit die NullPointerException auf lv.setAdapter(adapter);

+0

Sorry mein Fehler, ich ändere es einfach und vergiss, das ListView im Layout hinzuzufügen. Ich konnte das Problem nicht verstehen, weshalb ich den einfachen Fehler, den ich gemacht habe, nicht realisieren konnte. Ich hoffe, das könnte mein letzter Fehler sein. –

Verwandte Themen