养乐多滋滋滋 2024-06-11 11:40 采纳率: 94.4%
浏览 4
已结题

我这里是写死的,如何改成动态的,可以是任意值

img


图上标红地方如何改成动态的。如何改成可以是任意值


 
  new Thread(new Runnable() {
                    @Override
                    public void run() {
 
//                        OkHttpUtils builder = OkHttpUtils
//                                .builder();
////                        builder.url("http://192.168.10.254:18081/");
//                        //**********For Jin Begin**********
//                        builder.url("http://192.168.10.254:18081/MSG");
//                        //**********For Jin end**********
//                        builder.AddHeader("content-type", "application/json;charset=UTF-8");
////                        builder.post(user);
//                        //**********For Jin Begin**********
//                        builder.post(json);
                        OkHttpClient client = new OkHttpClient().newBuilder().build();
                        MediaType mediaType = MediaType.parse("application/json");
                        RequestBody body = RequestBody.create(mediaType,
                                "{\r\n    \"ID\" : 10242," +
                                        " \r\n    \"FLAG\" : 12," +
                                        " \r\n    \"USER\" : 1," +
                                        " \r\n    \"S0\" : \"\"," +
                                        "\r\n    \"CNT1\" : 0," +
                                        "\r\n    \"CNT2\" : 0" +
                                        "\r\n}");
                        Request request = new Request.Builder()
                                .url("http://192.168.10.10:18081/MSG")
                                .method("POST", body)
                                .addHeader("Content-Type", "application/json")
                                .build();
                        Response response = null;
                        try {
                            response = client.newCall(request).execute();
                        } catch (IOException e) {
                            throw new RuntimeException(e);
                        }
                        String responseData = null;
                        try {
                            responseData = response.body().string();
                        } catch (IOException e) {
                            throw new RuntimeException(e);
                        }
                        Log.w("回码数据--------------------------------》",responseData);
 
                        // 使用Handler将响应数据发送到主线程
                        Message message = mHandler.obtainMessage();
                        message.what = 0;
                        message.obj = responseData;
                        mHandler.sendMessage(message);
                        //**********For Jin end**********
//                        builder.async(new OkHttpUtils.ICallBack() {
//                            @Override
//                            public void OnSuccessful(Call call, String data) {
//                                updateData(data);
//                            }
//
//
//                            @Override
//                            public Void OnFailure(Call call, String data) {
//                                return null;
//                            }
//                        });
                    }
                }).start();
            }
        }
    }
  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-11 11:40
    关注

    引自免费微信小程序:皆我百晓生

    要将硬编码的值改成动态的,首先确定这些值是从哪里获取的,比如数据库、配置文件、用户输入等。在你的代码中,看到有硬编码的URL、JSON字段的值和HTTP请求的参数。这里我将展示如何将这些硬编码的部分变成动态的。

    动态化URL和HTTP请求参数

    假设你从SharedPreferences读取URL和其他参数,以下是修改后的代码示例:

    // 在你的Activity或Service中初始化SharedPreferences
    SharedPreferences prefs = getSharedPreferences("YourPrefsFile", MODE_PRIVATE);
    
    // 读取URL
    String url = prefs.getString("URL_KEY", "http://default.url");
    
    // 创建OkHttpClient实例
    OkHttpClient client = new OkHttpClient();
    
    // 创建MediaType对象
    MediaType mediaType = MediaType.parse("application/json");
    
    // 动态创建JSON字符串,这里假设你已经定义了一个方法来构造JSON字符串
    String json = buildJsonString(); // 假设这个方法返回一个动态构建的JSON字符串
    
    // 创建RequestBody
    RequestBody body = RequestBody.create(mediaType, json);
    
    // 创建Request
    Request request = new Request.Builder()
            .url(url) // 使用从SharedPreferences读取的动态URL
            .method("POST", body)
            .addHeader("Content-Type", "application/json")
            .build();
    
    // 执行请求
    try (Response response = client.newCall(request).execute()) {
        String responseData = response.body().string();
        Log.w("回码数据--------------------------------》", responseData);
        
        // 使用Handler将响应数据发送到主线程
        Message message = mHandler.obtainMessage();
        message.what = 0;
        message.obj = responseData;
        mHandler.sendMessage(message);
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
    

    动态化JSON内容

    对于JSON中的内容,你需要根据业务逻辑来决定如何生成这些值。这里假设你有一个方法buildJsonString(),它会根据业务需求动态生成JSON字符串。例如:

    private String buildJsonString() {
        // 假设你从SharedPreferences读取ID、FLAG和USER的值
        int id = prefs.getInt("ID_KEY", 10242);
        int flag = prefs.getInt("FLAG_KEY", 12);
        int user = prefs.getInt("USER_KEY", 1);
        
        // 构建JSON字符串
        return "{\"ID\": " + id + ", \"FLAG\": " + flag + ", \"USER\": " + user + ", \"S0\": \"\", \"CNT1\": 0, \"CNT2\": 0}";
    }
    

    注意事项

    1. 安全性: 如果这些值来自用户输入,确保对它们进行适当的验证和清理,以防止注入攻击。
    2. 性能: 如果请求频繁发生,考虑缓存一些计算结果,避免不必要的重复计算。
    3. 错误处理: 确保在读取配置和执行网络请求时有适当的错误处理机制。

    这样修改后,你的应用将更加灵活,可以根据不同的环境和需求动态调整参数。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月27日
  • 已采纳回答 6月27日
  • 创建了问题 6月11日

悬赏问题

  • ¥15 combobox绑定值改变的问题
  • ¥15 from seleniumwire import webdriver 在抓取http://链接的时候会自动转https://这个怎么解决
  • ¥15 hive直连数据库模式插入mysql表数据失败(相关搜索:数据库)
  • ¥30 不会,学习,有偿解答
  • ¥15 SQL查询语句报错(检查)
  • ¥15 此表中公式应该怎么写
  • ¥15 求HI-TECH PICC 9.50 PL3安装包
  • ¥15 下载ctorch报错,求解
  • ¥15 如何入门学习c语言,单片机
  • ¥15 idea 编辑语言的选择