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

时间:2011-05-30 07:29:29

标签: java android xml parsing android-asynctask

我想在从网络解析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");
    }
}

logcat说: enter image description here

1 个答案:

答案 0 :(得分:1)

在MainAct活动中存储值

首先确保在使用Async任务时未完成MainAct活动。因为您希望将值存储为MainAct的实例变量

避免分配如下的值

MainAct.this.videoNames[MainAct.this.videoCount] = dataItem.getName();

最好在MainAct中创建一个方法,在那里设置videoNames的值。但是使用静态方法或使用该方法的实例在AsyncTask类中调用该方法。

由于 迪帕克