Android 关闭web服务请求的问题

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>{

我有一个奇怪的问题,从Android设备调用我的web服务

第一次调用web服务REST时,ws调用将在大约100毫秒内执行。而如果几秒钟后重试,调用将持续大约20秒

若我执行了对web服务的多次后续调用,使用POSTMAN进行测试,我看不出任何问题:所有请求都在大约200毫秒内得到处理

所以我认为问题出在我的Android客户端

下面是我用来调用WS的代码:

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;            
}