我正在尝试开发一款可以连接到互联网并从指定网站读取数据的Android应用。但是,当我在模拟器上运行程序时没有任何反应。有人可以帮我指导我需要做什么吗?这是我的代码
public class HttpExaplme extends Activity {
TextView httpStuff;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.httpex);
httpStuff = (TextView) findViewById(R.id.tv_http);
GetHttpEx test = new GetHttpEx();
String returned;
try {
returned = test.getInternetData();
httpStuff.setText(returned);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public class GetHttpEx {
public String getInternetData() throws Exception
{
BufferedReader in = null;
String data = null;
try{
HttpClient client = new DefaultHttpClient();
URI website = new URI("http://www.mybringback.com");
HttpGet request = new HttpGet();
request.setURI(website);
HttpResponse response = client.execute(request);
in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuffer sb = new StringBuffer("");
String l ="";
String nl= System.getProperty("line sperator");
while((l = in.readLine())!=null)
{
sb.append(l + nl);
}
in.close();
data = sb.toString();
return data;
}
finally
{
try{
if(in != null)
{
in.close();
return data;
}
}
catch(Exception e){
e.printStackTrace();
}
}
}
答案 0 :(得分:0)
由于您在UI线程上执行HTTP请求,因此崩溃了。这是不允许的 - 你会让你的应用无响应,所以它会引发异常。所有HTTP请求必须在线程或AsyncTask中进行。
答案 1 :(得分:0)
首先,检查模拟器是否与http://www.mybringback.com连接。通过在Android浏览器中打开此站点来执行此操作。公司防火墙可能会默认阻止模拟器请求。
其次,正如@Gabe所说,将您的网络请求包装在AsyncTask中。这里:http://developer.android.com/reference/android/os/AsyncTask.html
在这些步骤之后回到这里。请发布一个堆栈跟踪。您可以在logcat中查看它(命令行上的adb -e logcat)。
HTH
编辑:您是否在清单中设置了android.permission.INTERNET?