gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:37:14 26 4
gpt4 key购买 nike

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

所以我问任何通过使用 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@me.com");
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());

}
});

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

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

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

感谢您的帮助。

最佳答案

正如 GreyBeardedGeek 所说,您可以使用 Retrofit + 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);

MyPatchService 看起来像这样:

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

您的 UserUpdate 类可能如下所示:

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

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

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

请求/响应对象是您通过网络发送/接收的对象的纯 Java 表示。作为补丁请求,您可以让您的成员变量 IntegerBoolean 等,如果未设置它们将不会被序列化(即如果它们为 null )。

关于android - Android 中的 PATCH 动词(OkHttp、Volley、Retrofit...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28161889/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com