繁体   English   中英

如何在 Android 中进行简单的 http 发布请求?

[英]How to make a simple http post request in Android?

我是 android 的初学者。 我对 java 确实有一些经验,但有一段时间无法解决这个问题。

以下是一些背景信息:我正在尝试制作一个移动应用程序,它从图库或相机中选择图像,然后将其发送到我的服务器。 我完成了选择图像,将其转换为 base64,但不知何故,我无法完成 http 发布请求的 function。 我希望这个 function 从服务器返回响应,但我失败了。

我用评论突出显示了 function 的一部分。 我不明白的部分是重写方法。 正如我所说,我是初学者,Android Studio 让我包含这些方法(OnResponse,OnFailure),使用这些方法我无法返回响应,因为它们是无效的; 如果没有这些方法,我会遇到一个异常,我不知道它来自哪里。

public void postRequest(String postdata) throws IOException {
        MediaType MEDIA_TYPE = MediaType.parse("application/json");
        String url = "https://ptsv2.com/t/z497u-xxx/post";

        OkHttpClient client = new OkHttpClient();

        RequestBody body = RequestBody.create(MEDIA_TYPE, postdata);

        Request request = new Request.Builder()
                .url(url)
                .post(body)
                .build();

        //THIS IS THE PART I DO NOT UNDERSTAND
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
                message = response.body().string();
            }
            @Override
            public void onFailure(@NotNull Call call, @NotNull IOException e) {

            }
        });
    }

enqueue function 在后台线程上执行网络访问。 因此,您无法立即获得结果。 要接收结果,您必须传入一个Callback实例。 当请求在另一个线程中完成时,OkHttp 将调用您的回调实例的onResponse function。 如果请求失败,它将调用onFailure

如果您需要调用线程中的结果并阻塞直到结果可用,您可以使用调用 class 的execute()方法。 请注意,这不适用于 Android 的主线程,因为那里不允许网络访问。

Retrofit 2:从响应体中获取 JSON

Go 通过上面的链接如果你想发布然后只需将参数传递给接口,如下所述

在api接口写

@FormUrlEncoded
@POST("append_url")
Call<CompanyDetailsResponse> getCompanyDetails(@Field("para") String para);

并使用

Call<CompanyDetailsResponse> call = apiService.getCompanyDetails("para");

代替

Call<CompanyDetailsResponse> call = apiService.getCompanyDetails();

并根据您的 json 响应使用 model class 并在有任何查询时删除评论

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM