【问题标题】:Unfortunately (android app) has stopped. null pointer exception不幸的是(安卓应用程序)已停止。空指针异常
【发布时间】:2014-03-30 22:37:01
【问题描述】:

嗨,每当我尝试运行此应用程序时,我都会收到它已停止的错误消息。在 LogCat 上,我在 OnCreate 方法的“setUpImage()”行和该行上得到一个空指针异常。 “relativeLayout.addView(电话)”。我现在只是使用图像考拉和水母作为占位符,所以不要担心这些。只是应用程序启动,图像没有显示在屏幕上。然后应用程序会因该消息而崩溃。我知道这很愚蠢,但如果你能帮助我,那就太好了……她是我的主要活动


package com.example.togglesilentmode;

import android.graphics.Point;
import android.media.AudioManager;
import android.os.Bundle;
import android.app.Activity;
import android.view.Display;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.RelativeLayout.LayoutParams;


public class MainActivity extends Activity {

int displayWidth, displayHeight;
RelativeLayout relativeLayout;
boolean mPhoneIsSilent=true;

private AudioManager mAudioManager;

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

    mAudioManager = (AudioManager)getSystemService(AUDIO_SERVICE);

    checkIfPhoneIsSilent();
    setUpImage();

    relativeLayout = (RelativeLayout)findViewById(R.id.relativeLayout);

}

//SETTING UP THE IMAGE
private void setUpImage(){

    Display display = getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    displayWidth = size.x;
    displayHeight = size.y;

    LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, 
LayoutParams.WRAP_CONTENT);

    params.leftMargin = displayWidth/4;
    params.topMargin = displayHeight/4;

    ImageView phone = new ImageView(this);
    phone.setOnClickListener(myOnClickLister);
    phone.setLayoutParams(params);

    if (mPhoneIsSilent) phone.setImageResource(R.drawable.jellyfish);
    else phone.setImageResource(R.drawable.koala);

    relativeLayout.addView(phone);  <----- NULL POINTER EXCEPTION
}

//IMAGE ON CLICK LISTENER
OnClickListener myOnClickLister = new OnClickListener() {

    @Override
    public void onClick(View v) {

        if(mPhoneIsSilent) {


mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
            mPhoneIsSilent = false;

            }else {


mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
                mPhoneIsSilent = true;

            }
        setUpImage();

    }



};

//CHECK IF PHONE IS SILENT
private void checkIfPhoneIsSilent(){

    int ringerMode = mAudioManager.getRingerMode();

    if (ringerMode == mAudioManager.RINGER_MODE_SILENT) mPhoneIsSilent = true;
    else mPhoneIsSilent = false;
}

//ON RESUME METHOD
@Override
protected void onResume(){
    super.onResume();

    checkIfPhoneIsSilent();
    setUpImage();

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}

And here is my activity_main.xml file.

<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/relativeLayout"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >



</RelativeLayout>

【问题讨论】:

    标签: java android nullpointerexception


    【解决方案1】:

    您在检索相对布局之前调用了setUpImage。当时还是null

    所以你必须先找到你的布局,然后你才能打电话给setUpImage()

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        mAudioManager = (AudioManager)getSystemService(AUDIO_SERVICE);
    
    
        relativeLayout = (RelativeLayout)findViewById(R.id.relativeLayout);
    
        checkIfPhoneIsSilent();
        setUpImage();
    
    }
    

    NullPointerException 通常很容易解决。既然你识别出来了,那就一步步执行你的代码,看看为什么没有正确初始化。

    【讨论】:

      猜你喜欢
      • 2014-04-29
      • 2014-05-18
      • 2014-12-06
      • 1970-01-01
      • 2016-10-03
      • 2018-03-23
      • 2015-05-09
      • 2016-11-19
      相关资源
      最近更新 更多