我想获取一个Internet txt文件的内容。当我用模拟器打开它时,我收到了这条消息
“不幸的是应用程序停止了”。
如果删除“http://”,则不会发生任何事情,但它不会读取任何内容并变为null
。怎么了?如何阅读上面的网址?我已经添加了许可。
这是我改变的整个代码,但仍然得到相同的错误。我做错了什么? http://dforum.zxq.net/code.txt
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... arg0) {
try {
URL url = new URL("http://dforum.zxq.net/myfile.txt");
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
String str;
while ((str = in.readLine()) != null) {
Toast.makeText(getApplicationContext(), str, Toast.LENGTH_SHORT).show();
// str is one line of text; readLine() strips the newline character(s)
}
in.close();
} catch (MalformedURLException e) {
} catch (IOException e) {
}
return null;
// TODO Auto-generated method stub
}
}.execute();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
答案 0 :(得分:1)
确保您不在UI线程上执行此操作,并检查您是否具有Internet权限。
这两种情况都可能导致异常,导致您的应用崩溃。
这是一个关于如何阻止在GUI线程上进行网络操作的示例:
new AsyncTask<Void, Void, Void>{
@Override
protected Void doInBackground(Void... params) {
// add your try catch block here.
return null;
}
}.execute();
答案 1 :(得分:0)
确保通过在AsyncTask
内运行此过程,将其从主UI线程中删除。查看本教程:http://www.androidhive.info/2012/05/how-to-connect-android-with-php-mysql/。更具体地说,请查看那里的JSONParser类。
<强>更新强>
你在while循环中调用Toast
,我认为这是它崩溃的原因。将其替换为Log.d()
或System.out.println()