【问题标题】:My interface when triggered get NullPointerException触发时我的界面得到 NullPointerException
【发布时间】:2014-04-09 04:43:34
【问题描述】:

我尝试了一个 Toast Message 界面。如果应用程序没有连接互联网,我想显示一个 Toast 消息并且我想要 java 接口。

这是MotherActivity.java。该文件实现ToastMessagges.ToastMessaggeCallback

   public class MotherActivity extends ActionBarActivity implements ToastMessagges.ToastMessaggeCallback {

        ToastMessagges toastMessagges;

        @Override
        protected void onStart() {
            super.onStart();

        }

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

            toastMessagges      = new ToastMessagges();

            AppStarter();
        }

        private void AppStarter(){

            boolean checkinternet   = InternetControl.checkInternetConnection( getApplicationContext() );
            if( checkinternet ) {
                toastMessagges.show_toast_messagge();
            }
            else {

            }

        }

        @Override
        public void LongToastMessagge() {
            Toast.makeText(getApplicationContext(), "Hello World", Toast.LENGTH_LONG).show();


}
}

这是我的 ToastMessagges.java 文件。

public class ToastMessagges {

    ToastMessaggeCallback toastMessaggeCallback;
    public void show_toast_messagge(){
        toastMessaggeCallback.LongToastMessagge();
    }


    public static interface ToastMessaggeCallback {
        public void LongToastMessagge();
    }
}

当启动这个应用程序。我收到 NullPointerException 错误。

Caused by: java.lang.NullPointerException
            at com.medyasef.bulenttirasnewapp.bulenttiras.functions.ToastMessagges.show_toast_messagge(ToastMessagges.java:22)
            at com.medyasef.bulenttirasnewapp.bulenttiras.MotherActivity.AppStarter(MotherActivity.java:36)
            at com.medyasef.bulenttirasnewapp.bulenttiras.MotherActivity.onCreate(MotherActivity.java:29)

ToastMessagges.java:22

toastMessaggeCallback.LongToastMessagge();

抱歉英语不好。 请帮忙。 谢谢。

【问题讨论】:

  • 你初始化ToastMessaggeCallback toastMessaggeCallback了吗?
  • 我猜不是。如何初始化 ToastMessaggeCallback toastMessaggeCallback ?

标签: java android interface nullpointerexception


【解决方案1】:

你还没有初始化你ToastMessaggeCallback toastMessaggeCallback

要做到这一点,写

ToastMessaggeCallback toastMessaggeCallback = new ToastMessaggeCallback(){

    public void LongToastMessagge(){
        // add some toasting code here
    }

};

这将使一个对象实现您的接口(称为“匿名类”)。当然,你的ToastMessaggeCallback 应该在方法LongToastMessagge 中做一些事情,所以在那里添加所需的代码。

【讨论】:

  • 第一个thanx exception1。我的英语有点弱。所以我不能确切地说。您的示例正在运行,但不需要实施。我想覆盖 ToastMessaggeCallback 并且这个接口必须在 MotherActivity 中工作。像这样@Override public void LongToastMessagge() { Log.d("denemeolkun","Like This Video"); } 我必须你能理解我。我想学习接口。谢谢。
【解决方案2】:

您的ToastMessagges 类需要提供注册回调的方法。然后,您的Activity 需要在您构造ToastMessages 对象后立即调用此方法将自己注册为回调。

【讨论】:

    【解决方案3】:

    我会建议你创建一个Util 类而不是Interface。我在这里给你一个Util类的例子。

    public class Util {
    
        public static void showToast(Context context, String text) {
    
            Toast.makeText(context, text, Toast.LENGTH_SHORT).show();
    
        }
    
    }
    

    然后从您的活动中调用showToast() 方法,如下所示...

    Util.showToast(YourActivity.this, "text");
    

    更新:

    将您的Interface 声明为个人,而不是在下面的类中...

    public interface ToastMessaggeCallback {
    
        public void showLongToastMessagge(String text);
    
    }
    

    然后实现Interface如下...

    public class MotherActivity extends ActionBarActivity implements ToastMessaggeCallback {
    
        @Override
        protected void onStart() {
            super.onStart();
    
        }
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_mother);
    
            AppStarter();
        }
    
        private void AppStarter(){
    
            boolean checkinternet   = InternetControl.checkInternetConnection( getApplicationContext() );
            if( checkinternet ) {
    
                showLongToastMessagge("Hello World");
    
            }
            else {
    
            }
    
        }
    
        @Override
        public void showLongToastMessagge(String text) {
    
            Toast.makeText(getApplicationContext(), text, Toast.LENGTH_LONG).show();
    
       }
    }
    

    【讨论】:

    • 首先感谢您的帮助。但我同时想要Java接口。我的问题只是小问题。
    • 再次感谢@HamidShatu。这个样本对我来说很干净。但这并不是我想要的。我试图弄清楚接口结构。我的英语有点弱。再次感谢你:)
    猜你喜欢
    • 1970-01-01
    • 2017-09-01
    • 2018-02-22
    • 2012-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 2018-11-09
    相关资源
    最近更新 更多