2016-04-10 3 views
0

Ich bekomme keine Daten als Antwort in Volley. In meiner Tätigkeit habe ich Methode erstellt, um Liste zu erhalten.Keine Daten in OnResponse in Volley

PackageActivity.java

private List<Package> preparePackageData() { 
    MakeNetworkRequest data = new MakeNetworkRequest(PackageActivity.this); 
    packageList = data.getAllPackage(); 
    return packageList; 
} 

Unten ist mein MakeNetworkRequest.java

package com.lab.demo5; 
import android.content.Context; 
import android.util.Log; 
import android.widget.Toast; 
import com.android.volley.RequestQueue; 
import com.android.volley.Response; 
import com.android.volley.VolleyError; 
import com.android.volley.toolbox.StringRequest; 
import com.android.volley.toolbox.Volley; 
import java.util.List; 


public class MakeNetworkRequest{ 
    private static final String JSON_URL = "http://localhost/android/package.php"; 
    String response; 
    Context context; 
    private List<Package> packageList=null; 

    MakeNetworkRequest(Context ctx) 
    { 
     this.context=ctx; 
    } 

    protected List<Package> getAllPackage() 
    { 
     Log.d("getAllPackage","getAllPackage"); 
     sendRequest(); 
     return this.packageList; 
    } 

    public void sendRequest(){ 

     StringRequest stringRequest = new StringRequest(JSON_URL, new Response.Listener<String>() { 
      @Override 
      public void onResponse(String response) { 
       Log.d("onResponse","onResponse"); 
       showJSON(response); 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       Toast.makeText(context,error.toString(),Toast.LENGTH_LONG).show(); 
      } 
     }); 

     RequestQueue requestQueue = Volley.newRequestQueue(context); 
     requestQueue.add(stringRequest); 
    } 

    private void showJSON(String json){ 
     Log.d("showJSON","onResponse"); 
     ParseJSON pj = new ParseJSON(json); 
     pj.parseResult(); 
     this.packageList = pj.packageList; 

    } 
} 

Ich erhalte "getAllPackage" in log, aber es wird zeigen keine Daten in Log "onResponse".

Während der gleiche Code mir ein gutes Ergebnis gibt, wenn ich diesen Code direkt in Activity platziere.

+1

Verwenden Sie den Debugger, um den Fehler zu finden. In Android Studio tun Sie dies, indem Sie einen Haltepunkt setzen und die Tastenkombination "Strg + F9" (oder "Cmd + F9" für Mac) verwenden. [Hier ist ein einfaches Tutorial] (https://www.youtube.com/watch?v=Vo5PXWnKtQ4) dafür. –

+0

Ja, ich debugge das Problem. es sieht so aus, als ob ich auf Daten in Mainthread zugreife, wo ich Daten im Netzwerk-Thread in Volley bekomme. Jetzt die Frage, wie man Daten im Haupt-Thread zurückbekommt. Mein Anruf ist so. PackageActivity hat Recyclerview, die Anrufe -> Netzwerk-Thread -> Daten in der Liste -> setRecyclerview Adapter->, wo ich null habe. –

+0

Da Volley die Aufgabe asynchron mit Ihrem Thread ausführt, brauchen Sie eine Verzögerung, um "onResponse" oder einen Fehler zu sehen, wenn einige Dinge nicht stimmen –

Antwort

1

Ich denke, dieser Fehler wird durch die Rückgabe this.packageList von getAllPackages() verursacht. Es gibt null zurück und Sie haben später die Referenz this.packageList in showJson() geändert.

Ich schlage auch vor, dass Sie Rückrufe anstelle von diesem implementieren sollten. Wie folgt aus:

protected void getAllPackage(@NonNull ResultListener listener); 

und dann zurückrufen, wenn sie auf onRespose() genannt wird, wie listener.onSuccess(data). Bitte beachten Sie, dass Sie die SuccessListener Schnittstelle selbst erstellen müssen. Etwas wie folgt aus:

public interface ResultListener{ 
    onSuccess(List<Package> packages); 
    onError(Exception exception); 
} 

Auf diese Weise können Sie dies in Ihrer Tätigkeit nutzen:

new MakeNetworkRequest(this).getAllPackages(new MakeNetworkRequest.ResultListener(){ 
    @Override 
    onSuccess(List<Package> packages){ 

    } 
    @Override 
    onError(Exception error){ 

    } 
}); 

ich geschaffen habe einen Kern here.

Verwandte Themen