【问题标题】:Android Array with JSON results带有 JSON 结果的 Android 数组
【发布时间】:2015-05-18 21:22:43
【问题描述】:

我想更新一个不同的线程,该线程是用我编写的一些不起作用的代码创建的。我正在尝试解析我的信息,在发送发布请求后,它看起来像这样 [{"fromUser":"Andrew"},{"fromUser":"Jimmy"}]

然后我想将这些用户添加到列表视图中。 这是我发送 HTTPpost 的代码,然后是我尝试解析并将其放入适配器的代码。

 HttpClient httpClient = new DefaultHttpClient();

            HttpPost httpPost = new HttpPost(htmlUrl);

            List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();
            nameValuePair.add(new BasicNameValuePair("Username", "Brock"));

            try {
                httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            try {
               HttpResponse response = httpClient.execute(httpPost);

                // writing response to log
                Log.d("Http Response:", response.toString());
            } catch (ClientProtocolException e) {
                // writing exception to log
                e.printStackTrace();
            } catch (IOException e) {
                // writing exception to log
                e.printStackTrace();
            }
            try {
                JSONObject pendingUsers = new JSONObject("$myArray");
            } catch (JSONException e) {
                e.printStackTrace();
            }

            // Read response to string
            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(is,"utf-8"),8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                    sb.append(line + "\n");
                }
                is.close();
                result = sb.toString();
            } catch(Exception e) {
                return null;
            }

            // Convert string to object
            try {
                jsonObject = new JSONObject(result);
            } catch(JSONException e) {
                return null;
            }
public void getJsonResult(JSONObject pendingRequests)
{
    pendingRequests = jsonObject;
}

这是我尝试接收这个并将其放入我的列表的地方

 HTTPSendPost postSender = new HTTPSendPost();
        postSender.Setup(500, 050, "tesT", htmlUrl);
        postSender.execute();

        JSONObject pendingRequests = new JSONObject();
         postSender.getJsonResult(pendingRequests);

        try {
            for(int i = 0; i < pendingRequests.length(); i++) {
                JSONArray fromUser = pendingRequests.getJSONArray("fromUser");
                pendingRequestsArray.add(i, fromUser.toString());

            }


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


        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.activity_friends, pendingRequestsArray);

        pendingRequestsListView.setAdapter(adapter);

当我在我的应用程序上尝试它时,我在 listView 上没有得到任何结果,我们将不胜感激。很抱歉重新发布,但我现在有更多信息和代码。下次我不会在没有我试过的代码的情况下提问。

【问题讨论】:

  • 你尝试了什么?
  • 我尝试使用 Parse JSON 类(我现在已将其删除,因为它不起作用),但这对我不起作用,因为我确实需要发送带有参数的帖子和我创建的解析类无法做到这一点。 (不知道该怎么做。我不是那么先进)
  • 你会分享你所做的代码
  • 嗯,我希望我可以但我删除了它,让我试着写一些新代码@Fahim
  • @Fahim 我已经完全更新了我的代码

标签: php android arrays json


【解决方案1】:

尝试使用JSONArray - 它有一个接受 JSON 字符串的构造函数,然后您可以访问它。例如:

myJsonString = "{\"Andrew\", \"Jimmy\"}";

JSONArray array = new JSONArray(myJsonString);

for(int i = 0; i < array.length(); i++) {
    Log.v("json", array.optString(i));

    // You can also use this
    Log.v("json", array.getString(i));

    // Or this, but you have to coerce yourself
    Log.v("json", array.get(i).toString());
}

【讨论】:

    【解决方案2】:

    在 Android 中(我不知道它是否是 Java 功能),您可以使用 JSONObjectJSONArray 类来解析、存储和使用 JSON

    JSONObject myObject = new JSONObject(responseString);
    

    一旦你的 JSONObject 被初始化,你可以从它获取值:

    myObject.getString(key);//String, or Integer, or whatever JSON admits
    

    【讨论】:

    • 这很完美,但是 responseString 是什么,这是在我想在其中使用 Object 的班级中,还是在我发送帖子的班级中? @Sherekan
    • "responseString" 这是您从服务器获取的响应,在这种情况下它将是: [{"fromUser":"Andrew"},{"fromUser":"Jimmy"}] 和您应该使用 JSONArray 类来存储和处理它,在 JSONArray 类中您可以使用“myJSONArray.getJSONObject(int index)”方法获取每个 JSONObject
    • 像这样的 JSONObject pendingUsers = new JSONObject("$myArray");
    • Eww,不,"$myArray" 是一个普通的 Java 字符串,你需要一个 JSON 格式的字符串,正确的答案是 JSONArray pendingUsers = new JSONArray("[{"fromUser":"Andrew" },{"fromUser":"吉米"}]");但可以肯定的是,您可以在构造函数中放置一个保存该字符串的变量。请注意,此示例中的引号没有转义,因此如果您在 IDE 中对其进行硬编码,它将无法正常工作
    • 对不起,我没看到,日志在“response.toString()”中打印什么?
    【解决方案3】:

    回复:

    [
     {"fromUser":"Andrew"},
     {"fromUser":"Jimmy"}
    ]
    

    所以基本上,您收到的是一个 JSON 数组。我建议,您宁愿将您的数据编码为来自后端的 JSON 对象,并在应用程序端接收它,

    { 
       "DATA":[
          {"fromUser":"Andrew", "toUser":"Kevin"},
          {"fromUser":"Jimmy", "toUser":"David"}
        ]
    }
    

    这将是您在 Java 中的 android 端代码。

    void jsonDecode(String jsonResponse) { try { JSONObject jsonRootObject = new JSONObject(jsonResponse); JSONArray jData = jsonRootObject.getJSONArray("DATA"); for(int i = 0; i < jData.length(); ++i) { JSONObject jObj = jData.getJSONObject(i); String fromUser = jObj.optString("fromUser"); String toUser = jObj.optString("toUser"); Toast.makeText(context, "From " + fromUser "To" + toUser + ".",0).show(); } } catch(JSONException e) { e.printStackTrace(); } }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-12
      • 2021-12-30
      • 1970-01-01
      相关资源
      最近更新 更多