2016-12-04 6 views
0

Ich versuche Recycler-Ansicht durch die Liste der Transaktionen, die ich vom Server bekomme, zu füllen. aber wenn ich kein Thread.sleep(7000) setze, wird es nicht bevölkern. Benötigt es so viel Zeit, um Daten von der Serverseite zu erhalten? Wenn ja, gibt es eine schnellere Alternative?Daten vom Server zu langsam abrufen? (Android)

oder erhält die Zeichenfolge von JSON Antwort und Hinzufügen von Objekt zu Liste ist zeitaufwendig? weil dieser Schlaf nur für das Hinzufügen von 5 Zeilen in der Liste funktioniert. Wenn ich versuche, eine Schleife für die ganze Anzahl von Zeilen auszuführen, bekomme ich keine Daten.

Mein Gastgeber ist PythonAnywhere. Api Antwort ist in json und hat rund 400 Datensätze:

http://sairav.pythonanywhere.com/getTransaction

Verwendung:

Android Asynchronous Http Clienten ::: Kompilierung ‚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

erste Dinge zuerst. Sind Sie sicher, dass Ihre App die JSON-Daten vom Server erhält? – user1506104

+0

Ja, deshalb konnte ich Daten nach dem Schlaf bekommen, oder? – user3820753

+0

dann beantwortet es Ihre erste Frage: dauert es so viel Zeit, um Daten von der Serverseite zu bekommen? – user1506104

Antwort

0

Verwenden Sie die Retrofit-Bibliothek zur Verfügung, um die d abrufen oder per Post ata von einem json url ... es ist sehr einfach zu bedienen und ist effizient

+0

ich tatsächlich jetzt AsyncTask anstelle von Loopj APIs, und es scheint zu arbeiten ziemlich gut. Keine Verzögerung. Wird versuchen, auch nachzurüsten. Vielen Dank . – user3820753

0

Wenn Sie sicher sind, dass getString() Betrieb zu viel Zeit nimmt dann ausführen Sie Fortschrittsdialog verwenden können, statt mit 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() 
    } 
    } 
} 

und später verwenden Sie es als new PAAPI().execute(getAll);

+0

danke Shubham, stellt sich heraus, loopj Bibliothek war die Ursache, ich habe stattdessen AsyncTask, funktioniert jetzt gut. – user3820753

+0

Gut zu hören !! :) – Shubham

Verwandte Themen