Android:如何在主要活动的变量中存储值?

问题描述

| 我想从网上解析一个xml文件后在主活动变量上存储一些值,我有以下代码,它可以运行,但随后会强制关闭:
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\");
    }
}
日志说:     

解决方法

        在MainAct活动中存储价值 首先,请确保在使用异步任务时MainAct活动未完成。因为您要将值存储为MainAct的实例变量 避免像下面那样分配值
MainAct.this.videoNames[MainAct.this.videoCount] = dataItem.getName();
最好在MainAct中创建一个方法,在该方法中将值设置为
videoNames
。但是,请使用静态方法或该方法的实例在AsyncTask类中调用该方法。 谢谢 迪帕克     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...