2016-09-21 8 views
0

私は最初にsetTextのコード部分を持っています。その後、Toastにしてから、Bluetooth経由で接続しようとしています。問題は、私のsetTextToastsが接続された後にだけ表示されることです。トーストは同時に表示されません

Toastsの代わりにLog.iを入れようとしましたが、同時に表示されました。

誰かが理由と方法を同時に説明することができますToasts

コード:

........ 

else if (BluetoothDevice.ACTION_ACL_DISCONNECTED.equals(action)) {  
    tvDevices.setText(""); 
    Toast.makeText(getApplicationContext(), "Lost connection!", Toast.LENGTH_SHORT).show(); 
    connect(btDevice, ConstantsVariables.reconnectionAttempts); 
} 

public void connect(BluetoothDevice bt, int attempts){ 
    Toast.makeText(getApplicationContext(), "Trying to connect...", Toast.LENGTH_SHORT).show(); 
    if(attempts > 0){ 
     for(int i = 1; i <= ConstantsVariables.reconnectionAttempts; i++){ 
      ConnectThread thread = new ConnectThread(bt); 
      boolean connectVar = thread.connect(); 
      if(connectVar){ 
       break; 
      } 
     } 
    } 
} 

....... 

public boolean connect() { 
    BA.cancelDiscovery(); 
    try { 
     mSocket.connect(); 
    } catch (IOException e) { 
     Log.d("CONNECTTHREAD","Could not connect: " + e.toString()); 
     try { 
      mSocket.close(); 
     } catch (IOException exception){} 
     return false; 
    } 
    return true; 
} 

答えて

0

接続が試みられている間、あなたはUIスレッドをブロックしている可能性があります。接続コードをバックグラウンドスレッドまたはAsyncTaskに移動し、AsyncTaskのコールバックでUIの変更を処理してください。

編集:また、コンテキストgetApplicationContext()がToastに渡されているとあいまいです。あなたは活動中ですか?その場合、アクティビティのコンテキスト(つまり、アプリケーションのコンテキストではなくthis)を指すだけです。

+0

いいえ、私は 'getApplicationContext()'について理解しました。しかし、バックグラウンドスレッドとその作り方について説明してください。 – Tryam

+0

私は、 'AsyncTask.execute(new Runnable(){ @Overrideのような構造を作るべきであることを理解しました public void run(){} })';ありがとう! – Tryam

+0

ハンドラでAsyncTaskまたはバックグラウンドスレッドを使用できますが、両方を同時に使用することはできません。いずれかを使用する方法の最も簡単な例は、http://www.vogella.com/tutorials/AndroidBackgroundProcessing/article.html#exampleです。 –

関連する問題