2017-08-17 65 views
0

我有一個奇怪的情況。使用電話和虛擬設備時,所有請求都能正常工作,但如果我嘗試使用Tablet,則無效。使用平板電腦無法獲得urlConnection.getInputStream()

我的要求:

String path = "https://..."; 
HttpURLConnection urlConnection = null; 
try{ 
    URL url = new URL(path); 
    urlConnection = (HttpURLConnection) url 
      .openConnection(); 
    urlConnection.setRequestMethod("GET"); 
    urlConnection = Tools.setHeader(urlConnection); 
    urlConnection.setDoInput(true); 

    LOG.debug("Start input stream"); 
    InputStream inputStream = urlConnection.getInputStream(); 
    LOG.debug("Input stream exist "+inputStream.toString()); 

    String response = Tools.streamToString(inputStream); 
    inputStream.close(); 
    JSONObject jsonResponse = new JSONObject(response); 

我沒有得到任何錯誤消息。使用代理服務器,我看到我的請求發送和收到的響應。但在程序urlConnection.getInputStream()方法中什麼都沒有。該計劃不會進一步。我沒有看到第二個日誌。

我試圖設置超時,但這沒有幫助。反應很快(1-2秒)。

回答

0

檢查您的平板電腦的Android版本,可能會導致問題。從ANDROID O開始,它不支持http請求。

解決方法是:下載與棉花糖版本的另一個平板電腦圖像,並檢查它。

更新:試試這個代碼,請

HttpURLConnection connection = null; 
BufferedReader reader = null; 
    try { 
     URL url = new URL(params[0]); 
     connection = (HttpURLConnection)url.openConnection(); 
     connection.connect(); 
     InputStream stream =connection.getInputStream(); 
     reader = new BufferedReader(new InputStreamReader(stream)); 
     StringBuffer buffer = newStringBuffer(); 
      String line = ""; 
      while ((line = reader.readLine()) != null) { 
      buffer.append(line+"\n"); 
      Log.d("Response: ", "> " + line); //here u ll get whole response...... :-) 
     } 
     return buffer.toString(); 
    } 
    catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 
    finally { 
     if (connection != null) { 
      connection.disconnect(); 
     } 
     try { 
      if (reader != null) { 
       reader.close(); 
       } 
      } 
      catch (IOException e) 
     { 
       e.printStackTrace(); 
     } 
    } 
    return null; 
} 
+0

我使用的真正平板電腦的Android 5.1版本。 1 – Delphian

+0

你能分享一下嗎? ou正在使用的「URL」,soo,我們可以檢查 –

+0

我不能抱歉。但是我測試了不同的網址並獲得了相同的結果。 – Delphian

1

Heyy我兩個手機或平板電腦與我下面的代碼運行。我向你提供我的代碼看看它。

代碼:

public class URLConnectionCheck extends Activity { 

TextView resultText; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_urlconnection_check); 

    resultText = (TextView)findViewById(R.id.resultTextView); 

    new AsynchTaskTest().execute(); 

} 

private class AsynchTaskTest extends AsyncTask<Void,Void,String> 
{ 
    @Override 
    protected String doInBackground(Void... params) { 

     String path = "http://echo.jsontest.com/key/value/one/two"; 

     HttpURLConnection urlConnection = null; 
     BufferedReader reader=null; 

     try{ 
      URL url = new URL(path); 

      urlConnection = (HttpURLConnection)url.openConnection(); 

      urlConnection.connect(); 

      InputStream inputStream = urlConnection.getInputStream(); 
      reader = new BufferedReader(new InputStreamReader(inputStream)); 

      StringBuffer buffer = new StringBuffer(); 
      String line = ""; 

      while((line = reader.readLine()) !=null) { 
       buffer.append(line+"\n"); 

      } 

      return buffer.toString(); 

     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
      return "exception"; 
     } 
    } 

    @Override 
    protected void onPostExecute(String aVoid) { 
     super.onPostExecute(aVoid); 

     resultText.setText(aVoid); 
    } 
} 

}

而結果是在我的屏幕爲::

mobile screenshot

tablet screenshot

+0

Ankit,這與請求無關,因爲請求可能會或可能不會工作,在某些時候,我沒有得到對該程序的響應,儘管我看到響應存在。顯然,這是與平板電腦設置或前臺進程相關的某種問題。目前,一切運作良好,雖然我沒有改變任何東西,然後在另一次停止工作。在前景模式下我有一個漫長的過程。感謝您努力尋找解決方案,我爲您添加了一個優點! – Delphian