2011-06-22 11 views
1

私はそれが本当に解決するのは簡単だと確信していますが、私はまだアプリを開発し始めているので、私を助けてくれると思っていました。 私はそれに通貨コンバータを持っているアプリを持っています。そして、私はボタンを押して変換を取得すると、インターネットからデータを取得している間にフリーズし、数秒後に元の状態に戻ります。コードは次のとおりです。アプリインターネットからデータを取得するときにフリーズする

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(); 
       } 
      } 
     } 
    } 

答えて

1

AsyncTaskは、ほぼすべてのUIスレッドの問題を解決するソリューションです。 :) ここに短いtutorialがあります。

+0

ありがとうございました!これはセットアップと学習が本当に簡単です!私のアプリに完璧に取り組んだ!私は本当にスレッドの作業について学ぶ必要がありますが、今のところAsyncTaskは仕事をしました! – Thpramos

0

これはUIスレッドから呼び出される可能性があります。すべきではありません。 UIスレッドがインターネットに接続中であるため、UIがロックされます。 Here's a tutorial for making such a call

+0

チュートリアルの男のためのThaanks! AsyncTaskを使って作業をうまくやった理由は他にもありました...しかし、確かに私はスレッドの作業について学ぶ必要があり、このチュートリアルはとても良いスタートです! – Thpramos

0

あなたのUIスレッドの利用可能なサイクルは、HTTPアクションによって大きく変化しています。 ThreadまたはAsyncTask

0

はい私はAsyncTaskソリューションにも同意しています。これはPainless Threadingとして知られているので、ユーザーはスレッド管理について気にする必要はありません。あなたのケースでは

、ちょうどコールdoInBackground内部capturaConversao()メソッド()(すなわち、すべてのデータは、doInBackgroundメソッド内のWebからの操作を取得します)とonPostExecute(内部の表示方法を呼び出す)(すなわち行いますlistviewまたはtextviewの中で表示された値を表示するようなすべての表示操作)。

関連する問題