从url读取文件

时间:2013-04-26 20:56:38

标签: android url

我想获取一个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;
}

}

2 个答案:

答案 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()