java - Android:如何在主要 Activity 的变量中存储值(value)?

标签 java android xml parsing android-asynctask

我想在从网络上解析一个 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 说: enter image description here

最佳答案

在 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/

相关文章:

android - 阻止 ' Enter key ' 触发 TextWatcher

c# - 使用 .NET 将日志写入 XML 文件

java - 如果应用程序不存在,在java spring应用程序中使用什么来自动创建数据库或新表?

java - 如何防止 CsvMapper 在输出 CSV 中包含无法识别的字段?

java - 如何嵌套 for 循环来打印多维数组?

java - 使用 android pdf writer lib 对元音变音进行编码

android - 如何将数据库更改更新到已安装的应用程序

java - EventListeners 和自定义 gui 组件

c# - 无法使用 xmlns 值解析 XML

xml - 使用 xslt :analyze-string to add acronyms to HTML