带有 JSON 结果的 Android 数组


Android Array with JSON results

我想更新我用我编写的一些代码制作的另一个线程,这些代码不起作用。我正在尝试解析我的信息,在发送发布请求后,看起来像这样 [{"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);

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

尝试使用 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());
}

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

JSONObject myObject = new JSONObject(responseString);

初始化 JSONObject 后,您可以使用以下命令从中获取值:

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

响应:

[
 {"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(); } }