Java Android,使用异步任务从url抓取文本 对,我想就这样,你应该认为我是个十足的疯子,我的脑子里有个问题。

Java Android,使用异步任务从url抓取文本 对,我想就这样,你应该认为我是个十足的疯子,我的脑子里有个问题。,java,android,url,android-asynctask,Java,Android,Url,Android Asynctask,我试图从几个部分教程中拼凑出我对此的理解,每个部分都涉及我想做的不同方面 长话短说,我只想从URL读取文本以显示在文本视图中,我的理解是,自从3.0更新以来,我需要一个AsyncTask来实现这一点 任何关于我哪里出错的帮助都会很好,因为我不知道是什么导致了错误以及如何修复 我知道doInBackground的try-and-catch中包含的代码在3.0更新之前是独立工作的。但是,我不知道是否需要修改它以使用异步 我还认为,一旦这一问题得到解决,可能会出现其他问题,如果有人发现一些明显的问题,

我试图从几个部分教程中拼凑出我对此的理解,每个部分都涉及我想做的不同方面

长话短说,我只想从URL读取文本以显示在文本视图中,我的理解是,自从3.0更新以来,我需要一个AsyncTask来实现这一点

任何关于我哪里出错的帮助都会很好,因为我不知道是什么导致了错误以及如何修复

我知道doInBackground的try-and-catch中包含的代码在3.0更新之前是独立工作的。但是,我不知道是否需要修改它以使用异步

我还认为,一旦这一问题得到解决,可能会出现其他问题,如果有人发现一些明显的问题,如果你能指出,我将不胜感激

String Event;
TextView eventText;
TextView titleText;

String HTML;

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

    titleText = (TextView) findViewById(R.id.Title);
    eventText = (TextView) findViewById(R.id.Event);

    new eventupdate().execute();


}

public class eventupdate extends AsyncTask<String, Void, Void> {

    @Override
    protected Void doInBackground(String... url) {

        try {

            Thread.sleep(4000);                 

            HttpClient httpClient = new DefaultHttpClient();
            HttpContext localContext = new BasicHttpContext();
            HttpGet httpGet = new HttpGet(
                    "http://masterzangetsu.eu/Apps/rocksoctest"); // URL!
            HttpResponse response = httpClient.execute(httpGet,
                    localContext);
            String result = "";

            BufferedReader reader = new BufferedReader(
                    new InputStreamReader(response.getEntity().getContent()));

            String line = null;
            while ((line = reader.readLine()) != null) {
                result += line + "\n";
                HTML = result;
            }

        } catch (InterruptedException e) {

            e.printStackTrace();


        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        eventText.setText("" + HTML);

        // TODO Auto-generated method stub
        return null;
    }


}
这条线在这里

 eventText.setText("" + HTML);
是什么导致了你的问题。无法从doInBackground更新UI。它必须在其他方法之一中完成,或者发送回主活动方法。在这里,您可以在onPostExecute中执行

实现这一点有不同的方法,但您可以更改AsyncTask以将结果返回到onPostExecute

这条线在这里

 eventText.setText("" + HTML);
是什么导致了你的问题。无法从doInBackground更新UI。它必须在其他方法之一中完成,或者发送回主活动方法。在这里,您可以在onPostExecute中执行

实现这一点有不同的方法,但您可以更改AsyncTask以将结果返回到onPostExecute


请参阅此处:获取一些源代码的视频演练,其中详细解释了从web提取数据的异步任务。希望看了之后你会对它的工作原理有一个更好的了解。请参阅此处:获取一些源代码的视频演练,其中详细解释了从web提取数据的异步任务。希望在观看之后,您能更好地了解它的工作原理和原因。感谢您的回复,我在PostExecute{eventText.setText+HTML;}上将该行添加到受保护的void中,但现在它什么都不做,因为什么都没有发生。。。没有返回任何内容,我没有收到任何错误。抱歉,没有看到评论的这一部分。您是否按照我的建议更改了doInBackground的返回声明?并验证HTML在doInBackgroundAh perfect中是否有值!我也不知道怎么回事,工作起来很有魅力,至少我离我原来的代码更近了。是的,你离我不远了。您只需要记住,您不能从后台线程更新UI。完全理解AsyncTask需要一些时间,至少对我来说是这样。我已经阅读了很多次文档,但是一旦你理解了,它就会变得更加顺利。谢谢你的回复,我在PostExecute{eventText.setText+HTML;}上向受保护的void添加了这一行,但是现在它什么都没有了,因为什么都没有发生。。。没有返回任何内容,我没有收到任何错误。抱歉,没有看到评论的这一部分。您是否按照我的建议更改了doInBackground的返回声明?并验证HTML在doInBackgroundAh perfect中是否有值!我也不知道怎么回事,工作起来很有魅力,至少我离我原来的代码更近了。是的,你离我不远了。您只需要记住,您不能从后台线程更新UI。完全理解AsyncTask需要一些时间,至少对我来说是这样。我已经阅读了很多次这些文件,但一旦你理解了,它就会顺利得多
public class eventupdate extends AsyncTask<String, Void, String> // change last param
public class eventupdate extends AsyncTask<String, Void, String>

 @Override
 protected void onPostExecute(String result) {
        super.onPostExecute(result);
         eventText.setText("" + result);
}

 @Override
    protected String doInBackground(String... url) {
   // do your work
   return HTML;