gpt4 book ai didi

java - Android 中向 WebService 发送请求

转载 作者:行者123 更新时间:2023-12-01 12:35:30 25 4
gpt4 key购买 nike

我在 Android 上使用 WebService 时遇到问题。我收到 400 错误,但 ErrorStream 上没有信息。

我想做的是使用 JSON 在 WCF Web 服务上发出 POST 请求。

我必须补充一点,我的服务启用了 includeExceptionDetailInFaults。上次我收到 400 错误是因为我没有定义 RequestProperty。现在我在流中没有收到任何错误。

这是代码:

HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
try {
// In my last error I had not included these lines. Maybe they are still wrong?
urlConnection.setRequestProperty("Content-Type", "application/json");
urlConnection.setRequestProperty("Accept", "application/json");
urlConnection.setRequestMethod("POST");

urlConnection.setDoOutput(true);
urlConnection.setChunkedStreamingMode(0);

OutputStream out = new BufferedOutputStream(urlConnection.getOutputStream());

OutputStreamWriter outputStreamWriter = new OutputStreamWriter(out);
outputStreamWriter.write(jsonObject.toString(), 0, jsonObject.length());
outputStreamWriter.flush();
//outputStreamWriter.close();

int code = urlConnection.getResponseCode();
System.out.println(code);

if(code == 400) {
BufferedInputStream errorStream = new BufferedInputStream(urlConnection.getErrorStream());
InputStreamReader errorStreamReader = new InputStreamReader(errorStream);

BufferedReader bufferedReader = new BufferedReader(errorStreamReader);
StringBuilder builder = new StringBuilder();
String aux = "";

while ((aux = bufferedReader.readLine()) != null) {
builder.append(aux);
}
String output = builder.toString(); // The output is empty.
System.out.print(output);
}

最佳答案

检查Retrofit Square 的库对于 GET/POST 请求尤其是 REST 来说更加简单和精简。我建议你尝试一下。它会让你的生活变得轻松。您可以使用不同的 JSON 解析器、错误处理程序等。非常灵活。

使用 Retrofit 定义 POST 请求,就像这样简单:

可以使用 @Body 注解指定一个对象用作 HTTP 请求正文。

@POST("/users/new")
void createUser(@Body User user, Callback<User> cb);

还可以声明方法来发送表单编码和多部分数据。

当方法上存在 @FormUrlEncoded 时,将发送表单编码数据。每个键值对都用包含名称和提供值的对象的 @Field 进行注释。

@FormUrlEncoded
@POST("/user/edit")
User updateUser(@Field("first_name") String first, @Field("last_name") String last);

在 Java 接口(interface)中定义方法后,如上所示实例化它:

RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("https://api.soundcloud.com")
.build();

MyInterface service = restAdapter.create(MyInterface.class);

然后您可以同步或异步调用您的方法(如果您传递 Callback 实例)。

service.myapi(requestBody);

有关更多详细信息,请参阅 Retrofit 文档 ( http://square.github.io/retrofit/javadoc/index.html ) 和 GitHub 上的示例。

关于java - Android 中向 WebService 发送请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25638809/

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