养乐多滋滋滋 2024-06-11 10:37 采纳率: 89.5%
浏览 0
已结题

我这里是写死的,如何改成动态的

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 10:37
    关注

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

    要将硬编码的URL、参数以及其他常量值改为动态加载,可以采用多种策略。下面我将展示一种通过读取配置文件或使用环境变量的方法来实现动态加载的方式。

    使用资源文件(Resources)

    在Android中,你可以创建一个XML资源文件来存储这些常量,这样就可以在代码中动态获取它们。首先,在res/values目录下创建一个名为config.xml的文件,然后添加如下内容:

    <!-- res/values/config.xml -->
    <resources>
        <string name="base_url">http://192.168.10.254:18081</string>
        <string name="endpoint">MSG</string>
        <string name="content_type">application/json;charset=UTF-8</string>
        <!-- 其他参数 -->
    </resources>
    

    接着,在你的代码中,你可以通过getResources()方法来访问这些字符串资源:

    String baseUrl = getResources().getString(R.string.base_url);
    String endpoint = getResources().getString(R.string.endpoint);
    String contentType = getResources().getString(R.string.content_type);
    

    使用环境变量或系统属性

    另一种方式是通过环境变量或系统属性来传递这些信息,这种方式在部署应用时更为灵活。例如,你可以在运行时通过命令行参数设置这些值,或者在服务器端设置环境变量,然后在客户端通过Java的System.getProperty()方法读取:

    String baseUrl = System.getProperty("base_url", "http://default.baseUrl.com");
    String endpoint = System.getProperty("endpoint", "defaultEndpoint");
    String contentType = System.getProperty("content_type", "application/json;charset=UTF-8");
    

    修改你的代码

    考虑到上述两种方法,下面是修改后的代码示例,这里使用了资源文件中的值:

    // 从资源文件中读取配置
    String baseUrl = getResources().getString(R.string.base_url);
    String endpoint = getResources().getString(R.string.endpoint);
    String contentType = getResources().getString(R.string.content_type);
    
    // 创建OkHttpClient
    OkHttpClient client = new OkHttpClient().newBuilder().build();
    
    // 创建MediaType
    MediaType mediaType = MediaType.parse(contentType);
    
    // 创建RequestBody
    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 request = new Request.Builder()
            .url(baseUrl + "/" + endpoint)
            .method("POST", body)
            .addHeader("Content-Type", contentType)
            .build();
    
    // 发送请求并处理响应
    try {
        Response response = client.newCall(request).execute();
        String responseData = response.body().string();
        Log.w("回码数据--------------------------------》", responseData);
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
    

    这样,你的应用就能根据不同的环境加载不同的配置,增强了代码的灵活性和可维护性。

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

报告相同问题?

问题事件

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

悬赏问题

  • ¥20 有没有人会这个东西的
  • ¥15 cfx考虑调整“enforce system memory limit”参数的设置
  • ¥30 航迹分离,航迹增强,误差分析
  • ¥15 Chrome Manifest扩展引用Ajax-hook库拦截请求失败
  • ¥15 用Ros中的Topic通讯方式控制小乌龟的速度,走矩形;编写订阅器代码
  • ¥15 LLM accuracy检测
  • ¥15 pycharm添加远程解释器报错
  • ¥15 如何让子窗口鼠标滚动独立,不要传递消息给主窗口
  • ¥15 如何能达到用ping0.cc检测成这样?如图
  • ¥15 关于#DMA固件#的问题,请各位专家解答!