Tôi chỉ mới bắt đầu thử nghiệm với Android Development với SimpleXML và nghĩ rằng nó sẽ hoạt động khá tốt cho đến khi tôi bị đánh. Đoạn mã dưới đây tạo ra một ngoại lệ củaSimpleXML Constructor Exception - Không thể tạo Inner Class
W/System.err (665): org.simpleframework.xml.core.ConstructorException: Không thể xây dựng lớp bên
Tôi đã nhìn qua những câu hỏi trên các lớp bên trong và nghĩ rằng tôi hiểu tại sao bạn sẽ sử dụng chúng (không phải là của tôi nhất thiết là cố ý) nhưng mặc dù di chuyển mã của tôi vòng để thử và tránh sử dụng tôi vẫn còn một chút khó khăn và sẽ đánh giá cao sự giúp đỡ nào.
Source Code:
public class InCaseOfEmergencyMedAlertAllergiesActivity extends Activity {
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Serializer serializer = new Persister();
InputStream xmlstream = this.getResources().openRawResource(R.raw.sample_data_allergies);
try {
medalertdata allergyObject = serializer.read(medalertdata.class, xmlstream);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
setContentView(R.layout.allergies);
}
@Root
public class medalertdata {
@ElementList
private List<allergy> allergyList;
public List getAllergies() {
return allergyList;
}
}
@Root
public class allergy{
@Element
private String to;
@Element
private Boolean medical;
@Element
private String notes;
public allergy(String to, Boolean medical, String notes){
this.to = to;
this.medical = medical;
this.notes = notes;
}
public String getTo() {
return to;
}
public Boolean getMedical() {
return medical;
}
public String getNotes() {
return notes;
}
}
}
Với các tập tin XML tham chiếu cấu trúc như:
<?xml version="1.0" encoding="ISO-8859-1"?>
<medalertdata>
<allergy>
<to>Penicillin</to>
<medical>true</medical>
<notes></notes>
</allergy>
<allergy>
<to>Bee Stings</to>
<medical>false</medical>
<notes>Sample</notes>
</allergy>
</medalertdata>
Là vấn đề với cách tôi đã chú thích các lớp SimpleXML hoặc nơi tôi đang cố gắng để đọc chúng? Cảm ơn!
Cảm ơn bạn đã trả lời. Việc xóa ký hiệu @Root không may là không có hiệu lực. Hiện tại cả hai lớp được khai báo trong lớp Activity sau khi onCreate() đã bị đóng - chúng có nằm trong các tệp khác nhau không? – Rory
Có, tất cả các lớp công khai bình thường trong Java phải được khai báo trong tệp của riêng chúng. Một tùy chọn khác là làm cho chúng 'tĩnh' (không biết cách SimpleXML xử lý việc này). –
Có chúng trong cùng một tệp chắc chắn là vấn đề =) – Rory