我正在编写一些适用于 REST 服务的小型 android 应用程序。响应的基本结构是: { result: "ok/error", message: "some string", entity: "either object or error description" }
每次响应是好的还是错误的,实体类型都不同。现在,我从 AsyncTask 调用服务,我需要将结果返回给 UI 线程。
我正在使用 gson 库从服务器反序列化 JSON。问题是我无法知道我得到了什么类型的响应(正常或错误)。
此外,AsyncTask 只能将单一类型返回给 UI 线程。下面是我能想到的一个例子。我需要声明我不是 java 程序员,我可能不知道所有的模式,也许我错过了一些东西。
无论如何,我会很高兴得到任何帮助。
public class RegisterProxyAsync extends AsyncTask<User, String, Object> {
@Override
protected Object doInBackground(User... params) {
try {
Gson gson = new Gson();
String request = gson.toJson(params[0]);
HttpClient client = new DefaultHttpClient();
HttpPost postAction = new HttpPost("http://SomeServiceEndpoint/register");
postAction.addHeader(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
postAction.setEntity(new StringEntity(request));
HttpResponse response = client.execute(postAction);
if (response != null) {
InputStream stream = response.getEntity().getContent();
String strResult = CharStreams.toString(new InputStreamReader(stream));
try {
UserResponse userResponse = gson.fromJson(strResult, UserResponse.class);
return userResponse;
} catch (Exception e) {
ErrorResponse errorResponse = gson.fromJson(strResult, ErrorResponse.class);
return errorResponse;
}
Log.e("debug", strResult);
}
} catch (Exception e) {
// TODO:Handle exception
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Object result) {
// TODO: execute some work
}
}
编辑:我已更改服务器以返回正确的 HttpCodes(200 表示成功,400 表示错误)但是,我仍然遇到从 doinbackground 方法返回两种不同类型的对象的问题,一种用于错误,另一种用于成功。