Android 中的 PATCH 动词(OkHttp、Volley、Retrofit...)

2023-12-28

我知道类似的问题已经被问过几次了,但我似乎找不到一个简单问题的解决方案:PATCH verb.

因此,我询问任何使用 OkHttp、Volley 或 Retrofit 解决 Android 中的 PATCH 问题的人(或者如果您使用不同的方法或库,请分享)。

我花了 3 天的时间进行了挖掘,但找不到解决这个问题的任何方法。我想做的就是通过在 .NET 环境中构建和运行的 RESTful API 对表进行部分更新。

我目前正在使用 Volley,但每次运行该应用程序时,我都会收到异常错误,内容大致如下PATCH is not an allowed...?然后它给出了一系列可以使用的其他动词,例如“POST、PUT、GET...”。所以,根本没有多大帮助。

我尝试过使用OkHttp像这样:

  JSONObject infoRequestBody = new JSONObject();


    try {


        infoRequestBody.put("Salutation", "MRrr.");
        infoRequestBody.put("FirstName", "Work Now!!");
        infoRequestBody.put("LastName", "Test from my mobile again!! Okhttp");
        infoRequestBody.put("MiddleName", "From the Mobile");
        infoRequestBody.put("NickName", null);
        infoRequestBody.put("BirthDate", "1978-11-23T00:00:00.000Z");
        infoRequestBody.put("CompanyName", null);
        // infoRequestBody.put("RegDate", "2015-01-18T23:39:13.873Z");
        infoRequestBody.put("Gender", "Male");
        infoRequestBody.put("IsPregnant", null);
        infoRequestBody.put("IsNursing", null);
        infoRequestBody.put("WorkPhone", null);
        infoRequestBody.put("WorkPhoneExt", null);
        infoRequestBody.put("PhoneNumber", null);
        infoRequestBody.put("Address", "My android app working!!");
        infoRequestBody.put("Address2", null);
        infoRequestBody.put("City", null);
        infoRequestBody.put("State", "CA");
        infoRequestBody.put("ZipCode", null);
        infoRequestBody.put("EmailAddress", "[email protected] /cdn-cgi/l/email-protection");
        infoRequestBody.put("Occupation", null);
        infoRequestBody.put("CountryofResidence", "United States");
        infoRequestBody.put("CountryCode", "US");
        infoRequestBody.put("Ethnicity", "Asian");
        infoRequestBody.put("ModifiedDate", "2015-01-18T23:39:13.873Z");
        infoRequestBody.put("ModifiedBy", null);
        infoRequestBody.put("AcceptedTerms", true);
        infoRequestBody.put("AcceptedPrivacyPolicyCheckbox", false);
        infoRequestBody.put("AcceptedUnder18ConsentCheckbox", false);
    } catch (JSONException e1) {
        e1.printStackTrace();
    }
  RequestBody body = com.squareup.okhttp.RequestBody.create(JSON, infoRequestBody.toString());


    com.squareup.okhttp.Request.Builder request = new com.squareup.okhttp.Request.Builder()
             .url("APIUrls.PATIENT_INFO_URL")
            .addHeader("Content-Type", "application/json")
            .addHeader("Accept", "application/json")
            .addHeader("X-ZUMO-APPLICATION", APIUrls.ZUMO_KEY)
            .patch(body);



    client.newCall(request).enqueue(new Callback() {




        @Override
        public void onFailure(com.squareup.okhttp.Request request, IOException e) {


        }

        @Override
        public void onResponse(com.squareup.okhttp.Response response) throws IOException {

            if (!response.isSuccessful()) throw new IOException("Unexpected code" + response);

            Headers responseHeaders = response.headers();
            for (int i = 0; i < responseHeaders.size(); i++) {
                System.out.println(responseHeaders.name(i) + ": " + responseHeaders.value(i));
            }


            System.out.println(response.body().string());

        }
    });

