如何处理响应JSON,它是Android Volley中JsonObjectRequest的数组和对象集合的组合

时间:2016-01-21 11:13:08

标签: android json android-volley

我绝对是Android的初学者。现在我开始学习针对HTTP请求和响应的排球。我将响应数据绑定到Listview。我正在制作这样的http get请求。

这是我的具有截击请求的活动类

public class VolleyActivity extends Activity{
    private int lastSawFirstListItem;
    private int itemLoadedOn;
    private ArrayAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.volley_main);

        Button getBtn = (Button)findViewById(R.id.btn_get_request);
        getBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });

        ListView listView = (ListView)findViewById(R.id.volleyListView);
        adapter = new CustomAdapter(this,new Entity[0]);
        listView.setAdapter(adapter);
        String url = "http://api.androidhive.info/feed/feed.json";

        JsonObjectRequest jsonRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject jsonObject) {
                List<Entity> items = new ArrayList<Entity>();
                try{
                    jsonObject = jsonObject.getJSONObject("feed");
                    //Then how to handle my response collection here
                     //because this is the combination of array and object collection
                }
                catch (JSONException e)
                {
                    Toast.makeText(getBaseContext(),"JSON exception",Toast.LENGTH_SHORT).show();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {

            }
        });

        Volley.newRequestQueue(getBaseContext()).add(jsonRequest);
}

  public Entity convertToEntity(JSONObject item) throws JSONException
    {
        Entity en = new Entity();
        en.setId(item.getInt("id"));
        en.setName(item.getString("name"));
        en.setName(item.getString("url"));
        return en;
    }
}

这是json链接,我请求http://api.androidhive.info/feed/feed.json

我该如何处理这种组合?我已经发出了抛出错误的ArrayRequest。

我正在处理像这样的响应回调

try{
                    jsonObject = jsonObject.getJSONObject("feed");
                    for(int i=0;i<jsonObject.length();i++){
                        StringBuilder sb = new StringBuilder();
                        sb.append(i);
                        String name = jsonObject.getJSONObject(sb.toString()).getString("name");
                    }
                    Toast.makeText(getBaseContext(),"ok",Toast.LENGTH_SHORT).show();
                }
                catch (JSONException e)
                {
                    Toast.makeText(getBaseContext(),e.getMessage(),Toast.LENGTH_SHORT).show();
                }

但它会像截图一样抛出JSONException。

enter image description here

2 个答案:

答案 0 :(得分:1)

我得到了答案。这就是我在问题的响应回调中处理json响应的方法,即对象和数组的组合。

List<Entity> items = new ArrayList<Entity>();
                try{
                    JSONArray jsonArray = jsonObject.getJSONArray("feed");
                    for(int i=0;i<jsonArray.length();i++)
                    {
                        JSONObject item = jsonArray.getJSONObject(i);
                       //work with entity items
                    }
                    Toast.makeText(getBaseContext(),"Success",Toast.LENGTH_SHORT).show();
                }
                catch (JSONException e)
                {
                    Toast.makeText(getBaseContext(),e.getMessage(),Toast.LENGTH_SHORT).show();
                }

答案 1 :(得分:0)

从jsonObject使用获取字符串 String s = jsonObject.getString("sJson"); // here sJosn is the key in jsonObject. 类似地,布尔值使用Boolean b = jsonObject.getBoolean("key")和整数:int i = jsonObject.getInt("keyint");