我从你最后一个问题开始:
这个语法是从哪里来的,逻辑是什么?新的
Response.Listener();
这种语法意味着,有一个类 Response 有一个接口或类 Listener 在其中定义(嵌套),在你的情况下它是一个 interface ,如果你有机会查看Response 的源代码,您可能会看到如下内容:
public class Response{
:
:
:
public interface Listener {
:
:
public void onResponse(JSONObject jsonObject);
}//Listener interface
}//Response class
是不是应该是这样的?新的 Response().Listener();
不,您建议的代码意味着,从 Response 创建一个新实例,然后从该对象调用一个名为 Listener() 的方法(响应)
而这个new Response.Listener 意味着创建Listener 的新实例,它在Response 中定义
奖励:现在Listener是一个接口,你不能创建它的实例。
所以应该做的是:
1- 创建implements Listener 并覆盖onResponse() 的新类并将其作为参数传递给JsonObjectRequest(...)
例如,
public class MyListern implements Response.Listener{
@Override
public void onResponse(JSONObject jsonObject) {
//put your implementation here ...
}
}//Response class
MyListern mMyListern = new MyListern();
JsonObjectRequest jsonrequest = new JsonObjectRequest(Request.Method.GET, url, null, mMyListern);
或
2- 创建一个匿名内部类,并将其作为参数传递给JsonObjectRequest(...)(这是您在问题中发布的方式)
--编辑:额外奖励 :)
mMyListern 是 MyListern 类的实例,它实现了在 Response 中定义的 Listener,所以它不是 Response 类,它是 MyListener。
你可以把Response.Listener看作一条路径,如果你说的话
c:\users\john\Desktop
这是指向桌面的路径,存在于john 中,而john 存在于users 中,因此桌面 不是用户