如何在Android中从互联网上阅读文本文件

时间:2013-09-03 19:21:31

标签: android android-asynctask text-files readfile

我想阅读远程文本文件并在textview中显示其内容。我已编写此代码,但它没有从文本文件中获取任何信息并且“强制停止”错误。我怎样才能找到这个问题的原因或解决它?我的代码没有任何问题吗?

private class DownloadFile extends AsyncTask<String, Integer, Void> {
protected void doInBackground() {
    try {
        URL url = new URL("http://host/f.txt");       
        BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
        String line = null;
        while ((line = in.readLine()) != null) {
        //get lines
        }
        in.close();
        lbl.setText(line);
    } 
    catch (MalformedURLException e) {
        e.printStackTrace();
    } 
    catch (IOException e) {
        e.printStackTrace();
    }
}
protected void onProgressUpdate() {
    //called when the background task makes any progress
}
protected void onPreExecute() {
     //called before doInBackground() is started
}
protected void onPostExecute() {
     //called after doInBackground() has finished 
}
@Override
protected Void doInBackground(String... arg0) {
    // TODO Auto-generated method stub
    return null;
}
}

和我的onCreate代码:

DownloadFile d=new DownloadFile();
d.doInBackground();

请解决我的问题!

3 个答案:

答案 0 :(得分:0)

一些事情:

1)您无法从后台线程修改UI线程。 doInBackground()在后​​台线程上运行,您应该在onPostExecute()上更新您的用户界面。

2)您有两个doInBackground()的实现。第一个不会覆盖AsyncTask中的doInBackground()。将此代码移动到覆盖AsyncTask

的代码

3)doInBackground()应返回一个String,以便您可以使用它来更新onPostExecute中TextView上的文本。 AsyncTask看起来应该是AsyncTask<String,Void,String>

4)当你创建DonwloadFile()实例时,你应该调用它的execute(),否则后台线程将无法启动,doInBackground()将不会被调用。

5)你的while循环只检查InputStream上是否还有数据,但它没有存储在任何地方。使用StringBuilder附加here等传入信息。

答案 1 :(得分:0)

如果您从Logcat发布异常堆栈跟踪,人们可以更轻松地帮助您。

如果您使用的是Eclipse并且不知道我在说什么,请查看here

答案 2 :(得分:0)

您可以使用droidQuery库来处理此问题,并捕获您可能遇到的任何错误:

$.ajax(new AjaxOptions().context(this).url("http://example.com/f.txt").dataType("text").success(new Function() {
    @Override
    public void invoke($ d, Object... params) {
        String fileContents = (String) params[0];
        Log.i("File contents", fileContents;
    }
}).error(new Function() {
    @Override
    public void invoke($ d, Object... params) {
        AjaxError error = (AjaxError) params[0];
        Log.e("Ajax", "Error " + error.status + ": " + error.reason);
    }
}));

另请务必检查您的AndroidManifest.xml文件。您是否要求INTERNET 使用许可