2

我是线程新手,不是 Java 中最先进的,但据我了解,以下内容应该可以正确运行,但它没有。我试过调整东西并阅读线程但无济于事。我尝试搜索,但我没有得到任何明确的答案。

代码:

public void getValue(final EditText input1) // 0 all three // 1 ask // 2 buy
{
    final Handler handler = new Handler();
    final Thread thread = new Thread() {
        public void run() {
            try {
                HttpClient httpClient = new DefaultHttpClient();
                HttpContext localContext = new BasicHttpContext();
                HttpGet httpGet = new HttpGet("http://finance.yahoo.com/d/quotes.csv?s="+input1.getText().toString()+"&f=abl1");
                HttpResponse response = null;
                try {
                    response = httpClient.execute(httpGet, localContext);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                final HttpResponse finalResponse = response;
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            textViews[2].setText("Last:Err2");
                            BufferedReader reader = new BufferedReader(
                                    new InputStreamReader(
                                            finalResponse.getEntity().getContent()
                                    ));
                            updateText( reader.readLine()); // pass data out
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                });
            } catch (final Exception e) {
                e.printStackTrace();
        }
    }

};
    thread.start();
}
4

1 回答 1

3
  1. 你打电话给getValue了吗?
  2. 如果是这样,你为什么说它没有运行?看起来应该如此。
  3. 在 Android 中,这应该由 AsyncTask 完成。AsyncTask 是一个类,它会自动为您启动一个线程,然后在任务完成时在 UI 线程上运行第二段代码。这摆脱了笨拙的 Handler 构造。
于 2013-06-27T08:26:36.650 回答