养乐多滋滋滋 2024-06-13 17:01 采纳率: 94.4%
浏览 5
已结题

无法安卓获取接口数据

我先创建一个实体类

package com.symbol.barcodesample1;

import com.google.gson.Gson;

import okhttp3.MediaType;
import okhttp3.RequestBody;

/**
 * 功能:
 * 作者:Jin
 * 日期:2024年06月13日
 */
public class DataModel {
    public int getID() {
        return ID;
    }

    public void setID(int ID) {
        this.ID = ID;
    }

    public int getFLAG() {
        return FLAG;
    }

    public void setFLAG(int FLAG) {
        this.FLAG = FLAG;
    }

    public int getUSER() {
        return USER;
    }

    public void setUSER(int USER) {
        this.USER = USER;
    }

    public String getS0() {
        return S0;
    }

    public void setS0(String s0) {
        S0 = s0;
    }

    public int getCNT1() {
        return CNT1;
    }

    public void setCNT1(int CNT1) {
        this.CNT1 = CNT1;
    }

    public int getCNT2() {
        return CNT2;
    }

    public void setCNT2(int CNT2) {
        this.CNT2 = CNT2;
    }

    private int ID;
    private int FLAG;
    private int USER;
    private String S0;
    private int CNT1;
    private int CNT2;






}


创建了Config接口配置类

package com.symbol.barcodesample1;

/**
 * 功能:
 * 作者:Jin
 * 日期:2024年06月13日
 */
public class Config {
    public static String baseUrl = "http://192.168.10.254:18081/"; // 默认URL
    // 可以添加方法来修改这个URL
    public static void setBaseUrl(String newUrl) {
        baseUrl = newUrl;
    }
}


然后在MainActivity调用

   // 使用DataModel对象构建请求体
                        DataModel dataModel = new DataModel();
                        dataModel.setID(10242); // 假设这是从外部获取的值
                        dataModel.setFLAG(12);
                        dataModel.setUSER(99);
                        dataModel.setS0("");
                        dataModel.setCNT1(0);
                        dataModel.setCNT2(0);


                        Gson gson = new Gson();
                        String json = gson.toJson(dataModel);

                        RequestBody body = RequestBody.create(MediaType.parse("application/json"), json);

                        Request request = new Request.Builder()
                                .url(Config.baseUrl + "MSG")
                                .method("POST", body)
                                .addHeader("Content-Type", "application/json")
                                .build();


                        Log.w("回码数据--------------------------------》", String.valueOf(request));

img


如图没反应

  • 写回答

3条回答 默认 最新

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

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

    从你提供的信息来看,你正在尝试使用OkHttp库在Android应用中发送POST请求,并且已经构建了一个DataModel类来封装数据,以及一个Config类来存储基础URL。然而,你没有展示如何实际执行这个请求,以及如何处理响应。

    为了能够成功地发送请求并处理返回的数据,你需要在MainActivity中实现以下步骤:

    1. 创建OkHttpClient实例:这将用于发送HTTP请求。
    2. 执行请求:使用OkHttpClient实例来执行你构建的请求。
    3. 处理响应:在回调中处理服务器返回的响应数据。

    下面是一个示例代码,展示了如何在MainActivity中使用OkHttp发送POST请求,并处理响应:

    import okhttp3.OkHttpClient;
    import okhttp3.Request;
    import okhttp3.Response;
    import okhttp3.Callback;
    
    public class MainActivity extends AppCompatActivity {
    
        private OkHttpClient client = new OkHttpClient();
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            sendPostRequest();
        }
    
        private void sendPostRequest() {
            // 创建DataModel对象并设置参数
            DataModel dataModel = new DataModel();
            dataModel.setID(10242);
            dataModel.setFLAG(12);
            dataModel.setUSER(99);
            dataModel.setS0("");
            dataModel.setCNT1(0);
            dataModel.setCNT2(0);
    
            Gson gson = new Gson();
            String json = gson.toJson(dataModel);
    
            RequestBody body = RequestBody.create(MediaType.parse("application/json"), json);
            Request request = new Request.Builder()
                    .url(Config.baseUrl + "MSG")
                    .method("POST", body)
                    .addHeader("Content-Type", "application/json")
                    .build();
    
            client.newCall(request).enqueue(new Callback() {
                @Override
                public void onFailure(Call call, IOException e) {
                    // 处理请求失败的情况
                    Log.e("OkHttp", "Failed to execute request", e);
                }
    
                @Override
                public void onResponse(Call call, Response response) throws IOException {
                    if (!response.isSuccessful()) {
                        throw new IOException("Unexpected code " + response);
                    } else {
                        // 成功时处理响应
                        final String responseData = response.body().string();
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                // 在UI线程中更新UI或处理数据
                                Log.i("OkHttp", "Response: " + responseData);
                            }
                        });
                    }
                }
            });
        }
    }
    

    这段代码首先创建了一个OkHttpClient实例,然后在sendPostRequest方法中构建了请求,并使用client.newCall(request).enqueue(callback)异步执行了请求。在回调中,onFailure方法用于处理请求失败的情况,而onResponse方法则用于处理成功的响应。

    确保你的应用具有网络权限(在AndroidManifest.xml中添加<uses-permission android:name="android.permission.INTERNET" />),并且服务器地址和端口正确无误。此外,根据你的应用需求,可能还需要处理更多异常情况和错误码。

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

报告相同问题?

问题事件

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

悬赏问题

  • ¥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 编辑语言的选择