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();
相关推荐
500了3 小时前
Kotlin基本知识
android·开发语言·kotlin
人工智能的苟富贵4 小时前
Android Debug Bridge(ADB)完全指南
android·adb
小雨cc5566ru9 小时前
uniapp+Android面向网络学习的时间管理工具软件 微信小程序
android·微信小程序·uni-app
bianshaopeng10 小时前
android 原生加载pdf
android·pdf
hhzz10 小时前
Linux Shell编程快速入门以及案例(Linux一键批量启动、停止、重启Jar包Shell脚本)
android·linux·jar
火红的小辣椒11 小时前
XSS基础
android·web安全
勿问东西13 小时前
【Android】设备操作
android
五味香13 小时前
C++学习,信号处理
android·c语言·开发语言·c++·学习·算法·信号处理
图王大胜15 小时前
Android Framework AMS(01)AMS启动及相关初始化1-4
android·framework·ams·systemserver
工程师老罗17 小时前
Android Button “No speakable text present” 问题解决
android