0

これがスタックトレースです..........パッケージをプライベートにしておきたいので、コードと同様に「削除済み」が数回表示されます。

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.*removed*.*removed*/com.*removed*.*removed*.List}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1768)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1784)
at android.app.ActivityThread.access$1500(ActivityThread.java:123)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:939)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3835)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at java.util.regex.Matcher.appendEvaluated(Matcher.java:135)
at java.util.regex.Matcher.appendReplacement(Matcher.java:115)
at java.util.regex.Matcher.replaceAll(Matcher.java:322)
at java.lang.String.replaceAll(String.java:1963)
at com.*removed*.*removed*.List.fillData(NoteList.java:100)
at com.*removed*.*removed*.List.onCreate(NoteList.java:31)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1722)
... 11 more

......そしてここに関連するコードがあります。ユーザーがリストアクティビティを開始するときに、前のリストからクリックしたアイテムに基づいた結果を表示するようにします。ホームページはリストであるため、リストアクティビティは基本的に、本の列名がホームページでクリックした名前と一致するすべてのエントリをデータベースで検索するクエリです。このメソッドは、リストリストビューにクエリの結果を「入力」します。

@SuppressWarnings("deprecation")
private void fillData() {

String[] args = {"woo"};

    for(int i = 0; i < args.length ; i++){
        args[i] = args[i].replaceAll("woo", getBook());}

    String[] projection = ............removed


    Cursor cursor = managedQuery(Provider.CONTENT_URI, projection,
            Database.COLUMN_BOOK + "=" + "?",
            args, null);

    String[] from = ............removed     
    int[] to = ...........removed


    adapter = new SimpleCursorAdapter(List.this, R.layout.note_row, cursor, from,
            to);

    setListAdapter(adapter); }

static String book;
public static String getBook() {return book;}
public static void setBook(String book) {List.book = book;}

ここのAdnはホームページからのコードです

public void onItemClick(AdapterView<?> adapter, View v,
        int position, long id) {
    final String[] choice = getResources().getStringArray(R.array.booknames);
       String book = choice[position];
       List.setBook(book);
   Intent x = new Intent(Home.this, List.class);
   Home.this.startActivity(x);

}

このアプリはすでに市場に出回っており、デバイスの約3%がこのNullポインター例外を取得しています。したがって、この方法は、私が期待していたように100%効果的ではありません。

私の最初の推測は、変数argsを正しく初期化していないため、ReplaceAllメソッドがまれにグリッチすることです。私の2番目の推測は、ゲッターとセッターを避け、バンドルを使用する必要があるということです。

このクエリを100%成功させるにはどうすればよいですか?

4

1 に答える 1

2

スタック トレースを見ると、問題の状況で が null を返す可能性が高いようです。getBook()

静的変数を使用して List アクティビティに情報を渡しますが、これは一般的にあまり良い考えではありません。それがエクストラ(バンドル)を渡すことです。

まれに、すべてのアプリケーションが強制終了され、再作成されることがあります。エクストラは再びアクティビティに渡されますbookが、その場合は null のままです。

于 2012-12-26T20:11:01.453 に答える