消息关闭
    暂无新消息!

新手,请教。小弟使用自定义Dialog和ExpandableListView 显示数据,但是却导致整个Activity闪退。
我思路是,使用Service 监听蓝牙BLE的广播的数据,然后Service通过Brodcast 的形式,将数据发送到Activity中,
然后,Activity的BroadcasrReciver 通过Hanler 显示对话框。 结果,就闪退了。。。。。

显示如下错误:
08-15 21:37:27.427 16027-16027/? I/art: Late-enabling -Xcheck:jni
08-15 21:37:27.517 16027-16027/com.ble W/System: ClassLoader referenced unknown path: /data/app/com.ble-1/lib/arm

这个问题困扰好久了,请指教。

代码如下:自定义对话框类

public class ShowDialg
{
    public static Dialog CreateShowListViewDialog(final Context context, String title, final BluetoothGattServiceAdapter bluetoothGattServiceAdapter)
    {
        LayoutInflater layoutInflater = LayoutInflater.from(context);
        View contentView = layoutInflater.inflate(R.layout.activity_dialog, null);

        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setView(contentView);
        builder.setTitle(title);
        final ExpandableListView listView = (ExpandableListView) contentView.findViewById(R.id.lv_dialog);
        try
        {
            listView.setAdapter(bluetoothGattServiceAdapter);
        }
        catch (Exception E)
        {
            E.printStackTrace();
        }
        return builder.create();
    }
}

广播接收

  private BroadcastReceiver mBluetoothLEBroadcaseReceiver = new BroadcastReceiver()
    {
        @Override
        public void onReceive(Context context, Intent intent)
        {
            String action = intent.getAction();
            switch (action)
            {
                //查找设备成功,填充LISTVIEW
                case BluetoothLEFinalStaticValue.BLUETOOTH_ACTION_START_DISCOVERY_DEVICE:
                    Log.d(TAG, "连接设备成功...");
                    addList(mBluetoothLeService.getBluetoothLESupportService());
                    break;
            }
        }
    };

addList() 方法

   public void addList(List<BluetoothGattService> bluetoothGattServiceList)
    {
        String uuid;
        String rwString = new String();
        String unknownServiceString = "Unknown service";
        String unknownCharaString = "Unknown characteristic";

        BluetoothGattService bluetoothGattService;
        BluetoothLEGattServiceJaveBean bluetoothLEGattServiceJaveBean;
        BluetoothLEGattCharacterJaveBean bluetoothLEGattCharacterJaveBean;
        BluetoothGattCharacteristic bluetoothGattCharacteristic;
        List<BluetoothGattCharacteristic> bluetoothGattCharacteristicList;

        for(int ik=0; ik<bluetoothGattServiceList.size(); ik++)
        {
            bluetoothLEGattServiceJaveBean = new BluetoothLEGattServiceJaveBean();

            bluetoothGattService = bluetoothGattServiceList.get(ik);
            bluetoothGattCharacteristicList = bluetoothGattService.getCharacteristics();

            uuid = bluetoothGattService.getUuid().toString();
            bluetoothLEGattServiceJaveBean.setmSeriveUUID(uuid);

            bluetoothLEGattServiceJaveBean.setmSeriveuuidStringName(SampleGattAttributes.lookup(uuid, unknownServiceString));

            //在一个Service里面包含多个特征值
            for(int jk=0; jk<bluetoothGattCharacteristicList.size(); jk++)
            {
                bluetoothLEGattCharacterJaveBean = new BluetoothLEGattCharacterJaveBean();
                bluetoothGattCharacteristic = bluetoothGattCharacteristicList.get(jk);

                int charaProp = bluetoothGattCharacteristic.getProperties();

                if ((charaProp & BluetoothGattCharacteristic.PROPERTY_READ) > 0)
                {
                    rwString = "可读 ";
                }

                if ((charaProp & BluetoothGattCharacteristic.PROPERTY_WRITE) > 0)
                {
                    rwString = rwString + "可写 ";
                }

                if ((charaProp & BluetoothGattCharacteristic.PROPERTY_NOTIFY) > 0)
                {
                    rwString = rwString + "可通知";
                }

                if(rwString.equals(""))
                {
                    rwString = "UnKonw properties = " + charaProp;
                }

                uuid = bluetoothGattCharacteristic.getUuid().toString();
                bluetoothLEGattCharacterJaveBean.setmCharacterUUID(uuid);
                bluetoothLEGattCharacterJaveBean.setmCaracteruuidStringName(SampleGattAttributes.lookup(uuid, unknownCharaString));
                bluetoothLEGattCharacterJaveBean.setmRWString(rwString);

                bluetoothLEGattServiceJaveBean.getBluetoothLEGattCharacterJaveBeanList().add(bluetoothLEGattCharacterJaveBean);

                Log.d("特征值 uuid = ", uuid);
                Log.d("character = " + charaProp, "rwString = " + rwString);

                rwString = "";
            }

            mListBluetoothLEGattServiceJaveBean.add(bluetoothLEGattServiceJaveBean);
            mBluetoothGattServiceAdapter.notifyDataSetChanged();
    
            Message msg = Message.obtain();
            msg.what = BluetoothLEFinalStaticValue.SHOW_DIALOG;
             mHandler.sendMessage(msg);
        }
    }



 public Handler mHandler = new Handler(){
        @Override
        public void handleMessage(Message msg)
        {
            switch (msg.what)
            {
                case BluetoothLEFinalStaticValue.SHOW_DIALOG:
                    if(!mIsCreted)
                    {
                        Log.d(TAG, "第一次显示.......");
                        mIsCreted = true;
                        mDialog = ShowDialg.CreateShowListViewDialog(DeviceControlActivity.this,  mTvDeviceName.getText().toString(), mBluetoothGattServiceAdapter);
                    }                 
                       mDialog.show();           
                    break;
            }
        }
    };



请问一个各位大神有没有遇过这种问题,小弟是新手,请指教,谢谢了。

2个回答

︿ 2
百度下,有一个以下的解决方法
http://blog.csdn.net/a5nan/article/details/51517

根据这个log找到了解决方案:android studio 2.0中使用了instant run功能,把这个功能关闭就ok了。因为instant run本身的机制影响了一些classloader的加载。