为了账号安全,请及时绑定邮箱和手机立即绑定

把VolleyInterface这个抽象类写成内部接口会不会更好一点?

把VolleyInterface这个抽象类写成内部接口会不会更好一点?

我把它写成了MyVolleyRequest这个类的内部接口(Callback),感觉看起来更清晰,代码少了。

这样和视频中的抽象类相比,有什么优劣之处吗?


  • MyVolleyRequest.java : 

```Java

/**
 * Volley的二次回调封装
 */
public class MyVolleyRequest {

    private Context mContext;
    private Response.Listener<String> mListener;
    private Response.ErrorListener mErrorListener;
    
    public MyVolleyRequest(Context context, final Callback callback) {
    
        mContext = context;
        
        mListener = new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                callback.onSuccess(response);
            }
        };
        
        mErrorListener = new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                callback.onError(error);
            }
        };
    }
    
    public void requestGet(String url, String tag) {
    
        //先取消已有的网络请求,避免重复请求
        MyApplication.getRequestQueue().cancelAll(tag);
        
        StringRequest stringRequest = new StringRequest(Request.Method.GET, url, mListener, mErrorListener);
        stringRequest.setTag(tag);
        
        MyApplication.getRequestQueue().add(stringRequest);
        //启动该全局队列中的调度程序(dispatchers)
        MyApplication.getRequestQueue().start();
    }
    
    public interface Callback {
        void onSuccess(String response);
        void onError(VolleyError error);
    }
}

```


  • MainActivity.java : 

```Java

public class VolleyDemoActivity extends AppCompatActivity {

    public static final String VOLLEY_TAG = "volley_tag";
    public static final String JUHE_APPKEY = "xxxxxxxxxxxxxxxxxxxxx";
    public static final String JUHE_API_URL = "http://v.juhe.cn/postcode/query";
    
    /*
    * 聚合数据查询邮编对应的地址的url,用于测试
    * 请求示例:http://v.juhe.cn/postcode/query?postcode=邮编&key=申请的KEY
    */
    private String postcode = "210044";
    private String url_GET = JUHE_API_URL + "?postcode=" + postcode + "&key=" + JUHE_APPKEY;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        //MyVolleyRequest GET
        myVolleyRequestDemo_GET();
        myVolleyRequestDemo_POST();
    }
    
    //Volley二次回调封装测试
    private void myVolleyRequestDemo_GET() {
    
        MyVolleyRequest myVolleyRequest = new MyVolleyRequest(this, new MyVolleyRequest.Callback() {
            
            @Override
            public void onSuccess(String response) {
                Log.i("### onSuccess", "GET_MyVolleyRequest" + response);
            }
            
            @Override
            public void onError(VolleyError error) {
            }
        });
        
        myVolleyRequest.requestGet(url_GET, "my_get_" + VOLLEY_TAG);
    }
}

```

结尾吐槽以下,竟然不支持Markdown!


正在回答

3 回答

建议不要手动调用 RequestQueue 的 start() 方法,引起的问题“可能会报com.android.volley.NoConnectionError: java.io.InterruptedIOException”,然后就内容加载失败。。。
因为在 Volley.newRequestQueue() 方法中,已经调用了 start() 方法。

1 回复 有任何疑惑可以回复我~
#1

VDer 提问者

多谢夸奖,哈哈
2016-10-06 回复 有任何疑惑可以回复我~
#2

VDer 提问者

OK!
2016-10-06 回复 有任何疑惑可以回复我~

这样的写法确实更清晰,赞一个!

0 回复 有任何疑惑可以回复我~

给你点个赞,视频里面的封装写得跟屎一样

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Android-Volley详解
  • 参与学习       33570    人
  • 解答问题       64    个

最热门网络框架~快速入门大法,还等什么,快来学习吧

进入课程

把VolleyInterface这个抽象类写成内部接口会不会更好一点?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信