【问题标题】:JSON Array NullPointerExceptionJSON 数组 NullPointerException
【发布时间】:2013-11-29 09:51:22
【问题描述】:

在 Android 应用中解析此问题的最佳方法是什么?我在运行应用程序时收到 java.lang.NullPointerException。请查看我的代码,如果您有任何建议,请告诉我。

{"begin":[{"id":1,"name":"Bob","size":2}],"open":[{"id":1,"name":"Mike","size":2}]}

这是我的代码。

public class MainFragment extends Fragment {
    public MainFragment() {}

    //URL to get JSON Array
    private String url = "URL...";

    //JSON Node Names
    private static final String TAG_BEGIN = "begin";
    private static final String TAG_ID = "id";
    private static final String TAG_NAME = "name";
    private static final String TAG_SIZE = "size";

    JSONArray begin = null;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container, false);

        new JSONParse().execute();

        return rootView;
    }

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

        }

        @Override
        protected JSONObject doInBackground(String... args) {
            JSONParser jParser = new JSONParser();

            // Getting JSON from URL
            JSONObject json = jParser.getJSONFromUrl(url);
            return json;
        }

        @Override
        protected void onPostExecute(JSONObject json) {
            pDialog.dismiss();
            try {
                // Getting JSON Array
                begin = json.getJSONArray(TAG_BEGIN);
                JSONObject c = begin.getJSONObject(0);

                // Storing  JSON item in a Variable
                String id = c.getString(TAG_ID);
                String name = c.getString(TAG_NAME);
                String size = c.getString(TAG_SIZE);

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

        }
    }
}

当我运行活动时,我收到此错误:

FATAL EXCEPTION: main

java.lang.NullPointerException
at
...$MainFragment$JSONParse.onPostExecute(MainActivity.java:399)
at
...$MainFragment$JSONParse.onPostExecute(MainActivity.java:373)

这是……

begin = json.getJSONArray(TAG_BEGIN);

还有……

private class JSONParse extends AsyncTask<String, String, JSONObject> {

【问题讨论】:

  • 什么是TAG_CURRENT
  • 我看不到“current = json.getJSONArray(TAG_BEGIN);”在 onPostExecute 方法中。我看到“开始 = json.getJSONArray(TAG_CURRENT);”
  • 请从 logcat 发布堆栈跟踪。
  • 哎呀@ShobhitPuri。 TAG_CURRENT 应该已更改为 TAG_BEGIN。我只是忘记重命名了。
  • @WilliamRiley 我重命名了我的一些代码。请以当前为开始。我只是忘了改变那部分。

标签: java android json android-asynctask nullpointerexception


【解决方案1】:

确保您的 JSON 响应没有返回 null。

这也可能导致 NullPointerException:

        begin = json.getJSONArray(TAG_CURRENT);

【讨论】:

  • 如何确保它不返回 null?
【解决方案2】:

调试:

在第 399 行放置一个断点:(假设是 begin=json.getJSONArray(TAG_BEGIN);)如果显示它们,请双击行号“399”,否则,只需单击文档左侧那条线。

在调试模式下运行(看起来像一个小错误)呃!哈哈哈。在执行该代码时,应用程序将停止,您可以返回代码并显示名为“Expressions”的窗口。

如果该窗口不可见,请单击“窗口”>“显示视图”>“其他”>“调试”>“表达式”。然后您可以将表达式添加到该列表以查看什么是空的。

将 json 添加到表达式列表中,并确保它具有 JSON 字符串。

这很疯狂,需要解释很多,但希望它可以帮助您开始调试。您必须知道如何调试才能编写应用程序。

【讨论】:

  • 有一点需要讨论,需要通过某种即时通讯工具联系我,或者聊天。但是你还没有在这里聊天。
猜你喜欢
  • 2013-02-16
  • 1970-01-01
  • 2013-10-13
  • 2020-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多