编程语言
首页 > 编程语言> > java-E / AndroidRuntime:致命异常:main

java-E / AndroidRuntime:致命异常:main

作者:互联网

在测试我的应用时,我在Android Studio-Consol中收到以下错误:

08-21 13:56:28.059    9637-9637/net.dominik.genpush E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: net.dominik.genpush, PID: 9637
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{net.dominik.genpush/net.dominik.genpush.settings}: java.lang.NullPointerException
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
        at android.app.ActivityThread.access$800(ActivityThread.java:135)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5001)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.NullPointerException
        at android.app.Activity.findViewById(Activity.java:1884)
        at net.dominik.genpush.settings.<init>(settings.java:23)
        at java.lang.Class.newInstanceImpl(Native Method)
        at java.lang.Class.newInstance(Class.java:1208)
        at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2101)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
            at android.app.ActivityThread.access$800(ActivityThread.java:135)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5001)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
            at dalvik.system.NativeStart.main(Native Method)

这是一段代码:

public CheckBox checkBox_push;
    public TextView textView_appby;
    public Button button_feedback;

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

        checkBox_push = (CheckBox) findViewById(R.id.checkBox_push);

        textView_appby = (TextView) findViewById(R.id.textView_appby);

        button_feedback = (Button) findViewById(R.id.button_feedback);
    }

    public void onTextClickAppBy(View x)
    {
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_VIEW);
        intent.addCategory(Intent.CATEGORY_BROWSABLE);
        intent.setData(Uri.parse("http://www.dominiktv.net"));
        startActivity(intent);
    }

    //Button Status Speichern
    @Override
    public void onPause() {
        super.onPause();
        save(checkBox_push.isChecked());
    }

    @Override
    public void onResume() {
        super.onResume();
        checkBox_push.setChecked(load());
    }

    private void save(final boolean isChecked) {
        SharedPreferences sharedPreferences = getPreferences(Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putBoolean("check", isChecked);
        editor.commit();

    }

    private boolean load() {
        SharedPreferences sharedPreferences = getPreferences(Context.MODE_PRIVATE);
        return sharedPreferences.getBoolean("check", true);
    }
    public void onCheckboxPush(View b)
    {
        if (checkBox_push.isChecked())
        {
            //PB
            Pushbots.getInstance().setNotifyStatus(true);
            //PB E
            Toast.makeText(getApplicationContext(), "Push-Benachrichtigungen aktiviert",
                    Toast.LENGTH_SHORT).show();
        }
        else
        {
            //PB
            Pushbots.getInstance().setNotifyStatus(false);
            //PB E
            Toast.makeText(getApplicationContext(), "Push-Benachrichtigungen deaktiviert",
                    Toast.LENGTH_SHORT).show();
        }
    }

该应用程序也可以处理该错误,但是在一个应用程序中出现错误并不是很好.
我已经用Google搜索了很多,但是我的Java技能还远远不够,这是我第一个自行创建的应用

解决方法:

Caused by: java.lang.NullPointerException
    at android.app.Activity.findViewById(Activity.java:1884)
    at net.dominik.genpush.settings.<init>(settings.java:23)

初始化活动设置对象(可能是成员变量)时,您太早调用findViewById()了.您发布的代码没有显示该代码.

您实际上只能在onCreate()或更高版本中调用活动函数.

还要将findViewById()放在setContentView()之后,以便它实际上可以返回非null的值.

标签:android-studio,java,android
来源: https://codeday.me/bug/20191121/2051127.html