2013-09-29 56 views
0

我正在開發一個應用程序,我必須連接到藍牙設備。如何使用ListView和ArrayAdapter將內容添加到ListView中?

當我點擊btn_discover Button時,它會調用BroadcastReceiver並掃描新的藍牙設備並顯示在TextView上。

當我使用TextView時,我可以在Textview上看到藍牙設備。

現在我想將TextView更改爲ListView

但它總是崩潰。當BroadcastReceiveronReceive(),我寫:

newDevicelistArrayAdapter.add(device.getName()); 

這是我的Java代碼:

package com.example.bttest; 

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.Set; 

import com.example.bttest.R.menu; 

import android.os.Bundle; 
import android.app.Activity; 
import android.bluetooth.BluetoothAdapter; 
import android.bluetooth.BluetoothDevice; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 

public class Main extends Activity { 


    public BluetoothAdapter mBluetoothAdapter; 
    private static final int REQUEST_SELECT_DEVICE = 1; 
    public Button btn_scan; 
    public Button btn_discover; 
    public TextView pair_list; 
    public TextView scan_list; 
    public ListView scan_list_1; 
    public Set<BluetoothDevice> pairedDevices; 
    public ArrayAdapter<String> newDevicelistArrayAdapter; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 


     btn_scan = (Button)findViewById(R.id.btn_scan); 
     btn_discover = (Button)findViewById(R.id.btn_discover); 
     pair_list = (TextView)findViewById(R.id.pair_list); 
     scan_list = (TextView)findViewById(R.id.scan_list); 


     newDevicelistArrayAdapter = new ArrayAdapter<String>(this, R.layout.main); 
     scan_list_1 = (ListView)findViewById(R.id.scan_list_1); 
     scan_list_1.setAdapter(newDevicelistArrayAdapter); 



     mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 
     if (mBluetoothAdapter == null) 
     { 
      Toast.makeText(this, "No support bluetooth", Toast.LENGTH_SHORT).show(); 
      return; 
     }else if(mBluetoothAdapter != null)  { 
      Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
      startActivityForResult(enableBtIntent, REQUEST_SELECT_DEVICE); 
     } 


     //******************scan按鈕動作-將已配對過的藍芽裝置列出來 
     btn_scan.setOnClickListener(new OnClickListener() {  
      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       pairedDevices = mBluetoothAdapter.getBondedDevices(); 
       if(pairedDevices.size()>0) { 
        for(BluetoothDevice bDevice : pairedDevices) { 
         pair_list.append(bDevice.getName() + "\n" + bDevice.getAddress() + "\n" + bDevice.getBondState() + "\n"); 
        } 
       } 
      } 
     }); 
     //******************scan按鈕動作結束 


     btn_discover.setOnClickListener(new OnClickListener() {  
      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); 
       registerReceiver(mReceiver, filter); 
       filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); 
       registerReceiver(mReceiver, filter); 
       mBluetoothAdapter.startDiscovery(); 

      } 
     }); 




    } 





    private final BroadcastReceiver mReceiver = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      // TODO Auto-generated method stub 
      String action = intent.getAction(); 
      if (BluetoothDevice.ACTION_FOUND.equals(action)) { 
       BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
       scan_list.append(device.getName() + "\n" + device.getAddress() + "\n"); 
       newDevicelistArrayAdapter.add(device.getName()); 

      } 
     } 
    }; 

    protected void onDestroy() { 

     super.onDestroy(); 
     if (mBluetoothAdapter != null) { 
      mBluetoothAdapter.cancelDiscovery(); 
     } 
     unregisterReceiver(mReceiver); 
    } 




    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

} 

它的任何錯誤,當我使用ListView和ArrayAdapter?

+0

'但它總是crash' - 那麼請張貼從logcat的堆棧跟蹤,讓我們知道是什麼錯誤。 – Simon

回答

0

替換您BroadcastReceiveronReceive()本:

public void onReceive(Context context, Intent intent) { 
    // TODO Auto-generated method stub 
    String action = intent.getAction(); 
    if (BluetoothDevice.ACTION_FOUND.equals(action)) { 
     BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
     scan_list.append(device.getName() + "\n" + device.getAddress() + "\n"); 
     newDevicelistArrayAdapter.notifyDataSetChanged(); 
    } 
}