java - okhttp3 的新手,不知道为什么它不会在 TextView 上显示结果
问题描述
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.StrictMode;
import android.widget.TextView;
import java.io.File;
import java.io.IOException;
import okhttp3.MediaType;
import okhttp3.RequestBody;
import okhttp3.MultipartBody;
import okhttp3.Request;
import okhttp3.OkHttpClient;
import okhttp3.Response;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
final TextView textView = findViewById(R.id.text_view_id);
final String IMAGE1 = "storage/emulated/0/Download/image_1.jpeg";
File file1 = new File(IMAGE1);
try {
final MediaType MEDIA_TYPE_JPEG = MediaType.parse("image/jpeg");
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("images", "image_1.jpeg",
RequestBody.create(file1, MEDIA_TYPE_JPEG))
.addFormDataPart("organs", "flower")
.build();
Request request = new Request.Builder()
.url("https://my-api.plantnet.org/v2/identify/all?api-key=123")
.post(requestBody)
.build();
OkHttpClient client = new OkHttpClient();
Response response = client.newCall(request).execute();
textView.setText(response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
}
}
我了解我正在尝试在主线程上运行网络活动。这就是为什么我包含 StrictMode permitAll 东西来解决这个问题(我看到了一个类似主题的答案,建议这样做)。我在这里尝试使用 PlantNet API,并使用我的手机进行测试。保存图像的同一部手机。
解决方案
去看改造
它提供了一种很好且简单的方法来使您的网络调用脱离主线程
推荐阅读
- java - Spring覆盖另一个模块的bean
- css - 阅读文档上的图像大小(小图像宽度)
- r - R Shiny Aesthetics 的长度必须为 1 或与数据 (8) 相同:y
- angular - AG Grid - CellRender - 读取复选框值
- symfony - FOSRestBundle 和 Pagerfanta
- bazel - 如何通过 Starlark 从 usr/bin 中“正确”调用可执行文件?
- css - 防止 iframe 在 iOS 上调整其自身内容的高度
- javascript - Javascript - 上传前的图像预览。在同一页面上的多个实例上需要
- google-app-engine - 在“gcloud app logs tail”流中获取“/dev/log”
- sql - 将小时/分钟转换为现有时间戳时,日期时间或间隔的 SQL 操作无效