2016-11-29 7 views
0

i Problem mit irgendeiner Art eine Endlosschleife mit AsyncTask .. das ist meine Methode mit AsyncTask in einem Fragmente KlasseAsyncTask Aufgabe eine Endlosschleife

public AsyncTask<Void, Void, Void> refreshTask = new AsyncTask<Void, Void, Void>() { 
    @Override 
    protected Void doInBackground(Void... params) { 

     Looper.prepare(); 
     System.out.println("UŠAO SAM U DO IN BACKGRASD"); 
     Ponuda.deleteAll(); 
     ArrayList<Ponuda> novaLista= new ArrayList<Ponuda>(); 
     novaLista= (ArrayList<Ponuda>) Ponuda.getAll(); 

     System.out.println("PONUDE: "+ novaLista.size()); 
     ((MainActivity)getActivity()).loadData(); 
     Looper.loop(); 
     System.out.println("asdasd"+ Looper.myLooper()); 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void Void) { 
     System.out.println("UŠAO SAM U DO IN Post"); 
     mSwipeRefreshLayout.setRefreshing(false); 
     ArrayList<Ponuda> novaLista= new ArrayList<Ponuda>(); 
     novaLista= (ArrayList<Ponuda>) Ponuda.getAll(); 

     System.out.println("PONUDE: "+ novaLista.size()); 
     RVAdapter adapter = new RVAdapter(novaLista,getContext()); 
     rv.setAdapter(adapter); 
     super.onPostExecute(Void); 
    } 
}; 
@Override 
public void onRefresh() { 
    System.out.println("Refreshana je stranica"); 
    refreshTask.execute(); 

}` 

und dies ist die Methode, die ich rufe aus Fragment

Wenn ich debugge, führt das Programm diese Funktion und gehen Sie zu Fragment Inizialisierung und dann zu einer Endlosschleife gehen. Zuerst geht es in die ActivityThread-Klasse, dann in die Handler-Klasse, dann in die Looper-Klasse, um die Klassen immer wieder zu wiederholen. Kann mir bitte jemand helfen?

+0

Warum verwenden Sie einen Looper in Ihrer 'doInBackground' Methode? –

+0

Warum Looper in erster Linie? D – Antoniossss

+0

Wenn nicht Looper, was dann? –

Antwort

0

Das Problem ist die Verwendung der Looper innerhalb der doInBackground() Methode. AsyncTask ist kein generischer Threading-Mechanismus: Es soll kurzlebige Dinge in einem Hintergrund-Worker-Thread erledigen, der vom System verwaltet wird. Ihre doInBackground() Methode sollte nicht unbegrenzt blockieren, Schleife für immer usw. Die Klasse Looper wird normalerweise von Threads verwendet, die eine Nachrichtenwarteschlange in Android verwenden werden, die Ihnen ermöglichen, Handler Objekte an ihnen anzuhängen.

hilft dieser Artikel zu klären, wie AsyncTask Werke: http://po.st/Cei3m2

+0

aber wenn ich Looper nicht verwende .. nichts passiert .. –

+0

Was ist 'WebServiceDataLoader' und was macht es? –

Verwandte Themen