Java Android上的simple xml serial.read()抛出StackOverflowerError
我正在尝试学习在Java中使用xml(Android平台,使用Eclipse和simple-xml-2.5.2)。 我一直在“Training.java”中的“serial.read”行中看到一个奇怪的java.lang.StackOverflower错误。 你能帮我解决这个问题吗?这是xml定义错误吗 我包括以下资料来源: 文件beacons.java:Java Android上的simple xml serial.read()抛出StackOverflowerError,java,android,simple-framework,Java,Android,Simple Framework,我正在尝试学习在Java中使用xml(Android平台,使用Eclipse和simple-xml-2.5.2)。 我一直在“Training.java”中的“serial.read”行中看到一个奇怪的java.lang.StackOverflower错误。 你能帮我解决这个问题吗?这是xml定义错误吗 我包括以下资料来源: 文件beacons.java: package com.marcos.training; import java.util.List; import org.simple
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;
}
}
文件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);
}
}
}
package com.marcos.training;
导入org.simpleframework.xml.Serializer;
导入org.simpleframework.xml.core.Persister;
导入android.app.Activity;
导入android.os.Bundle;
导入android.util.Log;
导入android.widget.TextView;
导入android.content.res.Resources.NotFoundException;
公开课培训扩展活动{
私有最终静态字符串标记=Training.class.getCanonicalName();
文本查看文本状态;
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textStatus=(TextView)findViewById(R.id.textStatus);
Serializer serial=新的Persister();
试一试{
信标我的信标;
试一试{
myBeacons=serial.read(Beacons.class,getResources().openRawResource(R.xml.Beacons));
Log.i(标记,“信标数量:+myBeacons.getSize());
}捕获(未发现异常){
Log.d(标签“未捕获异常”,e);
返回;
}捕获(例外e){
Log.d(标签“未捕获异常”,e);
返回;
}
int len=myBeacons.getSize();
对于(int i=0;i
文件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>
01:02:03:04:05:06
02:03:04:05:06:07
03:04:05:06:07:08
04:05:06:07:08:09
通过将XML文件放入资源的XML目录中,Android构建系统假定您希望将其编译成二进制格式,这就满足了您的要求。因此,当您访问该输入流,然后尝试将其视为文本XML表示时,它就不起作用了。你有两个选择
res\raw
目录中getResources().getXml(R.xml.beacons)
API为特定的xml创建一个pull解析器有关详细信息,请参阅。谢谢!这真是一个很好的解决方案!你救了我一天:-)
<?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>