Android - GsonRequest返回null

时间:2014-01-16 09:53:25

标签: java android json gson android-volley

我在这里有一个ListFragment,它使用一个url来使用GSON库解析JSON。排球为背景任务:

public class LatestFragment extends ListFragment {

    public LatestFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragment_latest, container,
                false);

        return rootView;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        arrItemList = new ArrayList<ItemListModel>();
        va = new LatestAdapter(getActivity(), arrItemList);

        loadItemList(1);
    }

    private void loadItemList(int page) {
        mRequestQueue = Volley.newRequestQueue(getActivity());
        pd = ProgressDialog.show(getActivity(), null, "Loading...");

        // TODO use Volley param
        currentPage = page;
        param = "?page=" + currentPage;

        String url = Constants.LATEST_ITEM_LIST + param;

        GsonRequest<ItemListModel> myReq = new GsonRequest<ItemListModel>(
                Method.GET, url, ItemListModel.class,
                createMyReqSuccessListener(), createMyReqErrorListener());

        mRequestQueue.add(myReq);

    }


    private Response.Listener<ItemListModel> createMyReqSuccessListener() {
        return new Response.Listener<ItemListModel>() {
            @Override
            public void onResponse(ItemListModel response) {
                try {
                    Log.d("response > ", response.toString());
                    pd.dismiss();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            };
        };
    }

    private Response.ErrorListener createMyReqErrorListener() {
        return new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {    
            }
        };
    }
}

运行应用程序时,它会显示response null

以下是ItemListModel

public class ItemListModel {

    private String user_id;
    private String item_id;
    private String name;
    private String price;
    private String category;
    private ThumbnailModel thumbnail; // not array list

    public ItemListModel(){}

    //getters

    @Override
    public String toString() { 
        return "ItemListModel [user_id=" + user_id + ", item_id=" + item_id
                + ", name=" + name + ", price=" + price + ", category="
                + category + ", thumbnail=" + thumbnail + "]";
    } // ALL NULL
}

反序列化此JSON格式:

{
  "results": [
    {
      "user_id": "1",
      "item_id": "18630",
      "name": "Unnamed Item",
      "price": "0",
      "description": "",
      "created_at": "2014-01-16 15:31:36",
      "thumbnail": {
        "image50": "http://www.example.com/adsa.jpg",
        "image100": "hhttp://www.example.com/adsa.jpg"
      },...

这次我做错了什么?我应该坚持使用Volley的JSONArrayRequest吗? HM。

1 个答案:

答案 0 :(得分:2)

您为Json响应创建的模型问题。

{
  "results": [
    {
      "user_id": "1",
      "item_id": "18630",
      "name": "Unnamed Item",
      "price": "0",
      "description": "",
      "created_at": "2014-01-16 15:31:36",
      "thumbnail": {
        "image50": "http://www.example.com/adsa.jpg",
        "image100": "hhttp://www.example.com/adsa.jpg"
      },...

请尝试以上Json响应

 public class ItemListModel {
     public ArrayList<Result> results;

    @Override
    public String toString() {
        return "Response [results=" + results + "]";
    }

    public ArrayList<Result> getResults() {
        return results;
    }

}

,然后

    public class Result {

    private String user_id;
    private String item_id;
    private String name;
    private String price;
    private String description;
    private String created_at;
    private ThumbnailModel thumbnail; 
    public String getUser_id() {
        return user_id;
    }

    public String getItem_id() {
        return item_id;
    }

    public String getName() {
        return name;
    }

    public String getPrice() {
        return price;
    }

    public String getDescription() {
        return description;
    }

    public String getCreated_at() {
        return created_at;
    }

    public ThumbnailModel getThumbnail() {
        return thumbnail;
    }

    @Override
    public String toString() {
        return "Result [user_id=" + user_id + ", item_id=" + item_id
                + ", name=" + name + ", price=" + price + ", description="
                + description + ", created_at=" + created_at + ", thumbnail="
                + thumbnail + "]";
    }

}

最后

public class ThumbnailModel {
private String image50;
private String image100;
public String getImage50() {
    return image50;
}
public String getImage100() {
    return image100;
}
@Override
public String toString() {
    return "ThumbnailModel [image50=" + image50 + ", image100=" + image100
            + "]";
}

}

这是上述Json的正确模型。

编辑: -

private Response.Listener<ItemListModel> createMyReqSuccessListener() {
        return new Response.Listener<ItemListModel>() {
            @Override
            public void onResponse(ItemListModel response) {
                try {
                    Log.d("Name> ", response.getResults().get(0).getName());//Edited
                    Log.d("ThumbnailModel Image> ", response.getResults().get(0).getThumbnail().getImage100());//Edited
                    pd.dismiss();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            };
    };
}

希望这对你有用。