无法实例化活动?

时间:2016-06-06 09:33:40

标签: java android android-studio

我收到此错误

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.bassammetwally.like/com.example.bassammetwally.like.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference 

当我试图在另一种方法中切换活动mainActivity.class

我试图运行的代码(不包括库);

public class MainActivity extends AppCompatActivity {


    final Intent i = new Intent(this, profile.class);
    ImageButton ButtonOne = (ImageButton) findViewById(R.id.profile);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final Intent i = new Intent(this, profile.class);
        ImageButton ButtonOne = (ImageButton) findViewById(R.id.profile);
        ButtonOne.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                button();
            }
        });

    }

    public void button()
    {
        startActivity(i);
    }


}

之前的代码

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final Intent i = new Intent(this, profile.class);
        ImageButton ButtonOne = (ImageButton)findViewById(R.id.profile);
        ButtonOne.setOnClickListener(new View.OnClickListener(){
            public void onClick( View v ){
                startActivity(i);
            }
        });

}}

问题:

  1. 错误是什么意思?
  2. 为什么会出现此错误?

3 个答案:

答案 0 :(得分:0)

您已经两次启动变量i。当您开始使用button()时,您使用的是公共范围(onCreate方法之上),而不是onCreate中的那个。您的代码应如下所示:

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final Intent i = new Intent(this, profile.class);
    ImageButton ButtonOne = (ImageButton) findViewById(R.id.profile);
    ButtonOne.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            button(i);
        }
    });

}

public void button(Intent i)
{
    startActivity(i);
}
}

答案 1 :(得分:0)

试试这段代码:

final Intent i ;
ImageButton ButtonOne ;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    i =new Intent(MainActivity.this, profile.class);
     ButtonOne  = (ImageButton) findViewById(R.id.profile);
    ButtonOne.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            button();
        }
    });

}

public void button()
{
    startActivity(i);
}

答案 2 :(得分:0)

public class MainActivity extends AppCompatActivity 
{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ImageButton ButtonOne = (ImageButton) findViewById(R.id.profile);

        ButtonOne.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
            Intent i = new Intent(this, profile.class);
            startActivity(i);
            }
        });
    }
}

还在清单文件中添加了Profile.java