Android-okhttp调接口传参简单举例

步骤1:在主线程中创建thread调接口

java 复制代码
        new Thread(new Runnable() {
            @Override
            public void run() {
                getServiceList();
            }
        }).start();

步骤2:okhttp调接口

java 复制代码
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展示

java 复制代码
// 在主线程中创建 Handler
    Handler handler = new Handler(Looper.getMainLooper()) {
        @Override
        public 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() {
                        @Override
                        public 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;
            }
        }
    };

注:链式调用写法举例

java 复制代码
FormBody formBody = formBody = new FormBody.Builder()
                                            .add("token", token)
                                            .add("id", id)
                                            .build();
相关推荐
砖厂小工15 分钟前
Compose 中函数引用 vs Lambda:到底该用哪个?
android
Kapaseker11 小时前
详解 Compose background 的重组陷阱
android·kotlin
黄林晴11 小时前
Kotlin 2.3.20-RC2 来了!JPA 开发者狂喜,6 大更新一文速览
android·kotlin
kymjs张涛1 天前
OpenClaw 学习小组:初识
android·linux·人工智能
范特西林1 天前
实战演练——从零实现一个高性能 Binder 服务
android
范特西林1 天前
代码的生成:AIDL 编译器与 Parcel 的序列化艺术
android
范特西林1 天前
深入内核:Binder 驱动的内存管理与事务调度
android
范特西林1 天前
解剖麻雀:Binder 通信的整体架构全景图
android
范特西林1 天前
破冰之旅:为什么 Android 选择了 Binder?
android
奔跑中的蜗牛6661 天前
一次播放器架构升级:Android 直播间 ANR 下降 60%
android