亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

把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詳解
  • 參與學習       33561    人
  • 解答問題       67    個

最熱門網絡框架~快速入門大法,還等什么,快來學習吧

進入課程

把VolleyInterface這個抽象類寫成內部接口會不會更好一點?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號