【问题标题】:UI blocking on sending another request in Child FragmentUI 阻止在子片段中发送另一个请求
【发布时间】:2016-01-22 07:00:07
【问题描述】:

我一直在使用 loopj 库与我的服务器进行交互。 我在片段内创建了一个视图寻呼机,因此创建了子片段 在这些子片段中,当我向服务器发送请求时,我得到了正确的响应。 当我向服务器发送刷新请求时出现问题,响应仍然正确,但 UI 变为黑色,我无法再与 UI 交互。

第一次请求后屏幕如下所示:

第二次请求后屏幕变为

我连接服务器的代码是:

private void setWatchlistData() {


    String url = "";
    switch (watchlist_type) {
        case 1:
            url = "/getWatchList";
            break;
        case 2:
            url = "/getTrendingWatchList";
            break;
        case 3:
            url = "/getRecommendedWatchList";
            break;
    }

    responseHandler = new JsonHttpResponseHandler() {

        @Override
        public void onSuccess(int statusCode, cz.msebera.android.httpclient.Header[] headers, JSONObject response) {

            if (progressDialog.isShowing()) {
                progressDialog.dismissWithAnimation();
                if (swipeRefresh.isRefreshing())
                    swipeRefresh.setRefreshing(false);
                try {
                    Log.d(TAG, response.toString());
                    if (!response.isNull("status")) {
                        if (response.getBoolean("status")) {
                            assets = new ArrayList<Asset>();
                            JSONArray arr = response.getJSONArray("watchlist");
                            for (int i = 0; i < arr.length(); i++) {
                                JSONObject obj = arr.getJSONObject(i);
                                Asset a = new Asset();
                                a.setType(new AssetType(obj.getJSONObject("type")));
                                a.setName(obj.getString("name"));
                                a.setId(obj.getInt("id"));

                                switch (a.getType().getType()) {
                                    case AssetType.ASSET_TYPE_STOCK:
                                        a.setSymbol(obj.getString("symbol"));
                                        assets.add(a);
                                        break;
                                }

                            }
                            setData();
                        } else {
                            new SweetAlertDialog(getActivity(), SweetAlertDialog.ERROR_TYPE).setTitleText("Error").setContentText(response.getString("message")).setConfirmText("Ok").setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
                                @Override
                                public void onClick(SweetAlertDialog sweetAlertDialog) {
                                    sweetAlertDialog.dismiss();
                                }
                            }).show();
                        }
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }

        @Override
        public void onFailure(int statusCode, cz.msebera.android.httpclient.Header[] headers, String responseString, Throwable throwable) {
            Log.d(TAG, responseString + "");
            progressDialog.dismissWithAnimation();
            new SweetAlertDialog(getActivity(), SweetAlertDialog.ERROR_TYPE).setTitleText("Error Occured").setContentText(responseString + "").show();
        }


    };

    RequestParams params = new RequestParams();
    params.add("user_id", String.valueOf(new UserDetailsHandler(getActivity()).getUser().getId()));
    client.setTimeout(99999);
    client.cancelAllRequests(true);
    client.get(CommonUtils.BASE_URL + url, params, responseHandler);

    progressDialog.show();
}

滑动刷新功能:

        swipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            setWatchlistData();
        }
    });

第一次调用后,关注列表会更新,但在滑动刷新时会显示问题。

【问题讨论】:

    标签: android android-fragments android-asynctask fragment loopj


    【解决方案1】:

    您的 setWatchlistData() 方法需要包装在一个线程中。避免在主线程中联网!

    【讨论】:

    • loopj 库已经使用 AsyncTask 进行调用,所以它不能解决这个问题吗?
    【解决方案2】:

    我发现问题不在请求中,而是在我使用的对话框库中。问题是因为我再次显示对话框而没有再次初始化它。

    【讨论】:

      猜你喜欢
      • 2018-09-27
      • 1970-01-01
      • 2020-06-09
      • 1970-01-01
      • 2021-06-01
      • 1970-01-01
      • 2013-07-29
      • 1970-01-01
      • 2019-06-22
      相关资源
      最近更新 更多