Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更改片段和使用回调时的NullPointerException_Java_Android_Android Fragments_Nullpointerexception_Callback - Fatal编程技术网

Java 更改片段和使用回调时的NullPointerException

Java 更改片段和使用回调时的NullPointerException,java,android,android-fragments,nullpointerexception,callback,Java,Android,Android Fragments,Nullpointerexception,Callback,我在更改片段方面有一个问题,我使用操作栏中的微调器来完成此操作,有时还使用AlertDialog中的按钮。当我按下按钮时,我有空点异常。 这是我的接口回调代码: public interface Callback { public void load(String name); } 这是我的第一个片段的代码,我在OnCreateOptionMenu中使用微调器: private Callback callback; @Override public void onAttach

我在更改片段方面有一个问题,我使用操作栏中的微调器来完成此操作,有时还使用AlertDialog中的按钮。当我按下按钮时,我有空点异常。 这是我的接口回调代码:

public interface Callback {
    public void load(String name);
}
这是我的第一个片段的代码,我在OnCreateOptionMenu中使用微调器:

private Callback callback;

@Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        Log.d("TAG", "onAttach");
        try {
        callback = (Callback) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString() + " must implement interface");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        callback = null;
    }

public void onCreateOptionsMenu(Menu menu, MenuInflater inflate) {
        menu.clear();
        inflate.inflate(R.menu.kfu, menu);
        spinner = (Spinner) menu.findItem(R.id.action_spinner).getActionView()
                .findViewById(R.id.actionbar_spinner_change_map);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity()
                .getBaseContext(),
                android.R.layout.simple_spinner_dropdown_item, actions);
        spinner.setAdapter(adapter);
        spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> parent, View view,
                    int position, long id) {
                Log.d("POSITION", "Position is = "+position);
                switch (position) {
                case 1: 
                    if (parent.getItemAtPosition(position).equals("VKNews")) {
                //      Log.d("Tag", callback.toString()+" "+ (callback == null) + " " + parent.getItemAtPosition(position));
                        callback.load("VKNews"); //305 line
                    }   
                }   
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                // TODO Auto-generated method stub

            }
        });
    }
我的活动:

public class GeneralActivity extends Activity implements Callback {
...
    @Override
    public void load(String name) {
        FragmentTransaction transaction = getFragmentManager()
                .beginTransaction();
        Log.d("TAG", "transaction = " + transaction + " "
                + (transaction == null));
        if (name.equals("KFUNews")) {
            transaction.replace(R.id.general_fragment, kfu);
            transaction.commit();
            invalidateOptionsMenu();
        } else {
            transaction.replace(R.id.general_fragment, vkfrag);
            transaction.commit();
            invalidateOptionsMenu();
        }
    }
}
更新:它在Android 4.2.2和4.3、4.4上不起作用有三种可能:

  • 在事件激发之前不会调用onAttach(),并且从不设置
    回调
  • 调用了onAttach(),但为
    activity
  • 在事件发生之前的某个时间点调用detach()

  • 该活动可能实现了错误的接口。回调是众多接口的名称。确保为接口使用唯一的名称或更改
    GeneralActivity extends活动实现回调


    GeneralActivity extends活动实现了ru.fosslabs.mobilestudent.fragment.KFUFragment.Callback

    您的活动实现了回调接口吗?是的。公共类GeneralActivity扩展活动实现回调{
    10-01 15:34:58.532: E/AndroidRuntime(2519): FATAL EXCEPTION: main
    10-01 15:34:58.532: E/AndroidRuntime(2519): java.lang.NullPointerException
    10-01 15:34:58.532: E/AndroidRuntime(2519):     at ru.fosslabs.mobilestudent.fragment.KFUFragment$3.onItemSelected(KFUFragment.java:305)
    10-01 15:34:58.532: E/AndroidRuntime(2519):     at android.widget.AdapterView.fireOnSelected(AdapterView.java:892)
    10-01 15:34:58.532: E/AndroidRuntime(2519):     at android.widget.AdapterView.access$200(AdapterView.java:49)
    10-01 15:34:58.532: E/AndroidRuntime(2519):     at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:860)
    10-01 15:34:58.532: E/AndroidRuntime(2519):     at android.os.Handler.handleCallback(Handler.java:730)
    10-01 15:34:58.532: E/AndroidRuntime(2519):     at android.os.Handler.dispatchMessage(Handler.java:92)
    10-01 15:34:58.532: E/AndroidRuntime(2519):     at android.os.Looper.loop(Looper.java:137)
    10-01 15:34:58.532: E/AndroidRuntime(2519):     at android.app.ActivityThread.main(ActivityThread.java:5103)
    10-01 15:34:58.532: E/AndroidRuntime(2519):     at java.lang.reflect.Method.invokeNative(Native Method)
    10-01 15:34:58.532: E/AndroidRuntime(2519):     at java.lang.reflect.Method.invoke(Method.java:525)
    10-01 15:34:58.532: E/AndroidRuntime(2519):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
    10-01 15:34:58.532: E/AndroidRuntime(2519):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    10-01 15:34:58.532: E/AndroidRuntime(2519):     at dalvik.system.NativeStart.main(Native Method)
    
    public class GeneralActivity extends Activity implements Callback {
    ...
        @Override
        public void load(String name) {
            FragmentTransaction transaction = getFragmentManager()
                    .beginTransaction();
            Log.d("TAG", "transaction = " + transaction + " "
                    + (transaction == null));
            if (name.equals("KFUNews")) {
                transaction.replace(R.id.general_fragment, kfu);
                transaction.commit();
                invalidateOptionsMenu();
            } else {
                transaction.replace(R.id.general_fragment, vkfrag);
                transaction.commit();
                invalidateOptionsMenu();
            }
        }
    }