我想在从网络上解析一个 xml 文件后在主 Activity 的变量上存储一些值,我有以下代码,它运行但随后强制关闭:
private class parseXMLAsync extends AsyncTask <String, String, String>{
protected void onPreExecute(){
super.onPreExecute();
showDialog(PARSE_XML);
}
@Override
protected String doInBackground(String... strings) {
try{
Engagia.this.url.openConnection();
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
ExampleHandler myExampleHandler = new ExampleHandler();
xr.setContentHandler(myExampleHandler);
xr.parse(new InputSource(Engagia.this.url.openStream()));
List<ParsedExampleDataSet> parsedExampleDataSet = myExampleHandler.getParsedData();
Iterator i;
i = parsedExampleDataSet.iterator();
ParsedExampleDataSet dataItem;
while(i.hasNext()){
dataItem = (ParsedExampleDataSet) i.next();
String folder = dataItem.getParentTag();
if( folder == "Videos" ){
MainAct.this.videoNames[MainAct.this.videoCount] = dataItem.getName();
MainAct.this.videoCount++;
}
}
}catch(Exception e){
Log.e(LOG_TAG, e.toString());
}
return null;
}
@Override
protected void onPostExecute(String lenghtOfFile) {
try{
if( mProgressDialog.isShowing() ){
dismissDialog(PARSE_XML);
}
//String str_contents = null;
/*
for(String str : MainAct.this.videoNames ){
str_contents = str_contents + str + "\n";
}
*/
}catch(Exception e){
Log.e(LOG_TAG, e.toString());
}
PopIt("Parsing Done", "STR CONTENTS >> " + Engagia.this.videoNames[0], "Denied");
}
}
logcat 说:
最佳答案
在 MainAct Activity 中存储值
首先确保在使用异步任务时 MainAct Activity 没有完成。因为您想将值存储为 MainAct 的实例变量
避免像下面这样赋值
MainAct.this.videoNames[MainAct.this.videoCount] = dataItem.getName();
最好在 MainAct 中创建一个方法,它将在那里设置 videoNames
的值。但是可以使用静态方法或使用该方法的实例在 AsyncTask 类中调用该方法。
谢谢 迪帕克
关于java - Android:如何在主要 Activity 的变量中存储值(value)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6173418/