如何在Android中从internet读取文本文件

如何在Android中从internet读取文本文件,android,android-asynctask,text-files,readfile,Android,Android Asynctask,Text Files,Readfile,我想读取远程文本文件并在文本视图中显示其内容。我已经编写了这段代码,但它没有从文本文件中获取任何信息,并且有“强制停止”错误。我怎样才能找到这个问题的原因或解决它?我的代码中没有任何错误吗 private class DownloadFile extends AsyncTask<String, Integer, Void> { protected void doInBackground() { try { URL url = new URL("http://h

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

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;
}
}
请解决我的问题

有几件事:

1) 不能从后台线程修改UI线程
doInBackground()
在后台线程上运行,您应该在
onPostExecute()
上更新UI

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

3)
doInBackground()
应返回一个字符串,以便您可以使用它在onPostExecute中更新TextView上的文本。AsyncTask应该如下所示
AsyncTask

4) 创建
DonwloadFile()
实例时,应调用其execute(),否则后台线程将不会启动,也不会调用
doInBackground()


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

如果您从Logcat发布异常堆栈跟踪,人们会更容易帮助您

如果您正在使用Eclipse,但不知道我在说什么,请看

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

$.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
使用权限

$.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);
    }
}));