2016-06-10 55 views
0

我在不同的類中有我的MainActivity,ConnectThread和ConnectedThread。Android將Thread中的數據從單獨的java類發送到UI線程

我正在偵聽來自ConnectedThread中Bluetoothmodule的大量數據。

我有Broadcastreciever在我的主線程像這樣:

final BroadcastReceiver bReciever = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
     String message = intent.getStringExtra("data"); 

     if(BluetoothDevice.ACTION_FOUND.equals(action)){    // Bluetooth discovery result found 
      BTArrayAdapter_found_filter.clear();    //Remove Duplicates 
      BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
      BTArrayAdapter_found.add(device.getName()+"\n"+device.getAddress()); 
      BTArrayAdapter_found.notifyDataSetChanged(); 

      for(int i = 0;i< BTArrayAdapter_found.getCount();i++){  // Iterate original Arrayadapter for filtering 
       String filter = "RCD"; 

       if(BTArrayAdapter_found.getItem(i).toString().toLowerCase().contains(filter.toLowerCase())){ 

        BTArrayAdapter_found_filter.add(BTArrayAdapter_found.getItem(i)); 
        BTArrayAdapter_found_filter.notifyDataSetChanged(); 


       } 
      } 
     } 
     if(message!=null) 
     textview_terminal.setText(message); 


    } 
}; 

我會聽消息,並把它傳遞給一個TextView。另一個只是藍牙部分,這裏不相關。

我有這樣的ConnectedThread的意圖:

public void sendData(){ 
    Intent sendDataIntent = new Intent("SendData_EVENT"); 
    sendDataIntent.putExtra("data",passData); 
    LocalBroadcastManager.getInstance().sendBroadcast(sendDataIntent); 

} 

但由於該線程有一個活動沒有聯繫的Broadcastmanagers的getInstance不起作用。

我試圖用這個例子:LINK

我有很多的例子來看看,我不認爲處理程序是對我最好的方法。

我怎樣才能成功地從我的後臺線程發送數據?

通過發送發送getApplicationContext()來ConnectedThread構造函數和傳遞,爲的getInstance(上下文)解決

+0

你註冊解決** BroadcastReceiver **? – Alexander

+0

是的,我有LocalBroadcastManager.getInstance(this).registerReceiver(bReciever,new IntentFilter(「SendData_EVENT」));我的問題是LocalBroadcastmanager.getinstante()我不能在那裏放置任何參數,因爲ConnectedThread只是一個沒有上下文或活動的線程,如果我理解正確的話。 – VikingPingvin

+0

可能是您可以將邏輯從**線程**移動到**服務**。它可以幫助你。不要忘記服務在UI線程中默認工作。 – Alexander

回答

0

通過發送發送getApplicationContext()來ConnectedThread構造函數和傳遞,爲的getInstance(上下文)

相關問題