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.
fügen Sie Code hier! –
und fügen Sie Ihren Adaptercode hinzu! –
Kann geändert werden Dieses JSONArray data = new JSONArray (jsonObj.getJSONArray ("data")); in deinem Code. –