【问题标题】:How can we create Interface and how to implement Interface methods in android?我们如何创建接口以及如何在android中实现接口方法?
【发布时间】:2016-04-19 13:20:06
【问题描述】:

您好,我是 android 新手,我创建了一个 Utils 类,并在那里创建了一个警报对话框。

当我单击“确定”和“取消”按钮时,我想使用接口方法在我的MainActivity 中处理该单击操作。

但是使用下面的代码,我得到了如下异常:

java.lang.NullPointerException: Attempt to invoke interface method 'void com.example.venkat.implementinterfacemethods.CommonUtilities$BackGroundDialogeCall.doDialogueExecute(java.lang.String)' on a null object reference

CommonUtilities:-

public class CommonUtilities {

    BackGroundDialogeCall backGroundDialogeCall;

    public interface BackGroundDialogeCall {

        void doDialogueExecute(String result);
    }

    //Adding Dialoge box:-

    public void displaySignOutAlertDialog(Context activity) {

        new AlertDialog.Builder(activity)
                .setTitle("Alert")
                .setMessage("Are you sure want to reserve?")
                .setPositiveButton(android.R.string.yes,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                                int which) {
                                dialog.dismiss();

                                backGroundDialogeCall.doDialogueExecute("yes");
                            }
                        })
                .setNegativeButton(android.R.string.no,
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog,
                                                int which) {
                                dialog.dismiss();
                                backGroundDialogeCall.doDialogueExecute("no");
                            }
                        }).show();
      }
}

MainActivity:-

public class MainActivity extends AppCompatActivity implements CommonUtilities.BackGroundDialogeCall {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        CommonUtilities commonUtilities  = new CommonUtilities();
        commonUtilities.displaySignOutAlertDialog(MainActivity.this);
    }

    @Override
    public void doDialogueExecute(String result) {

        if(result.equals("yes")){
            Log.d("=======>","if block");
        }else{
            Log.d("=======>","else block");
        }
    }
}

【问题讨论】:

  • 你能指出导致此异常的行吗
  • 您尚未在 CommonUtilities 类中初始化 backGroundDialogeCall。像这样 backGroundDialogeCall = (BackGroundDialogeCall) 活动;
  • 你能告诉我如何在 CommonUtilities 类中初始化 backGroundDialogeCall
  • 因为我是安卓新手
  • 是在 displaySignOutAlertDialog 方法中

标签: android interface


【解决方案1】:

您没有在 CommonUtilities 类中初始化 backGroundDialogeCall,这就是空指针异常的原因。

您可以像这样在 displaySignOutAlertDialog 方法中初始化它:

backGroundDialogeCall = (BackGroundDialogeCall) activity;

片段和活动之间的通信,请查看http://developer.android.com/training/basics/fragments/communicating.html#DefineInterface

注意:使用附加到Activity的Fragment时,接口在onAttach方法中初始化。

用于实现活动以外的接口;像适配器一样,您需要一个“上下文”来初始化接口。 像这样 => backGroundDialogeCall = (BackGroundDialogeCall) activity;

这里,活动是“上下文”。

【讨论】:

  • 如果我在活动中创建接口并在片段中实现方法,那么我如何在活动类中初始化接口
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多