【问题标题】:Retrieving JSONArrays from Java (Android)从 Java (Android) 中检索 JSONArrays
【发布时间】:2011-12-23 01:23:52
【问题描述】:

我正在尝试解析从 php 接收到的 JSONArray。我从我的日志猫看到我得到的值是 [["84.0918544152744"],["84.0918544152744"]] 但是当我去解析数组中的元素时,我得到一个 NullPointerException。这是我的代码:

 private class SetAverages extends AsyncTask<Void, Void, BufferedReader> {
         @Override
         protected BufferedReader doInBackground(Void... params) {
             String url = "...";

             Log.i(LOG_TAG, "URL = " + url);
             URL iuri;
             try {
                 iuri = new URL(url);
                 URLConnection connection = iuri.openConnection();
                 connection.setDoInput(true);
                 connection.setDoOutput(true);
                 connection.setUseCaches(false);
                 connection.setRequestProperty("Content-type",
                         "application/x-www-form-urlencoded");
                 BufferedReader br = new BufferedReader(new InputStreamReader(
                         (InputStream) connection.getContent()));
                 Log.i(LOG_TAG, "br value is " + br.readLine());
                return br;
             } catch (MalformedURLException e) {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
             } catch (IOException e) {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
             }
           return null;
         }

         @Override
         protected void onPostExecute(BufferedReader br) {
             if(br == null){
                 Log.v(LOG_TAG, "br from set averages is null");
                 return;
             }

             Log.v(LOG_TAG, "Get Averages onPostExecute");
             try{

                 Log.i(LOG_TAG, "br value is " + br.toString());
                 Log.i(LOG_TAG, "about to set up json array....");

                 JSONObject inputjson = new JSONObject(br.readLine());
                 //JSONArray inputjson = new JSONArray(br.readLine());
                 Log.i(LOG_TAG, "this worked....");

                 Log.i(LOG_TAG, "size of inputjson = " + inputjson.length());
                return;
            }catch(NullPointerException e){
                 Log.e(LOG_TAG, "Unable to get averages, NullPointerException");
                 e.printStackTrace();
             }catch(NumberFormatException e){
                 Log.e(LOG_TAG, "Unable to get averages, Number Format Exception");
                 e.printStackTrace();
             } catch (JSONException e) {
                 Log.e(LOG_TAG, "JSON Exception");
                 e.printStackTrace();
             } catch (IOException e) {
                 Log.e(LOG_TAG, "IO Exception");
                 e.printStackTrace();
             }

             return;
         }

以下是 logcat 的摘录:

12-22 20:07:59.345: INFO/HA(1000): br value is [["84.0158352941176"],["84.0158352941176"]]
12-22 20:07:59.355: VERBOSE/HA(1000): Get Averages onPostExecute
12-22 20:07:59.355: INFO/HA(1000): br value is java.io.BufferedReader@44f8f0c0
12-22 20:07:59.355: INFO/HA(1000): about to set up json array....
12-22 20:07:59.355: ERROR/HA(1000): Unable to get averages, NullPointerException

【问题讨论】:

  • 为什么要使用 br.readLine 来创建对象?
  • br.readline 发回一个应该能够格式化为 JSON 数组或 JSON 对象的数组。将此数组传递给对象本身应该没问题吗?我可能弄错了。

标签: php android arrays


【解决方案1】:

BufferedReader br = 新的 BufferedRe.. Log.i(LOG_TAG, "br 值为 " + br.readLine());

这里你正在使用行缓冲区,所以当你到达这里时:

              JSONObject inputjson = new JSONObject(br.readLine());

你不再有字符串了。

尝试删除这一行 Log.i(LOG_TAG, "br value is " + br.readLine());

祝你好运!

【讨论】:

  • 这就是问题所在。谢谢!我不知道这是真的。
猜你喜欢
  • 2016-05-10
  • 2020-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多