【发布时间】:2019-07-31 09:37:05
【问题描述】:
我正在使用单个 Volley 库来获取多个 API 的数据。为此,我制作了一个通用的 Volley 类,并通过传递所需的参数将此类称为活动。我成功地做到了这一点。
在此之后,我从服务器获得的响应想要将其传递给一个接口,以便将结果传递给我从中调用通用 Volley 类的同一类。但我无法做到这一点。 我知道问题出在我的函数调用中。但是不知道怎么解决。
另外,我正在使用他的技术Handle Multiple request in Android volley 第二个答案
这是我的界面
public interface VolleyJsonRespondsListener{
public void onSuccessJson(String result, String type);
}
这是我的通用排球课
public class PostVolleyJsonRequest {
Context context;
Map<String, String> hashMap=new HashMap<>();
private VolleyJsonRespondsListener volleyJsonRespondsListener;
private String networkurl;
public PostVolleyJsonRequest(Context context, String netnetworkUrl, Map<String, String> hashMap, VolleyJsonRespondsListener volleyJsonRespondsListener) {
this.hashMap = hashMap;
this.networkurl = netnetworkUrl;
this.volleyJsonRespondsListener = volleyJsonRespondsListener;
this.context=context;
sendRequest();
}
private void sendRequest() {
StringRequest stringRequest = new StringRequest(Request.Method.POST, networkurl,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.i("result", response);
volleyJsonRespondsListener.onSuccessJson(response, "sub"); //here's the error
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("result", "error " + error);
error.printStackTrace();
}
}) {
@Override
protected Map<String, String> getParams() {
return hashMap;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(context);
/*handle timeout error*/
stringRequest.setRetryPolicy(new DefaultRetryPolicy(
10000,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
requestQueue.add(stringRequest);
}
}
这是我正在调用函数并希望通过接口获取服务器响应的活动
public class Login extends AppCompatActivity implements VolleyJsonRespondsListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
new PostVolleyJsonRequest(context, CommonObjects.API_LOGIN, hashMap, ); //here to do something
}
@Override
public void onSuccessJson(String result, String type) {
Log.i("resultRespone", result);
}
@Override
public void onFailureJson(int responseCode, String responseMessage) {
}
}
Logcat
2019-07-31 14:35:05.703 9401-9401/com.amcbr.amcbradmin E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.amcbr.amcbradmin, PID: 9401
java.lang.NullPointerException: Attempt to invoke interface method 'void com.amcbr.amcbradmin.classes.utils.VolleyJsonRespondsListener.onSuccessJson(java.lang.String, java.lang.String)' on a null object reference
at com.amcbr.amcbradmin.classes.utils.PostVolleyJsonRequest$1.onResponse(PostVolleyJsonRequest.java:102)
at com.amcbr.amcbradmin.classes.utils.PostVolleyJsonRequest$1.onResponse(PostVolleyJsonRequest.java:98)
at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:78)
at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30)
at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:106)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:224)
at android.app.ActivityThread.main(ActivityThread.java:7127)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:928)
【问题讨论】:
标签: android interface android-volley