【问题标题】:java.lang.NullPointerException occuring, developing android, how do I fix that? [duplicate]java.lang.NullPointerException 发生,开发android,我该如何解决? [复制]
【发布时间】:2015-11-29 03:38:29
【问题描述】:

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&lt;String,String,String&gt;

    {

        @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());

java.lang.NullPointerException 发生在Log.d("All Products: ", json.toString());

            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

【问题讨论】:

  • 请发布完整的 logcat 插入一行
  • if Log.d("所有产品:", json.toString());抛出 NullPointerException 然后您的 json 响应为空。尝试将 json!=null 放在您的日志语句之前。让我知道这个是否奏效。将此行放在您的日志语句上方 if(json!=null)
  • @Amrut 是的,这行得通!我得到的 json 是 null

标签: java android json nullpointerexception


【解决方案1】:

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

【讨论】:

  • 是的,我想我没有从 httprequest 获得任何数据。
  • 然后正确调试您的代码并检查您的响应是什么样的,以及您是否得到响应。 - 还要在服务器端检查请求是否被处理
猜你喜欢
  • 1970-01-01
  • 2021-01-09
  • 2021-12-28
  • 2021-09-24
  • 2012-05-14
  • 2021-06-11
  • 1970-01-01
  • 2016-01-04
  • 1970-01-01
相关资源
最近更新 更多