2016-12-04 3 views
0

나는 서버에서 얻은 트랜잭션 목록에 의해 리사이클 뷰를 채우려고한다. 하지만 Thread.sleep(7000)을 넣지 않으면 채워지지 않습니다. 서버 측에서 데이터를 가져 오는 데 많은 시간이 걸립니까? 그렇다면 빠른 대안이 있습니까?서버에서 데이터 가져 오기가 너무 느립니다? (안드로이드)

또는 json 응답에서 문자열을 가져 오는 중 목록에 객체를 추가하는 데 시간이 오래 걸립니까? 이 수면은 목록에 5 개의 행을 추가하기 위해 작동하기 때문입니다. 내가 루프의 모든 번호에 대한 루프를 실행하려고하면 어떤 데이터를 얻을하지 않습니다. 내 컴퓨터는 PythonAnywhere입니다 API 응답은 JSON이며 약 400 기록이 있습니다 사용

http://sairav.pythonanywhere.com/getTransaction

:

안드로이드 비동기 HTTP를 클라이언트 ::: 컴파일 'com.loopj.android:android-async-http을 : 1.4.9 '

public List<Transaction> getTransactions(final boolean getAll) { 
     Thread bgThread =null; 

     final List<Transaction> trList=new ArrayList<>(); 
     RequestParams requestParams = new RequestParams(); 

     requestParams.put("uid", Profile.getCurrentProfile().getId()); 

     PAAPI.post("/getTransaction", requestParams, new JsonHttpResponseHandler() { 

@Override 
      public void onSuccess(int statusCode, Header[] headers, JSONArray jsonArray) { 

       Transaction trr = null; 
       if (getAll) { 


        for (int i = 0; i < 5; i++) { 

         try { 
          //String a = jsonArray.getString(i); 
          JSONObject jsonObject = jsonArray.getJSONObject(i); 
          //JSONArray arrayWithElements = jsonObject.toJSONArray(new JSONArray(new String[]{"name","desc","amount","ttype","uid","ttime"})); 

          trr = new Transaction(context); 

          trr.uname = jsonObject.getString("uname"); 
          trr.desc = jsonObject.getString("description"); 
          trr.amount = jsonObject.getString("amount"); 
          trr.type = jsonObject.getString("type"); 
          trr.uid = jsonObject.getString("uid"); 
          trr.date = jsonObject.getString("ttime"); 

          trList.add(trr); 
          // Toast.makeText(context,"size is bro :"+trList.size(),Toast.LENGTH_SHORT).show(); 
          if (i == 1) { 
        //    Toast.makeText(context, trr.uname + "-" + desc + "-" + trr.amount + "-" + trr.type + "-" + trr.uid + "-" + trr.date, Toast.LENGTH_SHORT).show(); 
          } 
         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 

        } 

        // Do something with the response 

       } 
}); 
     try { 
      Toast.makeText(context,"sleeping bo",Toast.LENGTH_SHORT).show(); 

      Thread.sleep(7000); 

     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 

     // Toast.makeText(context, "listsize final is" + trList.size(), Toast.LENGTH_SHORT).show(); 
     return trList; 
    } 



class PAAPI { 
    protected static final String BASE_URL = "http://sairav.pythonanywhere.com"; 

    private static AsyncHttpClient client = new AsyncHttpClient(); 

    public static void get(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) { 
     client.post(getAbsoluteUrl(url), params, responseHandler); 
    } 

    public static void post(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) { 
     client.post(getAbsoluteUrl(url), params, responseHandler); 
    } 

    private static String getAbsoluteUrl(String relativeUrl) { 
     return BASE_URL + relativeUrl; 
    } 
} 
+0

으로 사용합니다. 앱이 서버에서 JSON 데이터를 가져오고 있습니까? – user1506104

+0

그렇습니다. 그래서 잠을 자다가 데이터를 얻을 수 있었던 이유는 무엇입니까? – user3820753

+0

그러면 첫 번째 질문에 대답합니다. 서버 측에서 데이터를 가져 오는 데 많은 시간이 걸립니까? – user1506104

답변

0

를 사용하여 검색하거나 D를 게시하는 데 사용할 수있는 개조 라이브러리 JSON의 URL에서 ATA ... 매우 쉽게 쓸 수 있으며

+0

저는 실제로 loopj API 대신 AsyncTask를 사용했습니다. 아주 잘 작동하는 것 같습니다. 지체없이. 개량을 시도 할 것입니다. 감사 . – user3820753

0

당신이 getString() 작업을 대신 Thread.sleep()

private class PAAPI extends AsyncTask<Boolean, Void, List<Transaction> { 

    ProgressDialog dialog = new ProgressDialog(MainActivity.this); 

    @Override 
    protected void onPreExecute() { 
     //set message of the dialog 
     dialog.setMessage("Loading..."); 
     //show dialog 
     dialog.show(); 
     super.onPreExecute(); 
    } 

    protected Void doInBackground(Boolean... args) { 
     // do background work here 
     return null; 
    } 

    protected void onPostExecute(List<Transaction> result) { 
    // do UI work here 
    if(dialog != null && dialog.isShowing()){ 
     dialog.dismiss() 
    } 
    } 
} 
를 사용하는 대화 진행을 사용할 수 있습니다 다음 수행 할 수있는 너무 많은 시간을 특정 복용되는 경우 효율적이다

이상은 첫 번째 것을 먼저 new PAAPI().execute(getAll);

+0

감사합니다 Shubham, loopj 라이브러리 밝혀 졌 원인, 대신 AsyncTask 사용, 지금은 잘 작동합니다. – user3820753

+0

듣기 좋습니다! :) – Shubham

관련 문제