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.
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. –
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. –
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 –