我正在研究异步客户端服务器应用程序。在异步请求服务器之后,我应该处理该消息并发送回客户端。要异步接收来自服务器的响应,客户端应该有一种RESTful服务器。我可以在Android客户端上使用任何库或API吗? 感谢名单
答案 0 :(得分:4)
Retrofit将您的REST API转变为Java界面。
public interface GitHubService {
@GET("/users/{user}/repos")
List<Repo> listRepos(@Path("user") String user);
}
RestAdapter
类生成GitHubService
接口的实现。
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("https://api.github.com")
.build();
GitHubService service = restAdapter.create(GitHubService.class);
对生成的GitHubService
的每次调用都会向远程Web服务器发出HTTP请求。
List<Repo> repos = service.listRepos("octocat");
使用注释来描述HTTP请求:
URL参数替换和查询参数支持 对象请求正文的转换(例如,JSON,协议缓冲区) 多部分请求正文和文件上传
同时尽量避免AsyncTask
,这是关于这个主题的好读物:Robust and readable architecture for an Android App
答案 1 :(得分:2)
实际上没有使用Asynctask - 它缺乏正确的网络框架所需的重要功能(或者你只是自己坐下来开发几个小时)
2013年(来自:Android – Volley Library Example)
资源
Gradle Dependency
compile 'com.mcxiaoke.volley:library:1.0.+'
答案 2 :(得分:0)
尝试实现这样的代码:
ProgressDialog progressDialog=null;
private class LoadApi extends AsyncTask<String, Void, String> {
@Override
protected void onPreExecute() {
progressDialog=ProgressDialog.show(YourActivity.this, "",
"Please wait...");
super.onPreExecute();
}
protected String doInBackground(String... urls) {
//Do your api call stuff here
return null;
}
protected void onPostExecute(String result) {
handle response from api call here.
progressDialog.dismiss();
}
}
答案 3 :(得分:0)
您可以将AsyncTask
用于相同的
这是官方文档http://developer.android.com/reference/android/os/AsyncTask.html
我也给你一个Asyntask的例子。
class TestAsyncTask extends AsyncTask<Void, Integer, String>
{
protected void onPreExecute (){
Log.d("ASYNCTASK","On pre Exceute......");
}
protected String doInBackground(Void...arg0) {
Log.d("ASYNCTASK","In On doInBackground...");
// make request RESTful service here.
for(int i=0; i<10; i++){
Integer in = new Integer(i);
publishProgress(i); // Update your Ui
}
return "You are in PostExecute";
}
protected void onProgressUpdate(Integer...a){
Log.d("ASYNTASK","You are in progress update ... " + a[0]);
}
protected void onPostExecute(String result) {
// here you can perform all action after getting resonances from RESTful service
Log.d(""+result);
}
}
答案 4 :(得分:0)
如果您需要http服务的外部库。您可以使用Android异步Http客户端
从链接下载jar文件使用此方法
public void getData(String URL)
{
AsyncHttpClient client = new AsyncHttpClient();
client.setTimeout(30000);
client.get(URL, new AsyncHttpResponseHandler()
{
@Override
public void onSuccess(String arg0)
{
// TODO Auto-generated method stub
super.onSuccess(arg0);
}
@Override
public void onFailure(Throwable arg0, String arg1)
{
// TODO Auto-generated method stub
super.onFailure(arg0, arg1);
}
});
}
你在onsucess中得到了一个字符串的结果。 在您的清单文件中,您必须获得许可
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />