【问题标题】:java.lang.NullPointerException on my app我的应用程序上的 java.lang.NullPointerException
【发布时间】:2014-05-21 02:02:14
【问题描述】:

我使用 Android Studio,这是我第一次为 android 开发 还有java语言!

因此,在构建我的项目并在我自己的手机上运行它时,它会崩溃 我进入第二个活动。

这是我尝试打开的活动的 xml。:(activity_infomenu.xml)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/fullscreen_content"
    android:background="#ff282bff"
    android:fitsSystemWindows="true"
    android:keepScreenOn="true"
    android:gravity="center"
    tools:context="com.luiscesjr.aquariodebolso.aquariodebolso.infomenu">


    <ImageButton
        android:layout_width="120dp"
        android:layout_height="150dp"
        android:id="@+id/button7"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:src="@drawable/calendar128"
        />

    <ImageButton
        android:layout_width="120dp"
        android:layout_height="150dp"
        android:id="@+id/button8"
        android:layout_alignParentTop="true"
        android:layout_alignLeft="@+id/button11"
        android:layout_alignStart="@+id/button11"
        android:src="@drawable/fish128"/>

    <ImageButton
        android:layout_width="120dp"
        android:layout_height="150dp"
        android:id="@+id/button9"
        android:layout_alignParentTop="true"
        android:layout_alignLeft="@+id/button12"
        android:layout_alignStart="@+id/button12"
        android:src="@drawable/clown_fish128"/>

    <ImageButton
        android:layout_width="120dp"
        android:layout_height="150dp"
        android:id="@+id/button10"
        android:layout_marginTop="102dp"
        android:layout_below="@+id/button7"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:src="@drawable/ruler128"/>

    <ImageButton
        android:layout_width="120dp"
        android:layout_height="150dp"
        android:id="@+id/button11"
        android:layout_alignTop="@+id/button10"
        android:layout_centerHorizontal="true"
        android:src="@drawable/ruler128"/>

    <ImageButton
        android:layout_width="120dp"
        android:layout_height="150dp"
        android:id="@+id/button12"
        android:layout_alignTop="@+id/button11"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:src="@drawable/ruler128"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Calendário"
        android:id="@+id/textView"
        android:layout_below="@+id/button7"
        android:layout_alignRight="@+id/textView4"
        android:layout_alignEnd="@+id/textView4" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Aqua Doce"
        android:id="@+id/textView2"
        android:layout_below="@+id/button8"
        android:layout_centerHorizontal="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Aqua Marinho"
        android:id="@+id/textView3"
        android:layout_below="@+id/button9"
        android:layout_alignLeft="@+id/button9"
        android:layout_alignStart="@+id/button9" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Ferramentas"
        android:id="@+id/textView4"
        android:layout_below="@+id/button10"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Medium Text"
        android:id="@+id/textView5"
        android:layout_below="@+id/button11"
        android:layout_alignRight="@+id/button11"
        android:layout_alignEnd="@+id/button11" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Medium Text"
        android:id="@+id/textView6"
        android:layout_below="@+id/button12"
        android:layout_alignLeft="@+id/button12"
        android:layout_alignStart="@+id/button12" />

    <!-- This FrameLayout insets its children based on system windows using
         android:fitsSystemWindows. -->

</RelativeLayout>

代码。: (infomenu.java) (这是 Android Studio 自动生成的全屏活动。)

package com.luiscesjr.aquariodebolso.aquariodebolso;

import com.luiscesjr.aquariodebolso.aquariodebolso.util.SystemUiHider;

import android.annotation.TargetApi;
import android.app.Activity;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.view.MotionEvent;
import android.view.View;
import android.view.MenuItem;
import android.support.v4.app.NavUtils;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.graphics.drawable.AnimationDrawable;


public class infomenu extends Activity {

    private static final boolean AUTO_HIDE = true;
    private static final int AUTO_HIDE_DELAY_MILLIS = 3000;
    private static final boolean TOGGLE_ON_CLICK = true;
    private static final int HIDER_FLAGS = SystemUiHider.FLAG_HIDE_NAVIGATION;
    private SystemUiHider mSystemUiHider;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_infomenu);
        setupActionBar();

        final View controlsView = findViewById(R.id.fullscreen_content_controls);
        final View contentView = findViewById(R.id.fullscreen_content);

        mSystemUiHider = SystemUiHider.getInstance(this, contentView, HIDER_FLAGS);
        mSystemUiHider.setup();
        mSystemUiHider
                .setOnVisibilityChangeListener(new SystemUiHider.OnVisibilityChangeListener() {
                    // Cached values.
                    int mControlsHeight;
                    int mShortAnimTime;

                    @Override
                    @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
                    public void onVisibilityChange(boolean visible) {
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {

                            if (mControlsHeight == ) {
   // LINE 83 HERE              mControlsHeight = controlsView.getHeight(); 
                            }
                            if (mShortAnimTime == 0) {
                                mShortAnimTime = getResources().getInteger(
                                        android.R.integer.config_shortAnimTime);
                            }
                            controlsView.animate()
                                    .translationY(visible ? 0 : mControlsHeight)
                                    .setDuration(mShortAnimTime);
                        } else {

                            controlsView.setVisibility(visible ? View.VISIBLE : View.GONE);
                        }

                        if (visible) {

                            delayedHide(AUTO_HIDE_DELAY_MILLIS);
                        }
                    }
                });


        contentView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (TOGGLE_ON_CLICK) {
                    mSystemUiHider.toggle();
                } else {
                    mSystemUiHider.show();
                }
            }
        });
    }

    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);

        delayedHide(100);
    }


    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    private void setupActionBar() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {

            getActionBar().setDisplayHomeAsUpEnabled(true);
        }
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == android.R.id.home) {

            NavUtils.navigateUpFromSameTask(this);
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    View.OnTouchListener mDelayHideTouchListener = new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            if (AUTO_HIDE) {
                delayedHide(AUTO_HIDE_DELAY_MILLIS);
            }
            return false;
        }
    };

    Handler mHideHandler = new Handler();
    Runnable mHideRunnable = new Runnable() {
        @Override
        public void run() {
            mSystemUiHider.hide();
        }
    };


    private void delayedHide(int delayMillis) {
        mHideHandler.removeCallbacks(mHideRunnable);
        mHideHandler.postDelayed(mHideRunnable, delayMillis);
    }
}

这是错误。:

05-20 22:48:24.737  18794-18794/com.luiscesjr.aquariodebolso.aquariodebolso E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.NullPointerException
            at com.luiscesjr.aquariodebolso.aquariodebolso.infomenu$1.onVisibilityChange(infomenu.java:83)
            at com.luiscesjr.aquariodebolso.aquariodebolso.util.SystemUiHiderHoneycomb$1.onSystemUiVisibilityChange(SystemUiHiderHoneycomb.java:112)
            at android.view.View.dispatchSystemUiVisibilityChanged(View.java:15933)
            at android.view.ViewGroup.dispatchSystemUiVisibilityChanged(ViewGroup.java:1412)
            at android.view.ViewGroup.dispatchSystemUiVisibilityChanged(ViewGroup.java:1418)
            at android.view.ViewGroup.dispatchSystemUiVisibilityChanged(ViewGroup.java:1418)
            at android.view.ViewGroup.dispatchSystemUiVisibilityChanged(ViewGroup.java:1418)
            at android.view.ViewRootImpl.handleDispatchSystemUiVisibilityChanged(ViewRootImpl.java:3777)
            at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:2966)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:213)
            at android.app.ActivityThread.main(ActivityThread.java:4787)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
            at dalvik.system.NativeStart.main(Native Method)
05-20 22:48:26.417  18794-18794/com.luiscesjr.aquariodebolso.aquariodebolso I/Process﹕ Sending signal. PID: 18794 SIG: 9

我在这里缺少什么? 哦,请不要介意应用的愚蠢名称。

编辑。:自从我添加了这个,就不会再出现错误了。:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ff282bff"
    android:fitsSystemWindows="true"
    android:keepScreenOn="true"
    android:gravity="center"
    tools:context="com.luiscesjr.aquariodebolso.aquariodebolso.infomenu"
    android:id="@+id/fullscreen_content_controls">

     <View //Without this it will still crash, but it also bugs the activity
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/fullscreen_content">
     </View>

但是现在代码不能正常工作了。

【问题讨论】:

  • 什么是控件视图?它显然是空的。
  • 什么是controlsView?,可能是null,检查你是否正在初始化这个变量。
  • 我检查过了,也许我做错了。在主要活动中,此代码运行顺利。它也曾经在这个上,也许这是我在xml上更改的东西?我猜它只能从视图中确定高度、宽度或类似的东西。

标签: java android nullpointerexception android-studio


【解决方案1】:

您正在为此设置 controlsView

 final View controlsView = findViewById(R.id.fullscreen_content_controls);

fullscreen_content_controls 不存在于您的布局中

将您的必需视图添加到您的布局中,因为您给定的布局不包含任何类似 fullscreen_content_controls 的东西,所以它会抛出 NPE

【讨论】:

  • 好的,编辑了 OP,现在有新的 bug。每当我打开新活动时,它都不会崩溃,而是会在后台给我一个闪烁的视图和我的按钮。有时会出现,有时不会出现,并且会出现在 Click 上。
  • @Luis 请为新错误发布一个新问题,在同一个问题中一个接一个地提出问题不是一个好主意,只需接受答案并提出带有特定问题和代码的新问题来解决它以更好的方式
  • 好的,没问题,会的。谢谢纳伦达!
猜你喜欢
  • 2015-09-07
  • 1970-01-01
  • 1970-01-01
  • 2017-02-11
  • 1970-01-01
  • 2018-03-16
  • 1970-01-01
  • 2019-03-23
  • 1970-01-01
相关资源
最近更新 更多