我有一个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方法中,有一个CustomRequest类的对象叫做JSONObject Request,我想将JSONObject响应变量从onResponse方法返回给父postRequest方法,我在以下位置得到一个错误:
return response;
因为它告诉我方法的返回类型是void,请告诉我我做错了什么,正确的方法是什么。
我想使用我的类如下:
JSONRequest request = new JSONRequest();
request.setParameters(Parameters);
JSONObject result = request.postRequest();
提前谢谢
它告诉我方法的返回类型是void,
是的,大多数回调都是这样定义的。通常不需要返回,而是根据结果行事。
我想将JSONObject响应变量从onACK方法返回到父postRequest方法
同样,如果你重组通话,就没有必要返回任何信息。此外,在方法的末尾没有返回语句,因此您的代码开始时并不完全正确。
利用凌空抽射的优势,绕过听者的物体,以便“回击”。
旁注:这不是/不应该是一个活动类。如果需要上下文,请创建构造函数。
public class JSONRequestService {
private final Context mContext; // TODO: Make constructor
final Response.ErrorListener errorListener = new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("Error", error.getMessage());
};
// passthough a callback instead of returning
public void postRequest(Response.Listener<JSONObject> listener) {
CustomRequest jsonObjectRequest = new CustomRequest(Request.Method.GET, this.url, requestParameters, listener, errorListener);
// TODO: Add to request queue
}
}
然后,使用
JSONRequestService service = new JSONRequestService(getApplicationContext());
service.setParameters(Parameters);
service.postRequest(new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
// response is now available where you want
} catch (JSONException e) {
e.printStackTrace();
}
});
现在,正如你所看到的,这种方法和直接发出截击请求没有太大区别。您所做的只是公开参数,并将URL、RequestQueue和错误侦听器隐藏在另一个类后面。
我甚至可能建议对参数使用Builder Pattern方法,因为每个请求肯定使用不同的参数。
public JSONRequestService withParameters(Map<String, String> Parameters) {
this.requestParameters = Parameters;
return this;
}
现在,你可以用执行来折叠setter
JSONRequestService service = new JSONRequestService(getApplicationContext());
service.withParameters(Parameters).postRequest();
我创建了一个接口,以便可以在对话和片段之间进行通信。 目标:当用户从对话框中选择任何内容时,应将其显示在文本视图中。 在这个界面中,我创建了一个界面方法,在主活动中调用,并传递用户在对话框中选择的值。与用户选择的值一起,在我的片段中,我创建了一个方法,将文本视图设置为该值。然而,每当我调用该方法时,它总是返回null。 我对日志进行了大量测试,发现通过我的方法传递的值不是空的,一切似乎都按照我想要
我正在尝试创建REST api,以使用Firebase Server SDK和Jersey执行写入操作。 以下是我要做的: 初始化Firebase SDK 从客户端获取idToken并验证idToken 在少数Firebase节点上执行一些写入操作 发送api响应 我只想在Firebase写入操作成功或失败时返回Response。这发生在Firebase Listeners内部。然而,我尝试从侦听
问题内容: 我正在尝试装饰类中的方法,但是python抛出错误。我的课看起来像这样: : Python抛出以下错误 我要去哪里玩? 问题答案: Python自动将类实例作为参考传递。(在所有类方法中都可以看到的参数)。 您可以这样做:
问题内容: 我的代码在这里: 现在,我想在单击“确认”按钮后返回true。因此,如何从内部类-方法的OnClickListener返回“ true”。 需要一些帮助,谢谢。 问题答案: 在这种情况下,您不能从内部类返回任何东西。在这种情况下,这没有多大意义。该程序是否应该在您的onClick函数中等待,直到它返回某些内容?收听者的工作方式并非如此。您需要做的就是获取计划返回的代码,如果返回“ tr
问题内容: 请看下面的代码: 在上面的代码中,在方法ModifyList()中声明的匿名内部类的实例能够访问传递给该方法的参数。AFAIK Java为内部类创建一个单独的字节码文件。 谁能解释一下Java在字节码级别上如何处理这些局部变量绑定?我的意思是,Java如何精确跟踪对作为参数传递给该方法的对象的引用? 任何帮助将不胜感激! [抱歉我的英语不好! 如果您理解我的问题,请编辑这篇文章,并删除
如何验证是否调用了。我甚至不能设置mock对象,因为一旦我调用该方法,它就会实例化为null并创建新对象。 我尝试使用