如何在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);
}
}));