2012-02-17 14 views
0

ランキングサーバーに接続して現在のランクを取得するアプリを開発しています。Android:HttpURLConnectionは、Bluetoothディスカバリで応答を取得するのに非常に時間がかかります

このため、私はHttpURLConnectionクラスを使用しています。 私はWiFiで接続していますが、接続時間が非常に長くなっています。接続が拒否されることもあります。その後、私はWiFiルーターに接続しなくなりました。 サーバーは高速で、ネットワーク接続と待ち時間が良好です。 テスト目的のために、私は各部分の時間を計算しました。ここで

コードです:

02-17 15:21:27.800: D/RandEXETime(6008): 0 
02-17 15:21:27.800: D/SMBD_AsyncTask_params(6008): 4454|C8:AA:21:F1:C0:BA|Maksl5|57 
02-17 15:21:27.800: D/SMBD ID(6008): 4454 
02-17 15:21:27.800: D/URLEXETime(6008): 1 
02-17 15:21:27.870: D/RequestEXETime(6008): 68 
02-17 15:21:27.870: D/SMBD_AsynkTask(6008): After sending 
02-17 15:21:27.950: D/ResponseEXETime(6008): 76 
02-17 15:21:27.950: D/ResponseINEXETime(6008): 1 
02-17 15:21:27.950: D/SMBD_AsynkTask_response(6008): 101./2171 

しかしとき:

私は無線LANに接続し、それに再接続してい
 //The code runs in the doInBackground(String... params) method 

     long randStartTime = System.currentTimeMillis(); 

     do 
     { 
      Random randomGenerator = new Random(); 
      randomgen = randomGenerator.nextInt(10); 
     }while(randomgen == 0); 

     int random = //Calculation of the Session_ID 
     String res = null; 

     long randEndTime = System.currentTimeMillis(); 
     Log.d("RandEXETime", String.valueOf(randEndTime - randStartTime)); 

     HttpURLConnection connection = null; 


     try {   

      long URLStartTime = System.currentTimeMillis(); 


      String[] paramsList = params[0].split("\n"); 
      Log.d("SMBD_AsyncTask_params", paramsList[0] + "|" + paramsList[1] + "|" + paramsList[2] + "|" + paramsList[3]); 
      Integer idList = Integer.decode(paramsList[0]); 

      String request; 

      if(idList == 0) { 
       request = "http://maks.mph-p.de/blue/checkrankv12.php?device_number=" + paramsList[3] + "&session_id=" + random; 
      }else{ 

       Log.d("SMBD ID", idList.toString()); 
       request = "http://maks.mph-p.de/blue/checkrankv12.php?read=1&id=" + idList + "&device_number=" + paramsList[3] + "&session_id=" + random; 

      } 

      String urlParameters = "adress=" + URLEncoder.encode(paramsList[1], "UTF-8") + "&name=" + URLEncoder.encode(paramsList[2], "UTF-8"); 

      URL url = new URL(request); 

      long URLEndTime = System.currentTimeMillis();   
      Log.d("URLEXETime", String.valueOf(URLEndTime - URLStartTime)); 



      long RequestStartTime = System.currentTimeMillis(); 

      connection = (HttpURLConnection) url.openConnection();   
      connection.setDoOutput(true); 
      connection.setDoInput(true); 
      connection.setInstanceFollowRedirects(false); 
      connection.setRequestMethod("POST"); 
      connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
      connection.setRequestProperty("charset", "utf-8"); 
      connection.setRequestProperty("Content-Length", "" + Integer.toString(urlParameters.getBytes().length)); 
      connection.setUseCaches (false); 

      DataOutputStream wr = new DataOutputStream(connection.getOutputStream()); 
      wr.writeBytes(urlParameters); 
      wr.flush(); 
      wr.close(); 

      long RequestEndTime = System.currentTimeMillis();   
      Log.d("RequestEXETime", String.valueOf(RequestEndTime - RequestStartTime)); 

      Log.d("SMBD_AsynkTask", "After sending"); 

      long ResponseStartTime = System.currentTimeMillis(); 


       InputStream in = new BufferedInputStream(connection.getInputStream()); 

      long ResponseEndTime = System.currentTimeMillis();    
      Log.d("ResponseEXETime", String.valueOf(ResponseEndTime - ResponseStartTime)); 

      long ResponseINStartTime = System.currentTimeMillis(); 

       res = inputStreamToString(in); 

       long ResponseINEndTime = System.currentTimeMillis();    
       Log.d("ResponseINEXETime", String.valueOf(ResponseINEndTime - ResponseINStartTime));  


      Log.d("SMBD_AsynkTask_response", res); 

      //} 
     } catch (UnsupportedEncodingException e1) { 
      // TODO Auto-generated catch block 

      res = "false"; 
     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 

      res = "false"; 
     }catch (IOException e2) { 
      // TODO Auto-generated catch block 

      res = "false"; 
     }finally{ 
      connection.disconnect(); 
     } 




     String result = res; 
     return result; 

、アプリを起動し、接続時間は、それがあるべきようなものです私は、アプリケーションを閉じて、再び開いて、接続時間が長すぎます:

02-17 15:06:36.220: D/RandEXETime(5575): 0 
02-17 15:06:36.220: D/SMBD_AsyncTask_params(5575): 4454|C8:AA:21:F1:C0:BA|Maksl5|56 
02-17 15:06:36.220: D/SMBD ID(5575): 4454 
02-17 15:06:36.220: D/URLEXETime(5575): 2 
02-17 15:06:39.300: D/RequestEXETime(5575): 3070 
02-17 15:06:39.300: D/SMBD_AsynkTask(5575): After sending 
02-17 15:06:45.490: D/dalvikvm(5575): GC_CONCURRENT freed 192K, 4% free 6755K/6983K, paused 2ms+2ms 
02-17 15:07:09.130: D/ResponseEXETime(5575): 29830 
02-17 15:21:56.430: D/ResponseINEXETime(6008): 1 
02-17 15:07:09.130: D/SMBD_AsynkTask_response(5575): 102./2171 

私の質問は、応答はわずか11文字で30秒かかりますか? タブレットがWiFiルーターの近くに5 cmあるときにも問題が発生します。

このアプリでのみ問題は発生しません。

3Gで確認することはできません。

私を助けることができますか?

+0

私はそれがあなたのコードだけでなく、多くの要素に依存すると思います。 – kosa

答えて

0

私は問題を知っています。

長い検索の後、興味深いものがいくつか見つかりました。

デバイスがWiFiに接続されていて、現在Bluetoothデバイスを検出している場合は、信号間に多くの干渉があります。 WiFiとBluetoothの両方がデータを取得または送信している場合、Bluetooth信号がWiFiを妨害するため、WiFi信号はあまりにも長くかかります。 WiFiネットワークからデータを取得する場合、Bluetoothの検出や転送が実行されていないことを確認してください。あなたは無線LANに接続している場合、チェックして、現在の発見をキャンセルしなければならないあなたのAsyncTaskonPreExecute()法に続いて

boolean IsConnectedToWifi = false; 

    ConnectivityManager conMgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo[] netInf = conMgr.getAllNetworkInfo(); 
    for(NetworkInfo inf : netInf){ 
     if(inf.getTypeName().contains("WIFI")) 
     { 
      if(inf.isConnected()){ 
       IsConnectedToWifi = true; 
      } 

     } 
    } 

:無線LANに接続されている場合は、このコードを取ることができます確認するには

BluetoothAdapter.cancelDiscovery(); 
関連する問題