【问题标题】:How should I put code in Background Thread in Java?我应该如何将代码放在 Java 的后台线程中?
【发布时间】:2021-07-22 17:55:03
【问题描述】:

我正在使用将一些数据上传到服务器的 API,我将其部署在 android 应用程序上。

我使用 Postman 测试了 API,它工作得非常好,并且从 postman 生成了代码

登录代码:

OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
  .addFormDataPart("username","abc@abc.com")
  .addFormDataPart("password","E1234567")
  .build();
Request request = new Request.Builder()
  .url("192.168.1.51/auth/login")
  .method("POST", body)
  .addHeader("User-Agent", "Koala Admin")
  .addHeader("Content-Type", "application/json")
  .addHeader("Cookie", "session=3d9c1888-e9b0-40b3-958b-71c50538d338")
  .build();
Response response = client.newCall(request).execute();

创建用户并上传照片

OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
  .addFormDataPart("subject_type","1")
  .addFormDataPart("name","jasim")
  .addFormDataPart("start_time","1619496549")
  .addFormDataPart("end_time","1619525349")
  .addFormDataPart("photo","/C:/Users/jasim/Pictures/Camera Roll/WIN_20210422_14_54_39_Pro.jpg",
    RequestBody.create(MediaType.parse("application/octet-stream"),
    new File("/C:/Users/jasim/Pictures/Camera Roll/WIN_20210422_14_54_39_Pro.jpg")))
  .build();
Request request = new Request.Builder()
  .url("192.168.1.51/subject/file")
  .method("POST", body)
  .addHeader("Content-Type", "application/json")
  .addHeader("Cookie", "session=3d9c1888-e9b0-40b3-958b-71c50538d338")
  .build();
Response response = client.newCall(request).execute();

现在我想知道如何将这些代码放在 AsyncTask 类中并在后台制作必要的代码。

【问题讨论】:

  • 为什么不使用改造?
  • 我对改造一无所知。你能帮我处理这段代码吗?如何放入后台线程。谢谢
  • 您可以使用@shmakova 的答案
  • @Amin 我需要你的另一个帮助。我的 api 请求中有 cookie 标头,每次我必须从邮递员那里复制这个 cookie 并粘贴到我的代码中以使其工作。如何在我的应用程序中生成 cookie 并在 cookie 标头中给出该值?

标签: java android android-asynctask okhttp rest


【解决方案1】:

您可以调用enqueue 方法而不是execute,它将在后台线程上工作:

client.newCall(request).enqueue(new Callback() {
    @Override
    public void onResponse(Call call, Response response) throws IOException {
         // handle your response
    }

    @Override
    public void onFailure(Call call, IOException e) {
         // handle the failure
    }
});

【讨论】:

  • 真的吗?这种方法会像 doInBackground() 一样工作吗?
  • 它将在自己的 okttp 调度程序上运行。 @JASIMCHOUHAN
  • 嗨@shmakova,我需要你的另一个帮助。我的 api 请求中有 cookie 标头,每次我必须从邮递员那里复制这个 cookie 并粘贴到我的代码中以使其工作。如何在我的应用程序中生成 cookie 并在 cookie 标头中给出该值?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 2017-02-22
  • 1970-01-01
  • 2015-10-25
相关资源
最近更新 更多