1

私は現在、論文で動作するコードを持っていますが、関数/メソッド/オブジェクトを使用してクリーンアップすることにしました(それらを何と呼ぶか​​はよくわかりません)が、それらを整理した後、起動するたびにアプリがクラッシュします。私は本当に問題が何であるかを知りません。

メイン画面に開始ボタンと終了ボタンが表示されます。STARTを押すと、アプリに「残念ながら論文が停止しました」と表示されます。

私のコードは次のようになります:

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 {
   }
}

私がしたことは、変数の宣言(私の変数はグローバルに宣言されています)や初期化を行わずに、文字列をまっすぐに処理することでした。また、returnステートメントも入れませんでした。

私のコードは、それらの関数/メソッド/オブジェクトがまだないときに機能していました。

私の長い投稿について申し訳ありません。それをよりよく説明する方法がわからない。あなたが私を助けてくれることを願っています。前もって感謝します!

LOGCAT:

>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

次の行で v が null であるため、NullPointerException が発生しているようです。

    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 に答える