【问题标题】:Android Java: string returns empty while it's not?Android Java:字符串返回空而不是?
【发布时间】:2015-05-25 11:19:11
【问题描述】:

我正在尝试在 Android 中获取带有 HttpClient() 的网页的 HTML 代码。 getbodyHtml 返回空,而在输出中我看到 HTML 代码打印得很好。我做错了什么?

class GetResult implements Runnable {
    public volatile String bodyHtml;
    public volatile boolean finished = false;

    @Override
    public void run() {
        finished = false;
        HttpClient httpClient = new DefaultHttpClient();
        try {
            String myUri = "http://google.com";

            HttpGet get = new HttpGet(myUri);

            HttpResponse response = httpClient.execute(get);

            bodyHtml = EntityUtils.toString(response.getEntity());
            //return bodyHtml;

            finished = true;
            System.out.println(bodyHtml);


        } catch (IOException e) {
            System.out.println(e.getMessage());
        }


    }

    public String getbodyHtml(){
        return bodyHtml;
    }
}

还有这个:

String rs = "";
GetResult foo = new GetResult();
new Thread(foo).start();
if (foo.finished = true){
   rs = foo.getbodyHtml();
}

edittext2.setText(rs);

【问题讨论】:

  • if (foo.finished = true){ 但事实并非如此。

标签: java android httpclient


【解决方案1】:

因为你做检查的时候Foo还没有完成,所以不要进入if。要更正此调用 foo.join(),如下所示:

                String rs = "";
                GetResult foo = new GetResult();
                new Thread(foo).start();
                foo.join(); // will wait till foo finish

                rs = foo.getbodyHtml();


            edittext2.setText(rs);

【讨论】:

  • @murdoch 如果您只是在调用 start 之后立即调用 finish,那么将其设为线程是没有意义的。此外,您不应在主 UI 线程上调用完成,因为这会使您的 UI 无响应。您应该为此使用 AsyncTask。
猜你喜欢
  • 2014-07-28
  • 1970-01-01
  • 2020-10-14
  • 1970-01-01
  • 2011-11-15
  • 2020-10-15
  • 2019-09-15
  • 2011-06-22
相关资源
最近更新 更多