Android异步消费Web服务
我需要一个从C#转换到Java/Android的小手,以便客户端使用Web服务异步,因此它不会锁定GUI ...(进度条会是锦上添花。)在C#中,我将创建对象在客户端中执行类似操作。Android异步消费Web服务
创建服务参考。 创建一个匹配服务接口成员并填充的对象。 在单独的线程中启动在第二步中创建的服务请求传递对象。 等待显示进度条。 处理响应是否错误或返回数据。
现在也许是我过于简单,但我认为在Java中这将是非常接近这个方法。我所看到的很多人都说扩展AsyncTask类。我所缺少的是我如何从客户端传递我的价值观?例如,我如何发送用户名和密码?恐怕所有不同的文章和细节都让我感到困惑。我只需要一个简单的方法来完成工作。
所以我对任何提示,指针,教程或其他类似的阅读感谢。
JB
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();
6个月回来,我就开始Android开发C#中的背景/。NET
第一选项,我们目前使用的是AsyncTask执行任务异步...在这个情况下使用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);
}
}
我已经写了一个blog post这个。
此外,对于显示进度/加载对话框,您可能必须重写AsyncTask中的onExExecute和onPostExecute方法。检查文档。
第二个替代是使用loopj library这是一个基于Apache的HttpClient库构建的基于异步回调的Http客户端。
的示例代码利用循环J是
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);
}
});
在的时候,我们已经创建了助手在HttpClient的,因此,我建议你去一个开放源码库,如循环J这将真正帮助你快速爬上最初的步骤。唯一的挑战是,当你来自另一个平台时,你可能会面临与其他库最初的挑战,而不是简单的AsyncTask,但如果你有灵活性,这是值得花时间的。
异步任务带来了很多问题,因为它们托管的活动在执行过程中可能会被破坏。
最好的方法是将请求托管在intentservice内部或服务内部,这将在请求活动中存活。
如果你想开箱即用的解决方案,我建议看看robospice库,这是一个相当成熟的项目。它基于此Google Io 2010 talk
BTW,我们使用的是Apache HTTP客户端库 – Adil
我想我明白,只是经过PARAMS一切呼叫。假设我有两个发送。用户名和密码。我必须做单独的实体行,它在方法签名中看起来如何?即更多的细节(String .... params)它看起来像什么? – GPGVM