步驟1:在主線程中創建thread調接口
new Thread(new Runnable() {@Overridepublic void run() {getServiceList();}}).start();
步驟2:okhttp調接口
private void getServiceList(){Message msg = new Message();try{OkHttpClient okHttpClient = new OkHttpClient();FormBody.Builder formBodyBuilder = new FormBody.Builder();formBodyBuilder.add("token", "xxx").add("id", "idxxx");if (constellationArr != null) {for (String constellation : constellationArr) {formBodyBuilder.add("constellationArr", constellation);}}FormBody formBody = formBodyBuilder.build();///Request request = new Request.Builder().url("調接口url").post(formBody).build();// 創建 Call 對象并執行請求Call call = okHttpClient.newCall(request);Response response = call.execute();// 處理響應if (response.isSuccessful()) {// 響應成功String responseBody = response.body().string();// 在這里處理響應體JSONObject jsonObject = new JSONObject(responseBody);boolean success = jsonObject.getBoolean("success");String message = jsonObject.getString("msg");String obj = jsonObject.getString("obj");Log.e(TAG, obj);if (success) {// 使用 TypeToken 獲取泛型類型TypeToken<ArrayList<ServicePersonShortBean>> typeToken = new TypeToken<ArrayList<ServicePersonShortBean>>() {};ArrayList<ServicePersonShortBean> servicePersonShortBeanList = gson.fromJson(obj, typeToken.getType());Bundle bundle = new Bundle();bundle.putSerializable("servicePersonShortBeanList", servicePersonShortBeanList);msg.setData(bundle);msg.what = 1;handler.sendMessage(msg);} else {Bundle bundle = new Bundle();if(message.equals("token找不到")){bundle.putString("message", "請您登錄后查詢");}else{bundle.putString("message", message);}msg.setData(bundle);msg.what = 2;handler.sendMessage(msg);}} else {// 響應失敗// 在這里處理失敗情況msg.what = 3;handler.sendMessage(msg);}// 記得關閉響應體response.close();} catch (IOException e) {if (e.toString().contains("request failed")) {msg.what = 4;handler.sendMessage(msg);} else {msg.what = 5;handler.sendMessage(msg);}e.printStackTrace();} catch (JSONException e) {e.printStackTrace();msg.what = 3;handler.sendMessage(msg);}}
步驟三:處理返回信息,在主線程中進行UI展示
// 在主線程中創建 HandlerHandler handler = new Handler(Looper.getMainLooper()) {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);//根據信息編碼及數據做出相對應的處理switch (msg.what) {case 1:{Bundle bundle = msg.getData();servicePersonShortBeanList = (ArrayList<ServicePersonShortBean>) bundle.getSerializable("servicePersonShortBeanList");showServicerList();new Thread(new Runnable() {@Overridepublic void run() {loadMoreData();}}).start();break;}case 2:{Bundle bundle = msg.getData();String message = bundle.getString("message");Toast.makeText(ServicePersonListActivity.this, message,Toast.LENGTH_SHORT).show();break;}case 3:Toast.makeText(ServicePersonListActivity.this, "獲取xxx信息失敗,請稍后再試!", Toast.LENGTH_SHORT).show();break;case 4:Toast.makeText(ServicePersonListActivity.this, "網絡請求失敗,請稍后重試", Toast.LENGTH_SHORT).show();break;case 5:Toast.makeText(ServicePersonListActivity.this, "網絡異常,請檢查您的網絡\"", Toast.LENGTH_SHORT).show();break;case 6:{//加載更多Bundle bundle = msg.getData();ArrayList<ServicePersonShortBean> moreServicePersonShortBeanList = (ArrayList<ServicePersonShortBean>) bundle.getSerializable("moreServicePersonShortBeanList");servicePersonShortBeanList.addAll(moreServicePersonShortBeanList);servicePersonAdapter.notifyDataSetChanged();break;}default:break;}}};
注:鏈式調用寫法舉例
FormBody formBody = formBody = new FormBody.Builder().add("token", token).add("id", id).build();