2013-08-16 77 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();