【发布时间】:2020-01-25 03:27:37
【问题描述】:
这更像是一个风格的东西,一个自学的东西,但是在凌空代码中是监听器,我在网上找到的所有代码都只是在构造函数中嵌套了一个覆盖方法。不一定是我习惯于 C# 背景的东西。实际上 lambda 并不太擅长,匿名方法也不是。
我不知道从哪里开始,因为现在对我来说似乎并不直观。但我想将嵌套方法分离为它们各自的方法。或者甚至可能只是覆盖的方法,如果这是唯一需要的部分。
final EditText textView = (EditText) findViewById(R.id.editText);
RequestQueue queue = Volley.newRequestQueue(this);
String url = "http://myURL";
JSONObject postparams = new JSONObject();
postparams.put("city", "london");
postparams.put("name", "bob");
// Request a string response from the provided URL.
JsonObjectRequest postRequest = new JsonObjectRequest(Request.Method.POST, url, postparams,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
textView.setText("Success: "+ response.toString());
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
textView.setText(String.valueOf(error.networkResponse.statusCode));
}
}
);
// Add the request to the RequestQueue.
queue.add(postRequest);
我想要的是在同一个类中的 2 个响应参数中命名一个方法,或者这本身可以进行覆盖。可能吗?类似的东西。
...
JsonObjectRequest postRequest = new JsonObjectRequest(Request.Method.POST, url, postparams, myResponseListener(JSONObject response), myErrorResponseListener(VolleyError error));
// Add the request to the RequestQueue.
queue.add(postRequest);
}
public void myResponseListener(JSONObject response){
textView.setText("Success: "+ response.toString());
}
public void myErrorResponseListener(VolleyError error){
textView.setText(String.valueOf(error.networkResponse.statusCode));
}
这样的事情有简单的方法吗?
编辑:尝试 linucksrox 的答案,令我惊讶的是,以下实际上独立作为自己的方法......没有 public(访问修饰符)或 void(返回类型)??
Response.Listener<JSONObject> myListener(JSONObject response)
{
return new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
textView.setText("Success: "+ response.toString());
}
};
}
但是当我尝试将 myListener 作为第四个参数插入时,它会抱怨这些参数。
myListener() no work,
myListener(JSONOBject response) no work
错误部分参数也是如此。
【问题讨论】:
-
你可以让类本身实现监听器接口,或者使用方法引用。
-
问题是,我不知道该怎么做。如果我能得到关于如何实现接口和方法引用的解释会很酷,但我对示例代码同样满意,然后我可以尝试将其分解并尝试理解。不幸的是,这两个短语现在对我来说只是抽象的词。
-
你看过网上的例子吗?实现一个接口是非常基础的——它类似于扩展一个类。如果您不理解“扩展课程”,那么您应该深入研究这些术语,因为这些术语适用于许多 语言。在您的情况下,它将是
class YourClass implements Response.Listener<JSONObject>, Response.ErrorListener。这样做会强制你的类实现这些方法。从那里,您可以将this传递到任何需要侦听器的区域:new JsonObjectRequest(..., ..., ..., this, this);。希望这会有所帮助。
标签: java android function methods android-volley