Java 无法实例化活动组件信息-AndroidStudio

Java 无法实例化活动组件信息-AndroidStudio,java,android,android-studio,Java,Android,Android Studio,我是一个android/Java开发的完全初学者,我非常感谢任何人能就我所面临的问题向我提供任何建议。下面是MainActivity.java package com.example.harris.enterappman; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import

我是一个android/Java开发的完全初学者,我非常感谢任何人能就我所面临的问题向我提供任何建议。下面是MainActivity.java

package com.example.harris.enterappman;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

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

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

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}






EditText enterName;
TextView usersName;
String str = enterName.getText().toString();
public void getName(View view){

    enterName = (EditText) findViewById(R.id.enterName);
    usersName = (TextView) findViewById(R.id.helloNameView);
    usersName.setText(str);

}

public void printUsersName(){



}

}
每次我尝试运行该程序时,它都会失败,并出现以下错误:

java.lang.RuntimeException: Unable to instantiate activity             ComponentInfo{com.example.harris.enterappman/com.example.harris.enterappman.Main    Activity}: java.lang.NullPointerException
        at     android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2121)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
        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:5021)
        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:827)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:643)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.NullPointerException
        at com.example.harris.enterappman.MainActivity.<init>(MainActivity.java:48)
        at java.lang.Class.newInstanceImpl(Native Method)
        at java.lang.Class.newInstance(Class.java:1208)
        at android.app.Instrumentation.newActivity(Instrumentation.java:1064)
        at     android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2112)
            at     android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
            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:5021)
            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:827)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:643)
            at dalvik.system.NativeStart.main(Native Method)
java.lang.RuntimeException:无法实例化活动组件信息{com.example.harris.enterappman/com.example.harris.enterappman.Main activity}:java.lang.NullPointerException
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2121)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
在android.app.ActivityThread.access$800(ActivityThread.java:135)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)上
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:136)
位于android.app.ActivityThread.main(ActivityThread.java:5021)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:515)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:827)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:643)
在dalvik.system.NativeStart.main(本机方法)
原因:java.lang.NullPointerException
位于com.example.harris.enterappman.MainActivity。(MainActivity.java:48)
位于java.lang.Class.newInstanceImpl(本机方法)
位于java.lang.Class.newInstance(Class.java:1208)
位于android.app.Instrumentation.newActivity(Instrumentation.java:1064)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2112)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
在android.app.ActivityThread.access$800(ActivityThread.java:135)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)上
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:136)
位于android.app.ActivityThread.main(ActivityThread.java:5021)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:515)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:827)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:643)
在dalvik.system.NativeStart.main(本机方法)
从网上的其他帖子中,我得出结论,这个问题与抽象方法有关?我无法找出我的代码是怎么错的

干杯, 哈里斯

此时,
enterName
null
,因为您从未设置过它。欢迎您声明
String str
作为字段,但只有在
enterName
上设置值后才能对其进行初始化


您有一些代码需要用一种有点奇怪的
getName()
方法初始化
enterName
,但您似乎从未调用过该方法。

您使用
enterName
设置
str
的可能性有多大,由于
enterName
未初始化,因此它是
null
导致空指针异常

在使用它之前,您必须初始化
enterName
,因为您在
getName()方法中进行初始化,然后使用它来获取其文本

您的代码必须是这样的,您必须从
onCreate()


您没有正确初始化entername

或使用:

....
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    enterName = (EditText) findViewById(R.id.enterName);
    usersName = (TextView) findViewById(R.id.helloNameView);
    usersName.setText(str);
}  
...
或者像这样使用它:

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

public void getName(){
    enterName = (EditText) findViewById(R.id.enterName);
    usersName = (TextView) findViewById(R.id.helloNameView);
    usersName.setText(str);
}

当enterName为null时调用
enterName.getText()
,这会导致NullPointerException

我有几点建议:

  • 如果要拥有对布局组件的引用,请在onCreate方法中调用这些组件:
  • 不要在类本身中调用方法(除了一些构造函数),而是在方法中调用它们(我指的是str变量)
....
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    enterName = (EditText) findViewById(R.id.enterName);
    usersName = (TextView) findViewById(R.id.helloNameView);
    usersName.setText(str);
}  
...
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    getName();
}

public void getName(){
    enterName = (EditText) findViewById(R.id.enterName);
    usersName = (TextView) findViewById(R.id.helloNameView);
    usersName.setText(str);
}
enterName = (EditText) findViewById(R.id.enterName);
usersName = (TextView) findViewById(R.id.helloNameView);