触发时我的界面获得NullPointerException

时间:2014-03-06 13:42:11

标签: java android interface nullpointerexception

我尝试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();

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

3 个答案:

答案 0 :(得分:3)

您尚未初始化ToastMessaggeCallback toastMessaggeCallback

要执行此操作,请写

ToastMessaggeCallback toastMessaggeCallback = new ToastMessaggeCallback(){

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

};

这将使一个对象实现您的接口(称为“匿名类”)。当然,您的ToastMessaggeCallback应该在方法LongToastMessagge中执行某些操作,因此请在那里添加所需的代码。

答案 1 :(得分:1)

我建议您创建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();

   }
}

答案 2 :(得分:0)

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