but client.newCall(request).enque(new Callback()...给我一个错误说request不能应用于Request.Builder.

顺便说一下,我是 OkHttp 的新手。

无论如何,我一直在努力争取PATCH工作时间太长。也许我是在黑暗中拍摄,但如果有人对如何让“PATCH”发挥作用有任何建议和想法,我将永远感激你。

感谢您的帮助。


正如 GreyBeardedGeek 所说,你可以使用Retrofit http://square.github.io/retrofit/ + OkHttp http://square.github.io/okhttp/来实施这一点。

RestAdapter restAdapter = new RestAdapter.Builder()
                .setClient(new OkClient())
                .setEndpoint(ENDPOINT)
                .build();
MyPatchService patchService = restAdapter.create(MyPatchService.class);
UserUpdate updatedUser = new UserUpdate();
updatedUser.Salutation = "Mr";
updatedUser.FirstName = "Adam";
patchService.update(updatedUser);

And MyPatchService看起来像这样:

public interface MyPatchService {
    @PATCH("/some/update/endpoint")
    User update(UserUpdate updatedObject);
}

Your UserUpdate类可能如下所示:

public class UserUpdate {
    public String Salutation;
    public String FirstName;
    public String LastName;
}

如果这样做,将发送的 JSON 将如下所示(请注意LastName未序列化,因为它从未设置 - 这可以通过提供自定义来配置Gson https://code.google.com/p/google-gson/改造实例):

{
  "Salutation": "Mr",
  "FirstName": "Adam"
}

请求/响应对象是您通过网络发送/接收的对象的纯 Java 表示。作为补丁请求,您可以使您的成员变量Integer, Boolean等,如果未设置(即,如果它们是null).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 中的 PATCH 动词(OkHttp、Volley、Retrofit...) 的相关文章

  • 对话框上的 EditText 不返回任何文本

    我太累了 找不到错误 我没有发现任何错误 但我没有从 editText 收到任何文本 请看下面的代码 活动密码 xml
  • 使用库来维护免费/付费的应用程序版本

    维护免费 付费应用程序版本的共识似乎是使用库 并从每个活动中设置一个标志 以从代码库中获取不同的功能 这有多安全 据我了解 一个人可以root他们的手机 获取APK 并且可以对其进行反编译 即使代码被混淆 也不难看出该应用程序是带有标志的包
  • GridView 中多次调用 getView()

    我的 Activity 由包含 40 多个元素的 GridView 组成 开始活动后 用户最多可以看到 15 个项目 3 行 每行 5 个项目 我在 getView 正文中编写传递给获取 View 的 LogCat 编号 Log i get
  • 在 Android 中长按时从操作模式中删除后退/主页按钮

    我已经在里面长按实现了上下文操作模式recycler view 为此我打电话给ActionModeCallback从创建动作模式开始 创建动作模式时 默认显示后退箭头 检查如下 单击后退箭头 操作模式将关闭 现在我想要hide or rem
  • 如何从一个代码库创建多个 Android 应用

    我有一个 Android 代码库 它使用带有设置的 API 来获取多个应用程序的不同数据 所有应用程序都使用相同的代码库 但进行一两个设计调整 那么如何重用主代码库而不必每次都复制整个 Android 项目呢 iPhone 在同一个项目中使
  • 应用内结算错误

    我的 UNMANAGED 应用内购买无法正常工作 在它完美运行之前 我可以使用测试帐户成功购买 但它突然不起作用了 因为我记得我对商家帐户所做的只是添加更多 2 4 个测试帐户 添加后 我的应用内购买将不起作用 所以我更新了公钥并上传了一个
  • 尝试在模拟器上安装第二个 flutter 应用程序时出错

    我创建了一个简单的 flutter 应用程序并在 android 模拟器上运行它 效果还不错 现在我创建了另一个 当我尝试在模拟器上运行它时 我得到 Error ADB exited with exit code 1 adb failed
  • Android Studio更新到1.5后Gradle错误

    今天我已将 Android Studio 更新到 v1 5 我的 libgdx 项目在这次更新之前运行良好 现在我收到此错误消息 Error Unable to load class org gradle mvn3 org sonatype
  • Web 视图未在 Android 中加载本地 html 文件

    I am integrating html in android I have created a web view But i am not able load local html page Surprisingly web view
  • Firebase ANR - 甚至不使用 firebase

    随着 GMS 的最新更新 引入了新的 ANR 如果您退出应用程序 然后返回 则 ANR 就会初始化 线程跟踪似乎指向 Firebase 但我什至从未开始使用 Firebase 我猜它一定是新的 GMS 包的一部分 06 11 00 34 0
  • 在 Jetpack Compose 中跨可组合函数重复使用一组预览注释

    在 Jetpack Compose 中迈出第一步 这非常令人惊奇 除了一个恼人的问题 我有一组固定的预览 正常 深色和 RTL Preview name Normal group Screen showBackground true Pre
  • 如何在 Android NDK 中创建新的 NativeWindow 而无需 Android 操作系统源代码?

    我想编译一个 Android OpenGL 控制台应用程序 您可以直接从控制台启动 Android x86 运行 或者从 Android x86 GUI 内的 Android 终端应用程序运行 这个帖子 如何在 Android NDK 中创
  • Android 从命令行停止模拟器

    这个问题与如何通过命令行关闭Android模拟器 https stackoverflow com questions 5912403 how to shut down android emulator via cmd 但是 在尝试第一个答案
  • 将图像添加到自定义 AlertDialog

    我制作了一个 AlertDialog 让用户可以从我显示的 4 个选项中选择一个 前 3 个让他们在单击号码时直接拨打号码 第 4 个显示不同的视图 现在看起来是这样的 由于第四个选项的目的是不同的任务 我想让它看起来不同 因为用户可能会感
  • 在 Honeycomb Android 3.0 中显示 Action Bar 菜单项的图标

    我正在使用 Honeycomb android 3 0 开发 Android 应用程序 我正在尝试在 Action Bar 中显示菜单 菜单有一个图标和标题 当我们单击菜单项时 它会以下拉列表的形式显示其项目 它是下拉列表中带有项目名称但不
  • FCM onMessageReceived 应用程序运行时返回空白消息和标题

    正如您在标题中所写 当应用程序关闭时 它运行良好 并且onMessageReceived获取消息正文和标题 但如果应用程序处于前台模式 运行模式 则可以发送通知 但没有消息和标题 请问该怎么办 代码 Override public void
  • 安卓的限制

    我需要构建一个应用程序 该应用程序拍摄相机图像并将其上传到网络 在网络上进行一些处理并返回真 假 我在这方面遇到了一些问题 希望得到澄清 1 我的应用程序有什么方法可以知道 Android 相机捕获的图像吗 我从这里明白了什么 Androi
  • 在android中跟踪FTP上传数据?

    我有一个运行 Android 的 FTP 系统 但我希望能够在上传时跟踪字节 这样我就可以在上传过程中更新进度条 安卓可以实现这个功能吗 现在 我正在使用org apache common net ftp我正在使用的代码如下 另外 我在 A
  • 在没有 Wifi 的情况下获取 Android 设备的 MAC 地址

    如何获取没有 Wifi 接口的 Android 设备 例如 Android 模拟器 的网络接口的 MAC 地址 通过WifiManager返回获取的WifiInfonull EDIT 更清楚地说 我必须与本地网络上的现有网络协议 不是我设计
  • Android:如何检测手机设置中的语言已更改

    我如何检测我的手机语言是否已更改 例如 Facebook 应用程序将向我们宣布 please wait we preparing your language i used myString Locale getDefault getDisp

随机推荐