没有在凌空中获取onResponse中的数据

时间:2016-04-10 16:56:43

标签: android android-volley

我没有收到数据作为回应。 在我的活动中,我创建了获取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中时,相同的代码会给我很好的结果。

1 个答案:

答案 0 :(得分:1)

我认为此错误是由this.packageList返回getAllPackages()引起的。它返回null,之后您更改了this.packageListshowJson()的引用。

另外,我建议你应该实现回调而不是这个。像这样:

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