0

所以我有一个我已经研究了一段时间的程序。但是,我坚持使用XmlPullParser的方法,该方法被调用getAllXml()。它在 a 的doInBackGround()方法内部AsyncTaskAsyncTask是一个名为 Activity 的子类 FormActivity。当我运行代码时。

这是代码应该做的事情。在用户"CloverField"从以前的活动中选择之后。调用的 xml 文件cloverfield_in.xmlsetContentView(). 然后用户在同一个 xml 文件上按下一个按钮。单击此按钮执行被AsyncTask调用的MadLIbAsyncTask. 这AsyncTask里面只有两个方法,thedoInBackground()onPostExecute(). (我不知道我是否需要onPreExecute()......在其中我会有一个进度条......但如果没有这种方法,我认为程序不应该像它那样崩溃)。

在该doInBackground()方法中,我调用了名为getAllXml(). 此方法用于XmlPullParser搜索当前 xml( cloverfield_in.xml) 并从单个 .xml 文件中捕获文本TextView。的代码getAllXml()如下。

public void getAllXml() throws XmlPullParserException, IOException{
    Activity activity = this;

    Resources res  = activity.getResources();
    XmlResourceParser xpp = res.getXml(R.layout.cloverfield_in);
        int eventtype = xpp.getEventType();
        while (eventtype != XmlPullParser.END_DOCUMENT){
            if (eventtype == XmlPullParser.START_DOCUMENT){


            }
            else if (eventtype == XmlPullParser.START_TAG){
                if (xpp.getName() == "TextView"){
                    while (eventtype != XmlPullParser.END_TAG){
                        if (eventtype == XmlPullParser.TEXT){
                        stringViews[0] =  xpp.getText(); 
                        }else {}
                        eventtype = xpp.next();

                    }
                }else {}
            }
            else if (eventtype == XmlPullParser.END_TAG){

            }
            else if (eventtype == XmlPullParser.TEXT){
            }
            eventtype = xpp.next();
        }
}

在调试过程中,我的程序经常返回 aNullPointerException或 a RunTimeException。我相信在这段代码中是问题所在。我在AsyncTask不存在该getAllXml()方法的情况下进行了测试,一切正常。最终,程序应该从cloverfield_in.xml文件中获取文本并将其显示在一个名为cloverfield_out.xml.

对于所有内容的完整回顾,这里是FormActivity.class.

package com.muirconsult.mymadlibs;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.Layout;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AutoCompleteTextView;
import android.widget.TextView;

public class FormActivity extends Activity{

        String [] textFields;
    String Choice;
    int thisLayout;
    View thatLayout ;
    String[] stringViews;
    ViewGroup anskey;
    Activity activity = this;
    String test;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent objIntent = getIntent();
        Choice = objIntent.getStringExtra("selection");

        if (Choice.equals("Cloverfield")) {
            setContentView(R.layout.cloverfield_in);
            thisLayout = (R.layout.cloverfield_in);
            thatLayout = (View)findViewById(R.layout.cloverfield_out);

        }
        if (Choice.equals("Fargo"))  {
            setContentView(R.layout.fargo_in);
        }
        if(Choice.equals("Ying Yang In This Thang (Ying Yang Twins)")){
            setContentView(R.layout.ying_yang_twins_in_this_thang_in);

               }


    }

public void getAllXml() throws XmlPullParserException, IOException{
    Activity activity = this;

    Resources res  = activity.getResources();
    XmlResourceParser xpp = res.getXml(R.layout.cloverfield_in);
        int eventtype = xpp.getEventType();
        while (eventtype != XmlPullParser.END_DOCUMENT){
            if (eventtype == XmlPullParser.START_DOCUMENT){


            }
            else if (eventtype == XmlPullParser.START_TAG){
                if (xpp.getName() == "TextView"){
                    while (eventtype != XmlPullParser.END_TAG){
                        if (eventtype == XmlPullParser.TEXT){
                               stringViews[0] =  xpp.getText(); 
                        }else {}
                        eventtype = xpp.next();

                    }
                }else {}
            }
            else if (eventtype == XmlPullParser.END_TAG){

            }
            else if (eventtype == XmlPullParser.TEXT){
            }
            eventtype = xpp.next();
        }
}





 class MadLibAsyncTask extends AsyncTask<Void, Void, Void>{
    String testString;
    int thisLayout;

    protected Void doInBackground(Void... params) {

    try{
        getAllXml();
    }catch (XmlPullParserException e){
        e.printStackTrace();
    }catch (IOException e){
        e.printStackTrace();
    }

        return null;
    }

    protected void onPostExecute (Void result){
        String str = "let's go to the park";
        String newstr;

        setContentView(R.layout.cloverfield_out);
        TextView outview = (TextView)findViewById(R.id.outview);
        str = (String) outview.getText();
        newstr = str.replaceFirst("film",stringViews[0]);
        outview.setText(newstr);

    }
 }








     public void onClick(View view) {
                MadLibAsyncTask mad = new MadLibAsyncTask();
        mad.execute();


     }

}

此外,最重要的是...... logcat 看起来像这样:

08-10 23:04:50.064: W/dalvikvm(1415): threadid=1: thread exiting with uncaught exception >>>  (group=0x40a71930)

08-10 23:04:50.145: E/AndroidRuntime(1415): FATAL EXCEPTION: main

08-10 23:04:50.145: E/AndroidRuntime(1415): java.lang.NullPointerException

08-10 23:04:50.145: E/AndroidRuntime(1415):     at java.util.regex.Matcher.appendEvaluated>(Matcher.java:130)

08-10 23:04:50.145: E/AndroidRuntime(1415):     at java.util.regex.Matcher.appendReplacement(Matcher.java:110)

08-10 23:04:50.145: E/AndroidRuntime(1415):     at java.util.regex.Matcher.replaceFirst(Matcher.java:299)

08-10 23:04:50.145: E/AndroidRuntime(1415):     at java.lang.String.replaceFirst(String.java:1793)
08-10 23:04:50.145: E/AndroidRuntime(1415):     at com.muirconsult.mymadlibs.FormActivity$MadLibAsyncTask.onPostExecute(FormActivity.java:116)

08-10 23:04:50.145: E/AndroidRuntime(1415):     at     com.muirconsult.mymadlibs.FormActivity$MadLibAsyncTask.onPostExecute(FormActivity.java:1)

08-10 23:04:50.145: E/AndroidRuntime(1415):     at android.os.AsyncTask.finish(AsyncTask.java:631)

08-10 23:04:50.145: E/AndroidRuntime(1415):     at android.os.AsyncTask.access$600>\ (AsyncTask.java:177)

08-10 23:04:50.145: E/AndroidRuntime(1415):     at     android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)

08-10 23:04:50.145: E/AndroidRuntime(1415):     at android.os.Handler.dispatchMessage(Handler.java:99)

08-10 23:04:50.145: E/AndroidRuntime(1415):     at android.os.Looper.loop(Looper.java:137)

08-10 23:04:50.145: E/AndroidRuntime(1415):     at android.app.ActivityThread.main(ActivityThread.java:5041)

08-10 23:04:50.145: E/AndroidRuntime(1415):     at java.lang.reflect.Method.invokeNative(Native Method)

08-10 23:04:50.145: E/AndroidRuntime(1415):     at java.lang.reflect.Method.invoke(Method.java:511)

08-10 23:04:50.145: E/AndroidRuntime(1415):     at     com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)

08-10 23:04:50.145: E/AndroidRuntime(1415):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)

08-10 23:04:50.145: E/AndroidRuntime(1415):     at dalvik.system.NativeStart.main(Native Method)
4

0 回答 0