把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!
2016-10-01
建議不要手動調用 RequestQueue 的 start() 方法,引起的問題“可能會報com.android.volley.NoConnectionError: java.io.InterruptedIOException”,然后就內容加載失敗。。。
因為在 Volley.newRequestQueue() 方法中,已經調用了 start() 方法。
2016-12-16
這樣的寫法確實更清晰,贊一個!
2016-10-01
給你點個贊,視頻里面的封裝寫得跟屎一樣