从互联网获取数据时冻结的应用程序

问题描述

| 我有一个问题,我确定它确实很容易解决,但是我仍在开始开发应用程序,因此我认为您可以为我提供帮助。 我有一个带有货币转换器的应用程序,当我按下按钮进行转换时,它会冻结,同时它从互联网上获取数据,然后在几秒钟后恢复正常。这是代码
   public void capturaConversao(String m1,String m2) throws ClientProtocolException,IOException {
        BufferedReader resp = null;
        endereco = \"http://download.finance.yahoo.com/d/quotes.csv?s=\" + m1
                + m2 + \"=X&f=sl1d1t1ba&e=.csv\";
        try {
            HttpClient client = new DefaultHttpClient();
            HttpGet method = new HttpGet(endereco);
            HttpResponse statusCode = client.execute(method);
            resp = new BufferedReader(new InputStreamReader(statusCode
                    .getEntity().getContent()));
            StringBuffer sb = new StringBuffer(\"\");
            String line = \"\";
            while ((line = resp.readLine()) != null) {
                sb.append(line);
            }
            resp.close();
            String result = sb.toString();
            String[] values = result.split(\",\");
            conversion = values[1];
            nextstep++;

        } finally {
            if (resp != null) {
                try {
                    resp.close();
                } catch (IOException e) {
                    e.printstacktrace();
                    Toast.makeText(getBaseContext(),\"Não foi possível se conectar à internet.\",Toast.LENGTH_SHORT).show();
                }
            }
        }
    }
    

解决方法

        AsyncTask是几乎所有UI线程问题的解决方案。 :) 这是一个简短的教程。     ,        您可能是从UI线程调用的,您不应该这样做。因为UI线程忙于连接到Internet,所以它使UI锁定。这是进行此类呼叫的教程。     ,        您的UI线程的可用周期已被HTTP操作所占用。用
Thread
AsyncTask
分开     ,        是的,我也同意使用AsyncTask解决方案,因为它被称为无痛线程,所以用户无需理会线程管理。 对于您的情况,只需在doInBackground()内部调用capturaConversao()方法(即在doInBackground方法内部执行从Web进行的所有数据获取操作),然后在onPostExecute()内部调用display方法(即在内部执行所有显示操作,例如显示获取的值) listview或textview)。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...