2016-01-22 24 views
0

我一直在使用loopj庫與我的服務器進行交互。 我在一個片段內創建了一個視圖尋呼機,並因此創建了子片段 在向這個服務器發送一個請求的這些子片段中,我得到了正確的響應。 當我發送刷新請求到服務器時,問題就出現了,響應仍然正確,但UI變黑,我無法再與UI進行交互。在發送兒童片段中的另一個請求時發生UI阻塞

屏幕看起來像這樣後第一個請求: after first request

其次請求後,屏幕變爲 after second request

我與服務器連接的代碼是:

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

第一次調用後,關注列表會更新,但在刷卡刷新時會顯示isssue。

回答

0

你的setWatchlistData()方法需要被包裝在一個線程中。避免在主線程中聯網!

+0

loopj庫已經使用AsyncTask進行調用,因此它不能解決這個問題嗎? – mayankdtu

0

我得到了問題,它不是在請求中,而是在我使用的對話框庫中。問題是因爲我再次顯示對話框而沒有重新初始化。

相關問題