首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多重JSONArrayRequests

多重JSONArrayRequests
EN

Stack Overflow用户
提问于 2015-05-10 23:39:51
回答 1查看 271关注 0票数 0

伙计们,我有一个大问题,我一个人解决不了。我有一个名为JSONArrayRequest的应用程序来填充一个列表,它可以正常工作。但是,当我单击列表中的一个项时,它会带我到另一个活动,当我试图从新的Actitivies适配器类调用JSONArrayRequest时,调用会被跳过,就像它忽略了调用一样。

请参阅所附代码:

代码语言:javascript
复制
ServiceProviderAdapter.Java

public ServiceProviderAdapter(int rowLayout, Context context) {

        List<ServiceProvider> DetailsItems = new ArrayList<ServiceProvider>();
        sendJSONRequest();
        //LyInflater = LayoutInflater.from(context);

        this.rowLayout = rowLayout;
        this.mContext = context;
    }

sendJSONRequest调用

代码语言:javascript
复制
private void sendJSONRequest() {

    //List<ServiceProvider> serviceProviderList=new ArrayList<ServiceProvider>();
    JsonArrayRequest dq;
    //RequestQueue queue = Volley.newRequestQueue(mContext);

    dq= new JsonArrayRequest(url, new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray jsonArray) {
            serviceProviderList = parseJSONResponse(jsonArray);
            setDetailsItems(serviceProviderList);
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError volleyError) {
            VolleyLog.d("E", "Error: " + volleyError.getMessage());
        }
    });




    AppController.getInstance().addToRequestQueue(dq,"DetailJSONTag");


}

 public <T> void addToRequestQueue(Request<T> req) {
    req.setTag(TAG);
    getRequestQueue().add(req);
}

public RequestQueue getRequestQueue() {
    if (mRequestQueue == null) {
        mRequestQueue = Volley.newRequestQueue(getApplicationContext());
    }

    return mRequestQueue;
}

当我尝试调试我的代码并且游标位于JSONArrayRequest行时,它会直接转到下一行:

代码语言:javascript
复制
  AppController.getInstance().addToRequestQueue(dq,"DetailJSONTag");


 cardDetailActivity.Java

 @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.card_list);

    //CardView cardView= (CardView) findViewById(R.id.card_view);
    RecyclerView recList = (RecyclerView) findViewById(R.id.cardList);
    recList.setHasFixedSize(true);
    LinearLayoutManager llm = new LinearLayoutManager(this);
    llm.setOrientation(LinearLayoutManager.VERTICAL);
    recList.setLayoutManager(llm);

    adapter=new ServiceProviderAdapter(R.layout.card_user_details,this);
    recList.setAdapter(adapter);

    pDialog = new ProgressDialog(this);

    if (llm.getItemCount()==0)
    {

        // Showing progress dialog before making http request
        pDialog.setMessage("Loading...");
        pDialog.show();
    }else{
        hidePDialog();
    }

在调用ServiceAdapter类的新实例之后,我将添加一个断点,并且在调用的构造函数上,我希望用从JSONArrayrequest返回的数据填充List对象。该活动在视图中填充一个RecycleView。

我不明白为什么它在我的第一次活动中有效,但是在新的调用中它被省略了。

请帮帮忙

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-12 19:07:02

找到了解决办法:

  1. 当调用JSONArrayRequest并使用RecycleView时,由于在发送响应请求时没有网络连接,它将无法工作。
  2. 在为RecycleView设置适配器之前,必须异步调用JSON对象/数组,要做到这一点,必须创建扩展AsyncTask的类并建立HTTP连接,一旦建立了连接并解析了响应,就可以为RecycleView设置适配器。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30157782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档