【问题标题】:New to okhttp3, no idea why it won't show the results on TextViewokhttp3 的新手,不知道为什么它不会在 TextView 上显示结果
【发布时间】:2021-12-24 20:08:38
【问题描述】:
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,并使用我的手机进行测试。保存图像的同一部手机。

【问题讨论】:

  • “这就是为什么我包含 StrictMode permitAll 东西来解决这个问题(我看到了一个类似主题的答案,建议这样做)”——这不是一个好主意。尤其如此,因为您使用的是具有 a built-in asynchronous HTTP request API 的 OkHttp。除此之外,请检查 Logcat 是否有来自您的代码的堆栈跟踪,因为您的代码可能会引发您正在那里记录的异常。这可能是因为缺少INTERNET 权限或文件访问问题。
  • 可能是这样,我没有添加文件访问权限。

标签: java android okhttp


【解决方案1】:

去看看retrofit

它提供了一种简单易用的方法来使您的网络调用脱离主线程

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多