我没有收到数据作为回应。 在我的活动中,我创建了获取List的方法。
PackageActivity.java
private List<Package> preparePackageData() {
MakeNetworkRequest data = new MakeNetworkRequest(PackageActivity.this);
packageList = data.getAllPackage();
return packageList;
}
以下是我的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;
}
}
我在日志中收到“getAllPackage”,但它没有在日志“onResponse”中显示任何数据。
当我将此代码直接放在Activity中时,相同的代码会给我很好的结果。
答案 0 :(得分:1)
我认为此错误是由this.packageList
返回getAllPackages()
引起的。它返回null
,之后您更改了this.packageList
中showJson()
的引用。
另外,我建议你应该实现回调而不是这个。像这样:
protected void getAllPackage(@NonNull ResultListener listener);
然后在调用onRespose()
时回拨,例如listener.onSuccess(data)
。
另请注意,您需要自己创建SuccessListener
界面。像这样:
public interface ResultListener{
onSuccess(List<Package> packages);
onError(Exception exception);
}
通过这样做,您可以在您的活动中使用它:
new MakeNetworkRequest(this).getAllPackages(new MakeNetworkRequest.ResultListener(){
@Override
onSuccess(List<Package> packages){
}
@Override
onError(Exception error){
}
});
我创建了一个要点here。