2014-05-01 41 views
1

我是java新手,正在尝试从Web中将文本文件读入变量,但是我收到文本文件的网址,而不是内容,只是不知道可能是什么问题。在将txt文件读入变量时获取文本文件的url而不是java中的内容

在那里我试图读取文件中的类:

public class readtextfile extends AsyncTask<String, Integer, String>{ 

private TextView description; 
public readtextfile(TextView descriptiontext){ 
    this.description = descriptiontext; 
    } 

@Override 
protected String doInBackground(String... params) { 
    URL url = null; 
    String result =""; 
    try { 

     url = new URL("http://example.com/description1.txt");  
     BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); 
     String line = null; 
     while ((line = in.readLine()) != null) { 
     result+=line; 
     } 
     in.close(); 

     } 
     catch (MalformedURLException e) {e.printStackTrace();} 
     catch (IOException e) {e.printStackTrace();} 
    return result; 
} 

protected void onProgressUpdate() { 
    //called when the background task makes any progress 
} 

    protected void onPreExecute() { 
    //called before doInBackground() is started 
} 

@Override 
protected void onPostExecute(String result) { 
    this.description.setText(result); 
} 
    } 

在那里我调用类的活动:

public class PhotosActivity extends Activity { 

    TextView description; 
    String descriptiontext; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.photos_layout); 

     description = ((TextView)findViewById(R.id.description1)); 

     new readtextfile(description).execute(); 
     } 

    } 

回答

0

尝试使用url.openConnection和使用连接对象来获取inputStream。更新的方法将会像

protected String doInBackground(String... params) { 
    URL url = null; 
    String result = ""; 
    try { 
     url = new URL("http://www.example.com/description1.txt"); 
     URLConnection connection = url.openConnection(); 
     BufferedReader in = new BufferedReader(new InputStreamReader(
       connection.getInputStream())); 
     String line = null; 
     while ((line = in.readLine()) != null) { 
      result += line; 
     } 
     in.close(); 

    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return result; 
} 

根据您的评论更新。

您不需要调用postExecute方法。如果你调用postExecute它只是执行该方法。 doInBackground不会得到执行。相反,你应该使用execute方法。就像java的thread.start()方法调用重写的run()方法。在任务被执行之前

onPreExecute(),调用UI线程上:

当执行一个异步任务,任务经过4个步骤。此步骤通常用于设置任务,例如通过在用户界面中显示进度条。

doInBackground(Params ...),在onPreExecute()完成执行后立即在后台线程上调用。此步骤用于执行可能需要很长时间的后台计算。异步任务的参数传递给此步骤。计算结果必须通过该步骤返回并返回到最后一步。此步骤还可以使用publishProgress(Progress ...)发布一个或多个进度单元。这些值在onProgressUpdate(Progress ...)步骤中发布在UI线程上。

onProgressUpdate(Progress ...),在调用publishProgress(Progress ...)后在UI线程上调用。执行的时间是未定义的。此方法用于在后台计算仍在执行时在用户界面中显示任何形式的进度。例如,它可以用来为进度条设置动画效果或在文本字段中显示日志。

onPostExecute(Result),在后台计算完成后在UI线程上调用。后台计算的结果作为参数传递给此步骤。

参考developer doc

+0

我更新了方法,但它仍然给出了url。也许问题出在Activity的调用线上? new readtextfile(description).onPostExecute(“http://www.example.com/description1.txt”); –

+0

对不起。我没有注意到..而不是直接调用onPostExecute尝试execute()方法。像新的readtextfile(描述).execute(); –

+0

好吧,我已经尝试了执行方法,但现在我得到空的结果。该死的。 –

0

尝试使用Scanner这样。

URL url = new URL("http://www.example.com/description1.txt");  
Scanner s = new Scanner(url.openStream()); 
相关问题