返回上级我有这个CustomRequest类:我有在彼此内的两个方法,如何从内部方法
public class CustomRequest extends Request<JSONObject>{
private Listener<JSONObject> listener;
private Map<String, String> params;
public CustomRequest(String url, Map<String, String> params,
Listener<JSONObject> reponseListener, ErrorListener errorListener) {
super(Method.GET, url, errorListener);
this.listener = reponseListener;
this.params = params;
}
public CustomRequest(int method, String url, Map<String, String> params,
Listener<JSONObject> reponseListener, ErrorListener errorListener) {
super(method, url, errorListener);
this.listener = reponseListener;
this.params = params;
}
@Override
protected Map<String, String> getParams() throws com.android.volley.AuthFailureError {
return params;
};
@Override
protected void deliverResponse(JSONObject response) {
listener.onResponse(response);
}
@Override
protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
try {
String jsonString = new String(response.data,
HttpHeaderParser.parseCharset(response.headers));
return Response.success(new JSONObject(jsonString),
HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
} catch (JSONException je) {
return Response.error(new ParseError(je));
}
}
}
然后,我有我的课JSONRequest:
public class JSONRequest extends AppCompatActivity{
public String url = "http://192.168.1.101/apps/clients/service.php";
public Map<String, String> requestParameters;
public void setParameters(Map<String, String> Parameters) {
this.requestParameters = Parameters;
}
public JSONObject postRequest() {
CustomRequest jsonObjectRequest = new CustomRequest(Request.Method.GET, this.url, this.requestParameters, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
return response;
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("Error", error.getMessage());
}
});
jsonObjectRequest.setRetryPolicy(new DefaultRetryPolicy(20 * 1000, 1, 1.0f));
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();
if (isConnected) {
AppController.getInstance().addToRequestQueue(jsonObjectRequest);
} else {
Toast.makeText(getApplicationContext(), "You need internet connection to perform this", Toast.LENGTH_LONG).show();
}
}
}
我想要做的是在我的postRequest方法中,有一个CustomReques对象所谓jsonObjectRequest,我想从onResponse方法父postRequest方法返回的JSONObject响应变量t类,我得到一个错误的位置:
return response;
,因为它告诉我,该方法的返回类型为void,请告诉我在做什么错,什么是正确的方法。
我假设用我的类,如下所示:
JSONRequest request = new JSONRequest();
request.setParameters(Parameters);
JSONObject result = request.postRequest();
在此先感谢
谢谢,它给了我下面的错误: '显示java.lang.NullPointerException:试图调用虚拟方法无效的AppController .addToRequestQueue(com.android.volley.Request)'on null object reference' – MahmoudTarek
我没有包含将请求添加到队列中的行,所以我相信您的调试功能可以识别null变量的位置(例如'AppController的。getInstance()'返回null),并且你没有在你的问题中包含该代码,所以我建议回顾一下你需要如何实现'AppController'类 –
谢谢,我得到它的工作:) – MahmoudTarek