最近开始自学Android,java其实之前写的都是.js nodeJS,时间久了就习惯js了。
所以,在学习的过程中,我决定写一个单独的类来发送请求,并且作为错误或成功的结果,它会执行我们发送这个请求的类的相应方法.
有一个类MainActivity,通过单击按钮,我们向服务器发送请求并将响应插入到TextView. 现在我已经实现了这样的回调:
public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
protected void onCreate(Bundle savedInstanceState) {
sendButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DoRequestClass doRequestClass = new DoRequestClass(){
@Override
public void onOK(JSONObject response) {
successReq(response);
}
@Override
public void onError(VolleyError error) {
errorReq(error);
}
};
doRequestClass.execute("http://myserver.local", MainActivity.this);
}
});
public void successReq(JSONObject response){
txtDisplay.setText("Response => "+response.toString());
}
public void errorReq(VolleyError error){
txtDisplay.setText("Error => "+error.toString());
}
// other methods
这样一个抽象类供测试DoRequestClass
public abstract class DoRequestClass implements DoRequestInterface {
@Override
public void execute(String url, Context context) {
RequestQueue queue = Volley.newRequestQueue(context);
JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
DoRequestClass.this.onOK(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
DoRequestClass.this.onError(error);
}
});
queue.add(jsObjRequest);
}
}
带接口DoRequestInterface
interface DoRequestInterface {
void execute(String url, Context context);
void onOK(JSONObject response);
void onError(VolleyError error);
}
上面描述的一切都有效,但是否有可能以某种方式以某种方式传输successReq它errorReq,DoRequestClass就像我们在 上所做的那样javascript,关于我的意思,关于期望的结果,看看我希望它们如何被大致传输:
sendButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DoRequestClass doRequestClass = new DoRequestClass();
doRequestClass.setSuccessCallback(successReq);
doRequestClass.setErrorCallback(errorReq);
doRequestClass.execute("http://lessons.flexiblejs.ru/test.php", MainActivity.this);
}
});
正如您从上面的代码中了解到的,setSuccessCallback这些setErrorCallback方法将告诉类在成功或不成功的请求后执行DoRequestClass哪些类方法。MainActivity
这个或类似的在 javascript 中可以正常工作,但这样的 java 代码将不起作用。问题是如何创造这样或接近它的东西?这有可能吗?最重要的是不要像我的工作示例onOK和onError.
如果可能的话,我请你给出最详细的答案和解释,因为。我对 Java 的了解一点也不多。
重构:
主活动.java
DoRequestClass.java
事实上,你已经复制了接口
Response.Listener<JSONObject>和Response.ErrorListener,只是扩展了泛型并将它们合并为一个。在给定的示例中,这根本没有必要。但是,您可以像以前一样实现此接口,例如,处理响应并进一步转发它:回调使用它们自己的接口(或多个接口),向其添加执行方法没有多大意义。特别是,execute 可以在一个类中,而 callback 可以在另一个类中。
ZY 在结果代码中有一个缺陷。您每次都创建一个新的请求队列。你不应该这样做,一个队列对整个应用程序来说就足够了。当您需要多个队列时,没有那么多选项,而且,固定数量不是那么多,例如,当实现多个帐户时,将请求发送到不同队列中的不同服务器......因此,在应用程序类中(例如)值得为队列创建一个单例并从那里获取它。或者制作
DoRequestClass(例如,通过调用它RequestManager)一个队列初始化一次的单例......ZZY 我还将点击处理程序转移到活动中,这是可选的“味道和颜色”。