Java 从自定义对象的ArrayList访问方法
我有一个问题,我认为这是一个概念错误 我创建了一个java类,当调用构造函数时,会创建另一个自定义对象 第一次使用param start==true运行代码,并且Java 从自定义对象的ArrayList访问方法,java,android,arraylist,Java,Android,Arraylist,我有一个问题,我认为这是一个概念错误 我创建了一个java类,当调用构造函数时,会创建另一个自定义对象 第一次使用param start==true运行代码,并且 questions = new ArrayList<Question>(); questions.add(this.question); 问题在于,当代码到达时,调用writexml方法并将arraylist作为参数发送给 for( Question q : questions ){
questions = new ArrayList<Question>();
questions.add(this.question);
问题在于,当代码到达时,调用writexml方法并将arraylist作为参数发送给
for( Question q : questions ){
serializer.startTag(null, "question");
serializer.attribute(null,"grupo" , q.getGroup());
serializer.attribute(null,"question" , q.getQuestion());
serializer.text(q.getAnswer());
serializer.endTag(null, "question");
}
当代码尝试执行serializer.attribute(null,“grupo”,q.getGroup())时;q、 getGroup()失败,并转到捕获包含空消息的异常
我会做错什么
非常感谢
这是完整的课程
package...
inports...
class AsyncLoadXML extends AsyncTask<Boolean, Integer, String> {
private Context ctx;
private List<Question> questions;
private Question question;
String TAG;
public AsyncLoadXML(Context c, String g, String p, String r) {
this.ctx = c;
question =new Question();
question.setGroup(g);
question.setQuestion(p);
question.setAnswer(r);
}
@Override
protected String doInBackground(Boolean... start) {
if(!start[0]){
try { questions = readXML(ctx);
}
catch (IOException e) { e.printStackTrace(); }
}
else {questions = new ArrayList<Question>();
questions.add(this.question);
}
try { writeXML(ctx, questions); }
catch (IOException e) { e.printStackTrace(); }
return "done";
}
protected void onPostExecute(String result) {
if(!result.equals(""))
Toast.makeText(this.ctx, result, Toast.LENGTH_LONG).show();
}
public String writeXML(Context ctx, List<Question> questions) throws IOException{
FileOutputStream fout = null;
try {
fout = ctx.openFileOutput("answers.xml", Context.MODE_PRIVATE);
} catch (FileNotFoundException e) {
return e.getMessage();
}
XmlSerializer serializer = Xml.newSerializer();
try {
serializer.setOutput(fout, "UTF-8");
serializer.startDocument(null, true);
serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
serializer.startTag(null, "questions");
for( Question q : questions ){
serializer.startTag(null, "question");
serializer.attribute(null,"grupo" , q.getGroup());
serializer.attribute(null,"question" , q.getQuestion());
serializer.text(q.getAnswer());
serializer.endTag(null, "question");
}
serializer.endTag(null, "questions");
serializer.endDocument();
serializer.flush();
fout.close();
return "done";
} catch (Exception e) {
return e.getMessage();
}
}
public List<Question> readXML(Context ctx) throws IOException{
FileInputStream fin = null;
questions= new ArrayList<Question>();
try {
fin = ctx.openFileInput("answers.xml");
} catch (Exception e) {
}
XmlPullParser parser = Xml.newPullParser();
try {
parser.setInput(fin, "UTF-8");
int event = parser.next();
while(event != XmlPullParser.END_DOCUMENT) {
if(event == XmlPullParser.START_TAG) {
question = new Question();
for(int i = 0; i < parser.getAttributeCount(); i++) {
if(parser.getAttributeName(i) == "group") question.setGroup(parser.getAttributeValue(i));
else if(parser.getAttributeName(i) == "question") question.setQuestion(parser.getAttributeValue(i));
}
}
if(event == XmlPullParser.TEXT && parser.getText().trim().length() != 0)
{question.setAnswer(parser.getText());
questions.add(question);
}
if((event == XmlPullParser.END_TAG))
{
Log.d(TAG, "</"+ parser.getName() + ">");}
event = parser.next();
}
fin.close();
} catch (Exception e) {
e.printStackTrace();
}
return questions;
}
}
请发布错误和stacktrace以及类问题的代码检查此-。然后检查您的
readXML
方法。@RohitJain比较字符串时,应按照您的建议使用equals
,而不是使用=
运算符。这就是说,这看起来与他得到的异常情况无关。没有关于他得到什么例外的信息。虽然我同意字符串比较可能不是这里真正的问题。@RohitJain是的。他提供的唯一信息是从serializer.attribute(null,“grupo”,q.getGroup())抛出异常代码>
package...
inports...
class AsyncLoadXML extends AsyncTask<Boolean, Integer, String> {
private Context ctx;
private List<Question> questions;
private Question question;
String TAG;
public AsyncLoadXML(Context c, String g, String p, String r) {
this.ctx = c;
question =new Question();
question.setGroup(g);
question.setQuestion(p);
question.setAnswer(r);
}
@Override
protected String doInBackground(Boolean... start) {
if(!start[0]){
try { questions = readXML(ctx);
}
catch (IOException e) { e.printStackTrace(); }
}
else {questions = new ArrayList<Question>();
questions.add(this.question);
}
try { writeXML(ctx, questions); }
catch (IOException e) { e.printStackTrace(); }
return "done";
}
protected void onPostExecute(String result) {
if(!result.equals(""))
Toast.makeText(this.ctx, result, Toast.LENGTH_LONG).show();
}
public String writeXML(Context ctx, List<Question> questions) throws IOException{
FileOutputStream fout = null;
try {
fout = ctx.openFileOutput("answers.xml", Context.MODE_PRIVATE);
} catch (FileNotFoundException e) {
return e.getMessage();
}
XmlSerializer serializer = Xml.newSerializer();
try {
serializer.setOutput(fout, "UTF-8");
serializer.startDocument(null, true);
serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
serializer.startTag(null, "questions");
for( Question q : questions ){
serializer.startTag(null, "question");
serializer.attribute(null,"grupo" , q.getGroup());
serializer.attribute(null,"question" , q.getQuestion());
serializer.text(q.getAnswer());
serializer.endTag(null, "question");
}
serializer.endTag(null, "questions");
serializer.endDocument();
serializer.flush();
fout.close();
return "done";
} catch (Exception e) {
return e.getMessage();
}
}
public List<Question> readXML(Context ctx) throws IOException{
FileInputStream fin = null;
questions= new ArrayList<Question>();
try {
fin = ctx.openFileInput("answers.xml");
} catch (Exception e) {
}
XmlPullParser parser = Xml.newPullParser();
try {
parser.setInput(fin, "UTF-8");
int event = parser.next();
while(event != XmlPullParser.END_DOCUMENT) {
if(event == XmlPullParser.START_TAG) {
question = new Question();
for(int i = 0; i < parser.getAttributeCount(); i++) {
if(parser.getAttributeName(i) == "group") question.setGroup(parser.getAttributeValue(i));
else if(parser.getAttributeName(i) == "question") question.setQuestion(parser.getAttributeValue(i));
}
}
if(event == XmlPullParser.TEXT && parser.getText().trim().length() != 0)
{question.setAnswer(parser.getText());
questions.add(question);
}
if((event == XmlPullParser.END_TAG))
{
Log.d(TAG, "</"+ parser.getName() + ">");}
event = parser.next();
}
fin.close();
} catch (Exception e) {
e.printStackTrace();
}
return questions;
}
}
public class Question {
private String group;
private String question;
private String answer;
public Question(){
}
public Question(String g, String p, String r){
group = g;
question = p;
answer = r;
}
public String getGroup(){
return group;
}
public String getQuestion(){
return question;
}
public String getAnswer(){
return answer;
}
public void setGroup(String g){
group = g;
}
public void setQuestion(String p){
question = p;
}
public void setAnswer(String r){
answer = r;
}
}