Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用ListView和ArrayAdapter将内容添加到ListView中?_Android_Android Listview_Bluetooth - Fatal编程技术网

Android 如何使用ListView和ArrayAdapter将内容添加到ListView中?

Android 如何使用ListView和ArrayAdapter将内容添加到ListView中?,android,android-listview,bluetooth,Android,Android Listview,Bluetooth,我正在开发一个必须连接到蓝牙设备的应用程序 当我点击btn_discover按钮时,它将调用BroadcastReceiver,扫描新的蓝牙设备并显示在文本视图上 当我使用TextView时,我可以在TextView上看到蓝牙设备 现在我想将文本视图更改为列表视图 但它总是崩溃。在BroadcastReceiver的onReceive()中,我写道: newDevicelistArrayAdapter.add(device.getName()); 这是我的Java代码: package com

我正在开发一个必须连接到蓝牙设备的应用程序

当我点击btn_discover
按钮时,它将调用
BroadcastReceiver
,扫描新的蓝牙设备并显示在
文本视图上

当我使用
TextView
时,我可以在TextView上看到蓝牙设备

现在我想将
文本视图
更改为
列表视图

但它总是崩溃。在
BroadcastReceiver
onReceive()
中,我写道:

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

}
package com.example.bttest;
导入java.util.ArrayList;
导入java.util.HashMap;
导入java.util.Set;
导入com.example.bttest.R.menu;
导入android.os.Bundle;
导入android.app.Activity;
导入android.bluetooth.BluetoothAdapter;
导入android.bluetooth.bluetooth设备;
导入android.content.BroadcastReceiver;
导入android.content.Context;
导入android.content.Intent;
导入android.content.IntentFilter;
导入android.view.Menu;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.ListView;
导入android.widget.TextView;
导入android.widget.Toast;
公共类主要扩展活动{
公共蓝牙适配器mBluetoothAdapter;
专用静态最终整数请求\u选择\u设备=1;
公共按钮btn\U扫描;
公共按钮btn_discover;
公共文本视图对列表;
公共文本视图扫描列表;
公共列表视图扫描列表1;
公共集对设备;
公共阵列适配器新设备适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn_扫描=(按钮)findViewById(R.id.btn_扫描);
btn_discover=(按钮)findviewbyd(R.id.btn_discover);
pair_list=(TextView)findViewById(R.id.pair_list);
扫描列表=(文本视图)findViewById(R.id.scan\u列表);
newDeviceListarayAdapter=新阵列适配器(this,R.layout.main);
scan_list_1=(ListView)findViewById(R.id.scan_list_1);
扫描列表1.setAdapter(NewDeviceListarayAdapter);
mBluetoothAdapter=BluetoothAdapter.getDefaultAdapter();
if(mBluetoothAdapter==null)
{
Toast.makeText(这是“不支持蓝牙”,Toast.LENGTH_SHORT).show();
返回;
}else if(mBluetoothAdapter!=null){
Intent enablebintent=新意图(BluetoothAdapter.ACTION\u REQUEST\u ENABLE);
startActivityForResult(启用BTINTENT、请求和选择设备);
}
//******************扫描按鈕動作-將已配對過的藍芽裝置列出來
btn_scan.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
pairedDevices=mBluetoothAdapter.getBondedDevices();
如果(pairedDevices.size()>0){
用于(蓝牙设备b设备:pairedDevices){
pair_list.append(bDevice.getName()+“\n”+bDevice.getAddress()+“\n”+bDevice.getBondState()+”\n”);
}
}
}
});
//******************扫描按鈕動作結束
btn_discover.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
IntentFilter筛选器=新的IntentFilter(BluetoothDevice.ACTION\u已找到);
registerReceiver(mrReceiver,过滤器);
过滤器=新的IntentFilter(BluetoothAdapter.ACTION\u DISCOVERY\u FINISHED);
registerReceiver(mrReceiver,过滤器);
mBluetoothAdapter.startDiscovery();
}
});
}
专用最终广播接收器mReceiver=新广播接收器(){
@凌驾
公共void onReceive(上下文、意图){
//TODO自动生成的方法存根
String action=intent.getAction();
if(BluetoothDevice.ACTION_FOUND.equals(ACTION)){
BluetoothDevice=intent.getParcelableExtra(BluetoothDevice.EXTRA\u设备);
扫描列表.append(device.getName()+“\n”+device.getAddress()+”\n”);
newDeviceListarayAdapter.add(device.getName());
}
}
};
受保护的空onDestroy(){
super.ondestory();
if(mBluetoothAdapter!=null){
mBluetoothAdapter.cancelDiscovery();
}
未注册接收人(mReceiver);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.main,menu);
返回true;
}
}

使用ListView和ArrayAdapter时是否有任何错误?

将您的
广播接收器的
onReceive()
替换为以下内容:

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

但它总是崩溃
-然后请从logcat发布堆栈跟踪,以便我们知道错误是什么。