android把信息存到xml,将项目从列表保存到xml文件中的问题Android

我已经实现了一个能够检测BLE信号并使用适配器将其显示为列表的应用程序。显示BLE设备后,我将每个列表的特征保存到xml文件中。当应用程序检测到设备时,它可以完美保存;我现在遇到的问题是,如果它没有检测到任何信号,或者换句话说,列表中没有任何项目,当它尝试将其保存到xml文件中时,应用程序会崩溃并关闭。我试图通过检查列表中项目的数量来解决问题。如果它是0,它会执行代码的“else”部分,如果它大于0,它将保存如下所示的列表。但它仍然造成同样的问题,我不知道该做什么。将项目从列表保存到xml文件中的问题Android

这里是我用来保存到一个XML文件中的代码:

public class Save {

/**

* Save the last BLE List in a XML File

*/

private BleDevicesAdapter leDeviceListAdapter;

Save(BleDevicesAdapter BLEList) {

leDeviceListAdapter = BLEList;

}

public void savedata() throws FileNotFoundException{

String filename = "BLEDevices.xml";

long dateutc = System.currentTimeMillis();

long finaldateutc = 62135596800000L + dateutc;

double frequency = 1/(0.001*SCAN_PERIOD);

long period = 200;

FileOutputStream fos = null;

File sdCard = Environment.getExternalStorageDirectory();

File directory = new File(sdCard.getAbsolutePath()+"/Mis archivos");

directory.mkdirs();

File file= new File(directory, filename);

if (leDeviceListAdapter.getDevice(0) != null) {

int size = leDeviceListAdapter.getCount();

try {

fos = new FileOutputStream(file);

//fos= openFileOutput(filename, Context.MODE_WORLD_READABLE);

XmlSerializer serializer = Xml.newSerializer();

serializer.setOutput(fos, "UTF-8");

serializer.startDocument(null, Boolean.valueOf(true));

serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);

serializer.startTag("", "root");

serializer.startTag("", "measurement");

serializer.attribute("", "time", String.valueOf(finaldateutc));

//serializer.attribute("", "scan period", String.valueOf(period));

for(int j = 0 ; j < size ; j++) {

BluetoothDevice devices = leDeviceListAdapter.getDevice(j);

Integer signal = leDeviceListAdapter.getRSSI(j);

serializer.startTag("", "device");

serializer.attribute("", "rssi", String.valueOf(signal));

serializer.attribute("", "mac", devices.getAddress());

serializer.attribute("", "name", devices.getName());

serializer.endTag("", "device");

}

//ObjectOutputStream out = new ObjectOutputStream(fos);

//out.writeObject(leDeviceListAdapter);

//out.close();

serializer.endDocument();

serializer.flush();

fos.close();

Toast.makeText(DeviceScanActivity.this, R.string.list_saved, Toast.LENGTH_SHORT).show();

} catch (FileNotFoundException e){

e.printStackTrace();

} catch (IOException e){

e.printStackTrace();

}

}

else {

try {

fos = new FileOutputStream(file);

//fos= openFileOutput(filename, Context.MODE_WORLD_READABLE);

XmlSerializer serializer = Xml.newSerializer();

serializer.setOutput(fos, "UTF-8");

serializer.startDocument(null, Boolean.valueOf(true));

serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);

serializer.startTag("", "root");

serializer.startTag("", "measurement");

serializer.attribute("", "time", String.valueOf(finaldateutc));

serializer.endDocument();

serializer.flush();

fos.close();

Toast.makeText(DeviceScanActivity.this, R.string.list_saved, Toast.LENGTH_SHORT).show();

} catch (FileNotFoundException e){

e.printStackTrace();

} catch (IOException e){

e.printStackTrace();

}

}

}

}

这也是问题的日志:

03-18 12:51:17.081: D/BluetoothAdapter(18804): stopLeScan()

03-18 12:51:17.086: D/AndroidRuntime(18804): Shutting down VM

03-18 12:51:17.086: W/dalvikvm(18804): threadid=1: thread exiting with uncaught exception (group=0x42027700)

03-18 12:51:17.091: E/AndroidRuntime(18804): FATAL EXCEPTION: main

03-18 12:51:17.091: E/AndroidRuntime(18804): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0

03-18 12:51:17.091: E/AndroidRuntime(18804): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)

03-18 12:51:17.091: E/AndroidRuntime(18804): at java.util.ArrayList.get(ArrayList.java:308)

03-18 12:51:17.091: E/AndroidRuntime(18804): at com.example.newblescan.adapter.BleDevicesAdapter.getDevice(BleDevicesAdapter.java:50)

03-18 12:51:17.091: E/AndroidRuntime(18804): at com.example.newblescan.DeviceScanActivity$Save.savedata(DeviceScanActivity.java:346)

03-18 12:51:17.091: E/AndroidRuntime(18804): at com.example.newblescan.DeviceScanActivity.onOptionsItemSelected(DeviceScanActivity.java:131)

03-18 12:51:17.091: E/AndroidRuntime(18804): at android.app.Activity.onMenuItemSelected(Activity.java:2640)

03-18 12:51:17.091: E/AndroidRuntime(18804): at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:1171)

03-18 12:51:17.091: E/AndroidRuntime(18804): at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)

03-18 12:51:17.091: E/AndroidRuntime(18804): at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)

03-18 12:51:17.091: E/AndroidRuntime(18804): at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)

03-18 12:51:17.091: E/AndroidRuntime(18804): at com.android.internal.view.menu.ActionMenuView.invokeItem(ActionMenuView.java:630)

03-18 12:51:17.091: E/AndroidRuntime(18804): at com.android.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:200)

03-18 12:51:17.091: E/AndroidRuntime(18804): at android.view.View.performClick(View.java:4475)

03-18 12:51:17.091: E/AndroidRuntime(18804): at android.view.View$PerformClick.run(View.java:18786)

03-18 12:51:17.091: E/AndroidRuntime(18804): at android.os.Handler.handleCallback(Handler.java:730)

03-18 12:51:17.091: E/AndroidRuntime(18804): at android.os.Handler.dispatchMessage(Handler.java:92)

03-18 12:51:17.091: E/AndroidRuntime(18804): at android.os.Looper.loop(Looper.java:137)

03-18 12:51:17.091: E/AndroidRuntime(18804): at android.app.ActivityThread.main(ActivityThread.java:5493)

03-18 12:51:17.091: E/AndroidRuntime(18804): at java.lang.reflect.Method.invokeNative(Native Method)

03-18 12:51:17.091: E/AndroidRuntime(18804): at java.lang.reflect.Method.invoke(Method.java:525)

03-18 12:51:17.091: E/AndroidRuntime(18804): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209)

03-18 12:51:17.091: E/AndroidRuntime(18804): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025)

03-18 12:51:17.091: E/AndroidRuntime(18804): at dalvik.system.NativeStart.main(Native Method)

03-18 12:51:17.161: D/BluetoothAdapter(18804): stopLeScan()

03-18 12:51:17.161: D/BluetoothAdapter(18804): stopLeScan()

谁能帮我解决这个问题,或者放正确的答案?请帮忙!!!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值