1

android3.2で問題なく動作するタブレット用のアプリを作成しました。今私はそれをアンドロイド4+で動作させようとしていますが、どういうわけかコードのごく一部が動作していません。私は初心者なので、コードが少し前の例から取られたので、何が機能していないのか理解できません。

クラッシュしているコードの部分は、フィルタリングしたいデータベースからどのフィールドを選択するかを選択するスピナーに基づいて、好きなものを書くことができる単なるテキストボックスです。これは3.2で問題なく動作します(そして、同じコードが、Androidの両方のバージョンの別のフラグメントで使用している他のスピナーでも動作しています)。

まず、logcatを使用します。

11-12 18:33:00.428: E/AndroidRuntime(8140): FATAL EXCEPTION: main
11-12 18:33:00.428: E/AndroidRuntime(8140): java.lang.NullPointerException
11-12 18:33:00.428: E/AndroidRuntime(8140):     at dvgvsc.vscdvg.Fragmentsearchlist.ifacesearch(Fragmentsearchlist.java:159)
11-12 18:33:00.428: E/AndroidRuntime(8140):     at dvgvsc.vscdvg.Fragmentsearchlist.onPrepareOptionsMenu(Fragmentsearchlist.java:103)
11-12 18:33:00.428: E/AndroidRuntime(8140):     at android.app.FragmentManagerImpl.dispatchPrepareOptionsMenu(FragmentManager.java:1865)
11-12 18:33:00.428: E/AndroidRuntime(8140):     at android.app.Activity.onPreparePanel(Activity.java:2463)
11-12 18:33:00.428: E/AndroidRuntime(8140):     at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:438)
11-12 18:33:00.428: E/AndroidRuntime(8140):     at com.android.internal.policy.impl.PhoneWindow.invalidatePanelMenu(PhoneWindow.java:761)
11-12 18:33:00.428: E/AndroidRuntime(8140):     at android.app.Activity.invalidateOptionsMenu(Activity.java:2552)
11-12 18:33:00.428: E/AndroidRuntime(8140):     at android.app.FragmentManagerImpl.invalidateOptionsMenu(FragmentManager.java:1914)
11-12 18:33:00.428: E/AndroidRuntime(8140):     at android.app.Fragment.setHasOptionsMenu(Fragment.java:898)
11-12 18:33:00.428: E/AndroidRuntime(8140):     at dvgvsc.vscdvg.Fragmentsearchlist.onCreateView(Fragmentsearchlist.java:47)
11-12 18:33:00.428: E/AndroidRuntime(8140):     at dvgvsc.vscdvg.OrdenesFragment.onCreateView(OrdenesFragment.java:65)
11-12 18:33:00.428: E/AndroidRuntime(8140):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:828)
11-12 18:33:00.428: E/AndroidRuntime(8140):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1032)
11-12 18:33:00.428: E/AndroidRuntime(8140):     at android.app.BackStackRecord.run(BackStackRecord.java:622)
11-12 18:33:00.428: E/AndroidRuntime(8140):     at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1382)
11-12 18:33:00.428: E/AndroidRuntime(8140):     at android.app.FragmentManagerImpl$1.run(FragmentManager.java:426)
11-12 18:33:00.428: E/AndroidRuntime(8140):     at android.os.Handler.handleCallback(Handler.java:605)
11-12 18:33:00.428: E/AndroidRuntime(8140):     at android.os.Handler.dispatchMessage(Handler.java:92)
11-12 18:33:00.428: E/AndroidRuntime(8140):     at android.os.Looper.loop(Looper.java:137)
11-12 18:33:00.428: E/AndroidRuntime(8140):     at android.app.ActivityThread.main(ActivityThread.java:4514)
11-12 18:33:00.428: E/AndroidRuntime(8140):     at java.lang.reflect.Method.invokeNative(Native Method)
11-12 18:33:00.428: E/AndroidRuntime(8140):     at java.lang.reflect.Method.invoke(Method.java:511)
11-12 18:33:00.428: E/AndroidRuntime(8140):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
11-12 18:33:00.428: E/AndroidRuntime(8140):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
11-12 18:33:00.428: E/AndroidRuntime(8140):     at dalvik.system.NativeStart.main(Native Method)

そして、これがクラッシュしているコードの一部です((Line: text_search.addTextChangedListener(new TextWatcher() { ))

private final void ifacesearch() {


        /** search box that is used on the searches, using a listerner which will move the cursor based on the user imput. */

        /*EditText text_search = (EditText)getActivity().findViewById(R.id.text_search);
        text_search.addTextChangedListener(new TextWatcher() {
            public void afterTextChanged(Editable text) {
                if (text.length() > 0) {
                    adapter.changeCursor(vscdvgActivity._db.defcursor(TABLA, SEARCH_FILTER, text.toString()));
                }else{
                    adapter.changeCursor(vscdvgActivity._db.defcursor(TABLA, null, null));
                }
            }
            public void beforeTextChanged(CharSequence text, int start, int before, int count) {                    
            }
            public void onTextChanged(CharSequence text, int start, int before, int count) {
            }
        });*/



        /** add to the spinner the db fields /*

        /*Spinner spinner_filter = (Spinner)getActivity().findViewById(R.id.spinner_filter);
        ArrayAdapter<String> spinner_adapter = new ArrayAdapter<String>(
                getActivity(),
                android.R.layout.simple_spinner_dropdown_item,
                COLUMN_FILTER[1]);
        spinner_filter.setAdapter(spinner_adapter);
        spinner_filter.setOnItemSelectedListener(new OnItemSelectedListener() {
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                SEARCH_FILTER = COLUMN_FILTER[0][position];
            }
            public void onNothingSelected(AdapterView<?> arg0) {

            }
        });*/

クラッシュする可能性のあるアイデアはありますか?

前もって感謝します。

4

1 に答える 1

0

ヌルポインタ例外は、何かが初期化されなかったことを意味します。この場合、私はそれがであると強く疑っていますtext_search。でログアウトしてみてLog.d('TAG',text_search)、実際にnullかどうかを確認してください。何が起こっているのかは、上の行のファイル名にタイプミスがあるかEditText text_search = (EditText)getActivity().findViewById(R.id.text_search);、レイアウトを膨らませていないことが原因だと思います。

于 2012-11-13T11:38:04.203 に答える