2013-08-16 109 views
0

最終,我的目標是獲得一個Android應用程序,該應用程序從URL接收XML文件,對其進行解析並顯示相關信息(當然,最終目標比這更復雜,但是是當前的目標)。我正在使用Wei-Meng Lee的「Beginning Android Application Development」中的示例,並且我已經注意到本書示例代碼中的一些錯誤(尤其是錯誤變量,如果Eclipse沒有指出它,我會錯過它完全)。Android程序錯誤連接

然而,目前,儘管有權限訪問(3g,4g和wifi已全部測試過),但該應用程序仍無法連接到互聯網,並且能夠通過網絡訪問測試網址,板載瀏覽器。

以下是相關的代碼片段。我做錯了什麼?

private InputStream OpenHttpConnection(String urlString) 
throws IOException 
{ 
    InputStream in = null; 
    int response = 01; 

    URL url = new URL(urlString); 
    URLConnection conn = url.openConnection(); 

    if (!(conn instanceof HttpURLConnection)) 
     throw new IOException("Not an HTTP connection"); 
    try{ 
     HttpURLConnection httpConn = (HttpURLConnection) conn; 
     httpConn.setAllowUserInteraction(false); 
     httpConn.setInstanceFollowRedirects(true); 
     httpConn.setRequestMethod("Get"); 
     httpConn.connect(); 
     response = httpConn.getResponseCode(); 
     if (response == HttpURLConnection.HTTP_OK){ 
      in = httpConn.getInputStream(); 
     } 
    } 
    catch (Exception ex) 
    { 
     throw new IOException("Error connecting"); 
    } 
    return in; 
} 

我曾嘗試不同的URL:(請注意我都在模擬器和我的Galaxy S2測試),檢查我可以連接到他們每個人在手機的瀏覽器中使用它們。模擬器也沒有任何運氣。

UPDATE:利用下面的非同步代碼:

private class BackgroundTask extends AsyncTask 
<String, Void, Bitmap> { 
    protected Bitmap doInBackground(String... url){ 
     // download an image 
     Bitmap bitmap = DownloadImage(url[0]); 
     return bitmap; 
    } 
} 

protected void onPostExecute(Bitmap bitmap) { 
    ImageView img = (ImageView) findViewById(R.id.img); 
    img.setImageBitmap(bitmap); 
} 

方法調用上面:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    new BackgroundTask().execute("http://www.google.com/intl/en_ALL/images/logos/images_logo_lg.gif"); 

} 
+0

這是在'AsyncTask'中完成的嗎? – JosephChilberry

回答

1

您想使用的AsyncTask用於需要網絡連接的任何東西。你可以設置你的異步如下:(這需要一個字符串作爲參數,並返回一個InputStream)

public class OpenHttpConnection extends AsyncTask<String, Void, InputStream> { 

    @Override 
    protected String doInBackground(String... params) { 
     String urlstring = params[0]; 
     InputStream in = null; 
     int response = 01; 

     URL url = new URL(urlString); 
     URLConnection conn = url.openConnection(); 

     if (!(conn instanceof HttpURLConnection)) 
     throw new IOException("Not an HTTP connection"); 
     try{ 
     HttpURLConnection httpConn = (HttpURLConnection) conn; 
     httpConn.setAllowUserInteraction(false); 
     httpConn.setInstanceFollowRedirects(true); 
     httpConn.setRequestMethod("Get"); 
     httpConn.connect(); 
     response = httpConn.getResponseCode(); 
     if (response == HttpURLConnection.HTTP_OK){ 
      in = httpConn.getInputStream(); 
     } 
     } 
     catch (Exception ex) 
     { 
     throw new IOException("Error connecting"); 
     } 
     return in; 

    } 

} 

然後就可以調用/運行你異步這樣。

OpenHttpConnection connection = new OpenHttpConnection().execute("http://YourURL.com"); 
InputStream is = connection.get();