Android 关闭web服务请求的问题
我有一个奇怪的问题,从Android设备调用我的web服务 第一次调用web服务REST时,ws调用将在大约100毫秒内执行。而如果几秒钟后重试,调用将持续大约20秒 若我执行了对web服务的多次后续调用,使用POSTMAN进行测试,我看不出任何问题:所有请求都在大约200毫秒内得到处理 所以我认为问题出在我的Android客户端 下面是我用来调用WS的代码:Android 关闭web服务请求的问题,android,web-services,android-asynctask,asp.net-web-api,Android,Web Services,Android Asynctask,Asp.net Web Api,我有一个奇怪的问题,从Android设备调用我的web服务 第一次调用web服务REST时,ws调用将在大约100毫秒内执行。而如果几秒钟后重试,调用将持续大约20秒 若我执行了对web服务的多次后续调用,使用POSTMAN进行测试,我看不出任何问题:所有请求都在大约200毫秒内得到处理 所以我认为问题出在我的Android客户端 下面是我用来调用WS的代码: public class DownloadTask extends AsyncTask<Void, Void, Void>{
public class DownloadTask extends AsyncTask<Void, Void, Void>{
private Context context;
public DownloadTask(Context context){
this.context = context;
contactList = new ArrayList<Contact>();
}
@Override
protected void onPreExecute() {
if (mCallbacks != null) {
mCallbacks.onPreExecute();
}
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params) {
if(Utils.isOnline(context))
{
int resCode = -1;
String wsURI = "myuri...";
HttpGet request = new HttpGet(wsURI);
request.setHeader("Content-Type", "application/json");
try{
// Send request to service
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(request);
resCode = response.getStatusLine().getStatusCode();
if(resCode == 200){
BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String line="";
StringBuffer returnFromServer = new StringBuffer();
while ((line=in.readLine())!=null)
{
returnFromServer.append(line);
}
Gson gson = new GsonBuilder().create();
contactList = gson.fromJson(returnFromServer.toString(), new TypeToken<ArrayList<Contact>>(){}.getType());
}
}catch(Exception ex){
ex.printStackTrace();
}
}
return null;
}
}
编辑:
我已尝试在debug中运行我的应用程序,我发现问题似乎在这里:
HttpResponse response=httpClient.executerequest
第一次它立即执行,而第二次接近第一次调用的时间大约为10/20秒。我尝试了一些提出的解决方案,但没有结果。最后,我尝试避免使用DefaultHttpClient或AndroidHttpClient,以支持HttpURLConnection。这就解决了问题 在doInBackground方法下面,使用HttpURLConnection
不很抱歉@Mobile他们是私有的,请尝试以下URL..1 2我可能错了,但我认为第一次收到响应时,下面几行正在做一些需要时间的事情,在android中,相同的异步任务不会再次执行,除非它在您第一次执行时完成执行,即它的onPost在第一次执行时完成呼叫放置一个调试程序,在onPost完成第一次调用后,检查第二次调用的执行是否有任何间隙
protected Void doInBackground(Void... params) {
if(Utils.isOnline(context))
{
String wsURI = "myUriAddress...";
InputStream inp=null;
try{
URL url = new URL(wsURI);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.addRequestProperty("Content-Type", "application/json");
inp = new BufferedInputStream(urlConnection.getInputStream());
if(urlConnection.getResponseCode() == 200){
BufferedReader in = new BufferedReader(new InputStreamReader(inp, "UTF-8"));
String line="";
StringBuffer returnFromServer = new StringBuffer();
while ((line=in.readLine())!=null)
{
returnFromServer.append(line);
}
in.close();
inp.close();
Log.i("doInBackground",""+returnFromServer.toString());
Gson gson = new GsonBuilder().create();
contactList = gson.fromJson(returnFromServer.toString(), new TypeToken<ArrayList<Contact>>(){}.getType());
}
}catch(Exception ex){
ex.printStackTrace();
}
}
return null;
}