java.lang.NullPointerException发生,开发android,我该如何解决?

时间:2015-09-03 10:37:45

标签: java android json nullpointerexception

发生java.lang.NullPointerException Log-cat表示尝试在空对象引用上调用虚方法'java.lang.String org.json.JSONObject.toString()'

这是我的代码: 我正在尝试从服务器(MySql)数据库获取jSon数据,然后将其显示在列表中。

public class AllProducts extends ListActivity {

    private ProgressDialog pDialog;
    JSONParser jParser=new JSONParser();

    ArrayList<HashMap<String,String>> productsList;

    private static String url_all_products = "http://server:host.../view.php";

    private static final String TAG_SUCCESS="success";
    private static final String TAG_PRODUCTS = "products";
    private static final String TAG_PID = "pid";
    private static final String TAG_NAME = "name";

    JSONArray products=null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.all_products);

        productsList=new ArrayList<HashMap<String, String>>();

        new LoadAllProducts().execute();

new LoadAllProducts().execute();

的例外情况
        ListView lv = getListView();



    }

    class LoadAllProducts extends AsyncTask<String,String,String>

Java.lang.NullPointerException尝试在空对象引用上调用虚方法'java.lang.String org.json.JSONObject.toString()' 发生在class LoadAllProducts extends AsyncTask<String,String,String>

    {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog= new ProgressDialog(AllProducts.this);
            pDialog.setMessage("Loading Products....Wait..");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(false);
            pDialog.show();

pDialog.show();的例外情况             }

        @Override
        protected String doInBackground(String... params) {


            ContentValues param=new ContentValues();
            JSONObject json= jParser.makeHttpRequest(url_all_products,"GET",param);
            Log.d("All Products: ", json.toString());

Log.d("All Products: ", json.toString());

发生的java.lang.NullPointerException
            try{
                int success=json.getInt(TAG_SUCCESS);
                if(success==1)
                {
                    products = json.getJSONArray(TAG_PRODUCTS);
                    for(int j=0;  j<products.length() ; j++ )
                    {
                        JSONObject c = products.getJSONObject(j);
                        String id=c.getString(TAG_PID);
                        String name=c.getString(TAG_NAME);
                        HashMap<String,String> map=new HashMap<String,String>();
                        map.put(TAG_PID,id);
                        map.put(TAG_NAME,name);
                        productsList.add(map);


                    }

                }
                else {
                    Intent i=new Intent(getApplicationContext(),NewProduct.class);
                    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(i);
                }


            }catch(JSONException e)
            {
                e.printStackTrace();
            }

            return null;

        }


    }
}

我的UI中有一个按钮,用于从服务器获取数据并将其显示在列表中,当我点击按钮,pDialog显示然后应用程序“无响应”并发生这些异常

这是LogCat

09-03 16:10:40.500  27696-31923/com.example.vashisht.myapplication W/System.err﹕ at libcore.io.IoBridge.connectErrno(IoBridge.java:137)
09-03 16:10:40.500  27696-31923/com.example.vashisht.myapplication W/System.err﹕ at libcore.io.IoBridge.connect(IoBridge.java:122)
09-03 16:10:40.500  27696-31923/com.example.vashisht.myapplication W/System.err﹕ ... 19 more
09-03 16:10:40.500  27696-31923/com.example.vashisht.myapplication E/Buffer Error﹕ Error converting result java.lang.NullPointerException: lock == null
09-03 16:10:40.500  27696-31923/com.example.vashisht.myapplication E/JSON Parser﹕ Error parsing data org.json.JSONException: End of input at character 0 of
09-03 16:10:40.510  27696-31923/com.example.vashisht.myapplication E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
    Process: com.example.vashisht.myapplication, PID: 27696
    java.lang.RuntimeException: An error occured while executing doInBackground()
            at android.os.AsyncTask$3.done(AsyncTask.java:300)
            at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
            at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
            at java.util.concurrent.FutureTask.run(FutureTask.java:242)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:818)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String org.json.JSONObject.toString()' on a null object reference
            at com.example.vashisht.myapplication.AllProducts$LoadAllProducts.doInBackground(AllProducts.java:76)
            at com.example.vashisht.myapplication.AllProducts$LoadAllProducts.doInBackground(AllProducts.java:57)
            at android.os.AsyncTask$2.call(AsyncTask.java:288)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:818)
09-03 16:10:40.980  27696-27696/com.example.vashisht.myapplication E/WindowManager﹕ android.view.WindowLeaked: Activity com.example.vashisht.myapplication.AllProducts has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{10a4b377 V.E..... R......D 0,0-1026,348} that was originally added here
            at android.view.ViewRootImpl.<init>(ViewRootImpl.java:382)
            at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:261)
            at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
            at android.app.Dialog.show(Dialog.java:298)
            at com.example.vashisht.myapplication.AllProducts$LoadAllProducts.onPreExecute(AllProducts.java:67)
            at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:587)
            at android.os.AsyncTask.execute(AsyncTask.java:535)
            at com.example.vashisht.myapplication.AllProducts.onCreate(AllProducts.java:50)
            at android.app.Activity.performCreate(Activity.java:5958)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1129)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2474)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1359)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:155)
            at android.app.ActivityThread.main(ActivityThread.java:5696)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:824)
09-03 16:10:44.250  27696-31923/com.example.vashisht.myapplication D/Process﹕ killProcess, pid=27696
09-03 16:10:44.260  27696-31923/com.example.vashisht.myapplication D/Process﹕ com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException:138 java.lang.ThreadGroup.uncaughtException:693 java.lang.ThreadGroup.uncaughtException:690

1 个答案:

答案 0 :(得分:0)

这意味着JSONObject json == null。您可以在调用JSONObject上的方法之前在代码中进行检查。我猜你在调用httprequest时实际上并没有得到数据。