gpt4 book ai didi

java - 在 Android simple-xml 上,serial.read() 会抛出 StackOverflowError

转载 作者:行者123 更新时间:2023-12-02 08:18:48 39 4
gpt4 key购买 nike

我正在尝试学习在Java中使用xml(Android平台,使用Eclipse和simple-xml-2.5.2)。我在“Training.java”的“serial.read”行中不断收到奇怪的 java.lang.StackOverflowError 错误。你能帮忙解决这个问题吗?是不是xml定义错误?

我包含以下来源:

文件 beacons.java:

package com.marcos.training;

import java.util.List;
import org.simpleframework.xml.Element;
import org.simpleframework.xml.ElementList;

@Element
public class Beacons {
@ElementList(inline=true)
private List<Beacon> list;

@Element
private String id;

public String getId() {
return id;
}

public Integer getSize() {
return list.size();
}

public List<Beacon> getList() {
return list;
}
}

文件 Beacon.java:

package com.marcos.training;

import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.Element;
import org.simpleframework.xml.Root;

@Root
public class Beacon {

@Attribute
protected String ssid;

@Element
protected String bssid;

public String getSsid() {
return ssid;
}

public String getBssid() {
return bssid;
}
}

文件Training.java:

package com.marcos.training;

import org.simpleframework.xml.Serializer;
import org.simpleframework.xml.core.Persister;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.content.res.Resources.NotFoundException;

public class Training extends Activity {
private final static String TAG = Training.class.getCanonicalName();
TextView textStatus;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

textStatus = (TextView) findViewById(R.id.textStatus);

Serializer serial = new Persister();

try {
Beacons myBeacons;
try {
myBeacons = serial.read(Beacons.class, getResources().openRawResource(R.xml.beacons));
Log.i(TAG, "Number of Beacons: " + myBeacons.getSize());
} catch (NotFoundException e) {
Log.d(TAG, "Uncaught exception", e);
return;
} catch (Exception e) {
Log.d(TAG, "Uncaught exception", e);
return;
}

int len = myBeacons.getSize();
for (int i = 0; i < len; i++) {
Beacon b = myBeacons.getList().get(i);
textStatus.append("Beacon " + (i+1) + "\n");
textStatus.append(" SSID : " + b.getSsid() + "\n");
textStatus.append(" BSSID : " + b.getBssid() + "\n");
textStatus.append("\n");;
}
} catch (Exception e) {
Log.d(TAG, "Uncaught exception", e);
}
}
}

文件 beacons.xml:

<?xml version="1.0" encoding="utf-8"?>
<beacons id="1">
<beacon ssid="north">
<bssid>01:02:03:04:05:06</bssid>
</beacon>
<beacon ssid="east">
<bssid>02:03:04:05:06:07</bssid>
</beacon>
<beacon ssid="south">
<bssid>03:04:05:06:07:08</bssid>
</beacon>
<beacon ssid="west">
<bssid>04:05:06:07:08:09</bssid>
</beacon>
</beacons>

最佳答案

通过将 XML 文件放入资源的 XML 目录中,Android 构建系统会假设您希望将其编译为二进制格式,并且它会强制您执行。因此,当您访问该输入流并尝试将其视为文本 XML 表示形式时,它是行不通的。您有 2 个选择。

  1. 将 XML 文件移至 res\raw 目录中。
  2. 将其保留在原来的位置并使用 getResources().getXml(R.xml.beacons) API 并为您的特定 XML 创建拉式解析器。

参见this link了解更多详情。

关于java - 在 Android simple-xml 上,serial.read() 会抛出 StackOverflowError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5858807/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com