2

AsyncTask でデータベースからデータをフェッチし、それが null の場合は、警告テキストをトーストしたいと考えています。AsyncTask で試してみましたが、ワーカー スレッドで呼び出されないことがわかりました。ここに私の doInBackground メソッドがあります:

protected String doInBackground(Boolean... params) {
        String result = null;
        StringBuilder sb = new StringBuilder();
        try {   
            HttpClient httpclient = new DefaultHttpClient();
            HttpGet httppost = new HttpGet( "http://191.162.2.235/getProducts.php?login=1&user_name="+UserName+"&user_pass="+Password);
            HttpResponse response = httpclient.execute(httppost);
            if (response.getStatusLine().getStatusCode() != 200) {
                Log.d("MyApp", "Server encountered an error");
            }
            BufferedReader reader = new BufferedReader(
                    new InputStreamReader(
                            response.getEntity().getContent(), "UTF8"));  
            sb = new StringBuilder();
            sb.append(reader.readLine() + "\n");
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            result = sb.toString();
         if (  result == null  )        {
        //   Toast.makeText(getApplicationContext(), "You entered wrong values.", Toast.LENGTH_LONG).show(); 
             asyncTask.cancel(true);
            Intent  inte=new Intent(MainActivity.this, MainActivity.class);
            inte.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
            inte.addCategory(Intent.CATEGORY_HOME);
                startActivity(inte);                                
            }
        } 
        catch (Exception e) {
            Log.e("log_tag", "Error converting result " + e.toString());
                             }
        return result;
    }

タスクをキャンセルし、コードで新しいインテントを作成しました。あなたはそれらを気にしません。Toast.makeText.. 行が表示されます。もちろん、このように試してみましたが、エラーが発生します。これどうやってするの?AsyncTask で呼び出されない場合、どのように呼び出す必要がありますか?

4

4 に答える 4

2

トースト メッセージは、メイン/UI スレッドで呼び出す必要があります。
これを解決する方法は次のとおりです。

  • Toast を AsyncTask の onPostExecute 内に配置します
  • 以下を使用して、UI スレッドで実行される通常の Toast のラッパーを作成します。

例:

activity.runOnUiThread(new Runnable() {

@Override
public void run() {
     Toast.make...
}
});
于 2013-10-10T13:57:22.517 に答える
2

これを使用したい場合はhandler 、コードは次のようになります

アクティビティクラスでメンバー変数として宣言 Handler handler = new Handler();し、tost を表示するために以下を使用します

handler.post( new Runnable(){
   public void run(){
Toast.makeText(getApplicationContext(), "You entered wrong values.",Toast.LENGTH_LONG).show(); 
       }
});
于 2013-10-10T13:58:21.037 に答える