-1

I have a problem to show my data into listview in android when i using output by PDO SQL ini my php code, I've searching but nothing like my code, I am newbe, please help me. This my error :

6-13 00:51:50.589 21781-21781/com.spp.udi.sppmap E/AndroidRuntime: FATAL EXCEPTION: main
                                                                    Process: com.spp.udi.sppmap, PID: 21781
                                                                    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.spp.udi.sppmap/com.spp.udi.sppmap.Potensi}: java.lang.NullPointerException: Attempt to invoke virtual method 'org.json.JSONArray org.json.JSONObject.getJSONArray(java.lang.String)' on a null object reference
                                                                        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2434)
                                                                        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494)
                                                                        at android.app.ActivityThread.access$900(ActivityThread.java:153)
                                                                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1347)
                                                                        at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                        at android.os.Looper.loop(Looper.java:148)
                                                                        at android.app.ActivityThread.main(ActivityThread.java:5451)
                                                                        at java.lang.reflect.Method.invoke(Native Method)
                                                                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
                                                                     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'org.json.JSONArray org.json.JSONObject.getJSONArray(java.lang.String)' on a null object reference
                                                                        at com.spp.udi.sppmap.Potensi.onCreate(Potensi.java:37)
                                                                        at android.app.Activity.performCreate(Activity.java:6323)
                                                                        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)
                                                                        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2387)
                                                                        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494) 
                                                                        at android.app.ActivityThread.access$900(ActivityThread.java:153) 
                                                                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1347) 
                                                                        at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                        at android.os.Looper.loop(Looper.java:148) 
                                                                        at android.app.ActivityThread.main(ActivityThread.java:5451) 
                                                                        at java.lang.reflect.Method.invoke(Native Method) 
                                                                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

My ListActivity :

    package com.spp.udi.sppmap;

import android.app.Fragment;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.app.ListFragment;
import java.util.ArrayList;
import java.util.HashMap;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.SimpleAdapter;
import android.widget.TextView;

public class Potensi extends ListActivity {
    private Context mContext;

    private static final String ID_KECAMATAN = "id_kecamatan";
    private static final String NAMA_KECAMATAN = "nama_kecamatan";
    ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String,String>>();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        new fetchDataFromJSON().execute();
    }

    private class fetchDataFromJSON extends AsyncTask<String, String, JSONObject> {
        private ProgressDialog pDialog;
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(Potensi.this);
            pDialog.setMessage("Getting Data ...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(true);
            pDialog.show();
        }

        @Override
        protected JSONObject doInBackground(String... args) {
            JSONParser jParser = new JSONParser();
            JSONObject json = jParser.AmbilJson("http://sppmap.esy.es/android/potensi.php");
            return json;
        }

        @Override
        protected void onPostExecute(JSONObject json) {
            pDialog.dismiss();
            try {
                JSONArray jsonArray = json.getJSONArray("result");
                for(int i=0; i<jsonArray.length(); i++){
                    JSONObject jsonobj = jsonArray.getJSONObject(i);
                    String id_kecamatan = jsonobj.getString(ID_KECAMATAN);
                    String nama_kecamatan = jsonobj.getString(NAMA_KECAMATAN);
                    HashMap<String, String> map = new HashMap<String, String>();
                    map.put("id_kecamatan", id_kecamatan);
                    map.put("nama_kecamatan", nama_kecamatan);
                    mylist.add(map);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
            this.adapter_listview();
        }

        public void adapter_listview() {
            ListAdapter adapter = new SimpleAdapter(mContext, mylist, R.layout.potensi,
                    new String[] {ID_KECAMATAN, NAMA_KECAMATAN}, new int[] {R.id.id_kecamatan, R.id.nama_kecamatan});

            setListAdapter(adapter);
            ListView lv = getListView();
            lv.setOnItemClickListener(new OnItemClickListener() {
                public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
                    String id_kecamatan = ((TextView) view.findViewById(R.id.id_kecamatan)).getText().toString();
                    Intent in = new Intent(mContext, DetailPotensi.class);
                    in.putExtra(ID_KECAMATAN, id_kecamatan);
                    startActivity(in);
                }
            });
        }
    }
}

I hope anybody can help me to fix my problem thank you..

1 Answers1

0

As this line state

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.spp.udi.sppmap/com.spp.udi.sppmap.Potensi}: java.lang.NullPointerException: Attempt to invoke virtual method 'org.json.JSONArray org.json.JSONObject.getJSONArray(java.lang.String)' on a null object reference

which mean your JSON return from the URL is null but I assume the HTTP request never even fire. Your code for handling JSON is work perfectly. But in android application there is better to not do a HTTP request in your main thread which will lead to crash instead run it on worker thread or create a asynchronous with AsyncTask see this link. I never try JSONFunction.getJSONFromUrl to make a HTTP request before but if im not wrong it is a synchronous request process so better use other library which make a http request asynchronous. Here some good library you can use

  1. Retrofit (A little bit hard to understand at first but indeed very robust)
  2. Volley (Recomended)
  3. OK HTTP (i'm using this)

Either of the library having a succesful block which guarantee return a string from your server if the server do return one so on that point you can use to process your output.

teck wei
  • 1,375
  • 11
  • 22