当前位置: 首页 > 知识库问答 >
问题:

如何在Android中发出一个简单的http post请求?

公孙和怡
2023-03-14

我是Android系统的初学者。我有一些java的经验,但不能解决这个问题一段时间。

下面是一些背景信息:我正在尝试制作一个移动应用程序,它从画廊或相机中选择一个图像,然后发送到我的服务器。我已经完成了选择图像,并将其转换为base64,但不知何故,我无法完成http post请求的功能。我想让这个函数返回服务器的响应,但是我失败了。

我已经用注释突出显示了函数的一部分。我不明白的部分是重写方法。正如我所说的,我是一个初学者,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) {

            }
        });
    }

共有1个答案

李宁
2023-03-14

enqueue函数在后台线程上执行网络访问。因此,结果不能立即提供给您。要接收结果,必须传入callback的实例。当请求在另一个线程中完成时,OkHttp将调用回调实例的onresponse函数。如果请求失败,它将调用onfailure

如果在调用线程和块中需要结果,直到结果可用为止,可以使用call类的execute()方法。注意,这在Android的主线程上不起作用,因为那里不允许网络访问。

 类似资料:
  • 如何在JMETER中创建一个测试,该测试将: 总共提出100个请求,但是使 每4次请求站点A和 每5次请求站点B

  • 问题内容: 如何使用 java.net.URLConnection发出一个http请求? 问题答案: 首先先声明一下:发布的代码段都是基本示例。您需要处理琐碎的和,然后自己整理。 准备中 我们首先至少需要知道URL和字符集。参数是可选的,取决于功能要求。 查询参数的格式必须为,并由串联&。通常,您还可以使用指定的字符集对查询参数进行网址编码。 该只是为方便起见。当我需要String串联运算符+两次

  • 问题内容: 我在iBooks中阅读了Apple的The Programming Language Swift ,但无法弄清楚如何在Swift中发出HTTP请求(例如cURL)。我需要导入Obj- C类还是只需要导入默认库?还是无法基于本机Swift代码发出HTTP请求? 问题答案: 您可以使用,而且还是因为你通常在Objective- C做。请注意,对于iOS 7.0和更高版本,它是首选。 使用

  • 我在iBooks上读过Apple的编程语言Swift,但不知道如何在Swift中发出HTTP请求(类似于cURL)。我需要导入Obj-C类还是只需要导入默认库?或者不可能基于本机Swift代码发出HTTP请求?

  • 我在iBooks中阅读了苹果公司的编程语言Swift,但不知道如何在Swift中发出HTTP请求(类似cURL的东西)。我需要导入Obj-C类还是只需要导入默认库?还是不能基于原生Swift代码进行HTTP请求?

  • 我试图为我的项目设置空手道框架。对于一个简单的GET请求,我得到了以下SSLHandshakeException。当我在浏览器中尝试endpoint时,我得到了正确的响应,但当我尝试运行cucumber特性文件时,我看到了以下错误。我尝试,,但看到相同的错误