1

我的论文现在有一个工作代码,但我决定使用函数/方法/对象(不确定如何称呼它们)来清理它,但是在组织它们之后,我的应用程序每次启动时都会崩溃。我真的不知道问题是什么。

主屏幕显示开始和退出按钮。当我按开始时,应用程序显示“不幸的是论文已停止”。

我的代码是这样的:

public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.items, menu);
    View v = (View) menu.findItem(R.id.search).getActionView();
    final EditText txtSearch = ( EditText ) v.findViewById(R.id.txt_search);
    txtSearch.setOnEditorActionListener(new OnEditorActionListener() {

        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            String curtextArray = txtSearch.getText().toString();
            char[] curletters = curtextArray.toCharArray();
            char[] curenhancedLetters = curtextArray.toCharArray();

//probably, problem here on Stemming stem
            Stemming stem = new Stemming(curtextArray, curletters, curenhancedLetters);
            AsyncTaskRunner newTask = new AsyncTaskRunner(enhancedStem);

// and probably, problem is here on the stem.<x process>;
            stem.removeApostrophe();
            stem.vowelMarking();
            stem.shortSyllable();
            if (continueStem == 1){
                stem.region1();
                stem.region2();
                stem.shortWord();
                stem.step0();
                stem.step1a();
                stem.step1b();
                newTask.execute();
            }
            return false;
        };
    });     
    return super.onCreateOptionsMenu(menu);

}

这是我的词干课程

public class Stemming {
    String textArray;
    char[] letters;
    char[] enhancedLetters;


    public Stemming (String curtextArray, char[] curletters, char[] curenhancedLetters){
        this.textArray = curtextArray;
        this.letters = curletters;
        this.enhancedLetters = curenhancedLetters;
    }

    public Stemming(){

    }

     public void removeApostrophe(){
       ...processes here
     }
     public void vowelMarking(){
       ...processes here
     }
     public void shortSyllable(){
       ...processes here
     }

    public void region1(){
       ...processes here
     }
     public void region2(){
       ...processes here
     }
     public void shortWord(){
       ...processes here
     }
     public void step0(){
       ...processes here
     }
     public void step1a(){
       ...processes here
     }
     public void step1b(){
       ...processes here
     }
}

}

我有一个关于它为什么会崩溃的理论。这种方法可行吗?(伪代码):

public class Stemming {
String result;
String sample = "A A A A A";

public void changeAtoB{

    //do process to convert all As to Bs making String sample = "B B B B B"
    result = sample;
}

   public void changeBtoC{
   //do process to convert all Bs to Cs making String result = "C C C C C"
   result = result;
}

   ... so on {
   }
}

我所做的是直接处理字符串,而不做任何变量声明(我的变量是全局声明的)或初始化。而且我也没有放任何退货声明。

我的代码在它仍然没有那些功能/方法/对象的时候可以工作。

对不起我的长帖子。不知道如何更好地解释它。我希望你能帮助我。先感谢您!

日志猫:

>E/AndroidRuntime(11007): FATAL EXCEPTION: main
E/AndroidRuntime(11007): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.atienzaerni.thesis/com.atienzaerni.thesis.secondactivity}: java.lang.NullPointerException
E/AndroidRuntime(11007): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1891)
E/AndroidRuntime(11007): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992)
E/AndroidRuntime(11007): at android.app.ActivityThread.access$600(ActivityThread.java:127)
E/AndroidRuntime(11007): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158)
E/AndroidRuntime(11007): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(11007): at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(11007): at android.app.ActivityThread.main(ActivityThread.java:4441)
E/AndroidRuntime(11007): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(11007): at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(11007): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
E/AndroidRuntime(11007): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
E/AndroidRuntime(11007): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(11007): Caused by: java.lang.NullPointerException
E/AndroidRuntime(11007): at android.app.Activity.findViewById(Activity.java:1794)
E/AndroidRuntime(11007): at com.atienzaerni.thesis.secondactivity.<init>(secondactivity.java:54)
E/AndroidRuntime(11007): at java.lang.Class.newInstanceImpl(Native Method)
E/AndroidRuntime(11007): at java.lang.Class.newInstance(Class.java:1319)
E/AndroidRuntime(11007): at android.app.Instrumentation.newActivity(Instrumentation.java:1023)
E/AndroidRuntime(11007): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1882)
E/AndroidRuntime(11007): ... 11 more
I/Process(11007): Sending signal. PID: 11007 SIG: 9

(顺便说一句,我正在使用我的手机。不是模拟器。如果这有所作为)

4

1 回答 1

0

看起来你得到了 NullPointerException 因为 v 在这一行是空的:

    final EditText txtSearch = ( EditText ) v.findViewById(R.id.txt_search);

这可能是由此处的菜单项操作视图返回 null 引起的:

    View v = (View) menu.findItem(R.id.search).getActionView();

您应该在代码中设置操作视图而不是调用 getActionView,或者确保在菜单 XML 中设置了正确的操作视图。如果没有看到您的菜单 XML,就很难判断问题是否出在 XML 中。

于 2013-03-06T15:47:02.813 回答