Android异步消费Web服务
我需要一个从C#到Java/Android的过渡,让客户端异步使用web服务,这样它就不会锁定gui了……(进度条会锦上添花。)在C#中,我会创建对象,在客户端执行类似的操作 创建服务引用。 创建与服务接口成员匹配的对象并填充。 在单独的线程中启动在步骤2中创建的服务请求传递对象。 等待显示进度条。 处理响应,无论是错误还是返回数据 现在,也许我过于简单化了,但我认为在Java中,它与此方法非常接近。我看到很多人都在说要扩展AsyncTask类。我缺少的是如何从客户那里传递我的价值观?例如,如何发送用户名和密码?恐怕所有不同的文章和细微差别都让我困惑。我只是需要一个直接的方法来完成这项工作 因此,如果有任何提示、指针、教程或其他类似的阅读,我将不胜感激Android异步消费Web服务,android,web-services,android-asynctask,Android,Web Services,Android Asynctask,我需要一个从C#到Java/Android的过渡,让客户端异步使用web服务,这样它就不会锁定gui了……(进度条会锦上添花。)在C#中,我会创建对象,在客户端执行类似的操作 创建服务引用。 创建与服务接口成员匹配的对象并填充。 在单独的线程中启动在步骤2中创建的服务请求传递对象。 等待显示进度条。 处理响应,无论是错误还是返回数据 现在,也许我过于简单化了,但我认为在Java中,它与此方法非常接近。我看到很多人都在说要扩展AsyncTask类。我缺少的是如何从客户那里传递我的价值观?例如,如何
JB6个月前,我以C#/.NET为背景开始了Android开发 我们当前使用的第一个选项是执行异步任务。。。在本例中,它正在使用web服务 下面是一个示例代码
public class AsyncHttpRequestManager extends AsyncTask<String, Boolean, String> {
private final String serviceUrl = "URL HERE";
@Override
protected String doInBackground(String... params) {
try {
DefaultHttpClient client = new DefaultHttpClient();
HttpPut putRequest = new HttpPut(serviceUrl);
putRequest.setHeader("Content-type", "text/plain");
putRequest.setHeader("Accept", "text/plain");
putRequest.setEntity(new StringEntity(params[0]));
HttpResponse response = client.execute(putRequest);
InputStream content = response.getEntity().getContent();
BufferedReader buffer = new BufferedReader(new InputStreamReader(content));
String result = "";
String s = "";
while ((s = buffer.readLine()) != null) {
result += s;
}
return result;
}
catch (UnsupportedEncodingException e) {
Log.e("AsyncOperationFailed", e.getMessage());
e.printStackTrace();
} catch (ClientProtocolException e) {
Log.e("AsyncOperationFailed", e.getMessage());
e.printStackTrace();
} catch (IOException e) {
Log.e("AsyncOperationFailed", e.getMessage());
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String result) {
Log.d("MESSAGE", result);
}
}
随着时间的推移,我们已经在HttpClient上创建了我们的助手,因此我建议您使用诸如loopj之类的开放源代码库,这将真正帮助您快速完成最初的步骤。唯一的挑战是,当您来自另一个平台时,您可能会面临其他库的初始挑战,而不是简单的异步任务,但值得花时间,如果您有灵活性。异步任务会带来很多问题,因为它们承载的活动可能会在执行过程中被破坏 最好的方法是将请求托管在intentservice内或服务内,这将在请求活动中继续存在
如果您想要一个开箱即用的解决方案,我建议您看看library,它是一个相当成熟的项目。基于此顺便说一句,我们使用的是Apache Http客户端库。我想除了传递参数之外,我什么都懂。假设我有两个要送。用户名和密码。我必须分开实体行吗?它在方法签名中看起来如何?ie关于(字符串…参数)的更多细节它看起来像什么?
AsyncHttpClient client = new AsyncHttpClient();
client.setBasicAuth("username","password/token");
client.get("http://www.example.com", new AsyncHttpResponseHandler() {
@Override
public void onSuccess(String response) {
System.out.println(response);
}
});
public class AsyncHttpRequestManager extends AsyncTask<String, Boolean, String> {
private final String serviceUrl = "URL HERE";
String user;
String pass;
public AsyncHttpRequestManager(String user, String Pass){
this.user = user;
this.pass = pass;
}
@Override
protected String doInBackground(String... params) {
//execute the post
return "";
}
protected void onPostExecute(String result) {
Log.d("MESSAGE", result);
//update the UI with the results
}
}
new AsyncHttpRequestManager(user, pass).execute();