【问题标题】:Android NullPointerException when findViewByIdfindViewById 时的 Android NullPointerException
【发布时间】:2014-05-13 10:27:14
【问题描述】:

当我运行我的应用程序时,我在 log-cat 中收到此错误:

Caused by: java.lang.NullPointerException
at com.myfirstapp.myfirstapp.MainActivity.onCreate(MainActivity.java:52)
at android.app.Activity.performCreate(Activity.java:5312)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1111)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2552)
... 11 more

这是第 52 行:

String message = editTextInput.getText().toString();

到目前为止,我已经确定 NPE 必须在我定义 EditText(或任何与此相关的视图)时出现:

EditText editText = (EditText) findViewById(R.id.input_text);

但是,当我定义 EditText 时没有得到 NPE:findViewById() 像这样的视图:

TextView desc = new TextView(this);

这是整个onCreate()方法:

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

    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
                .add(R.id.container, new PlaceholderFragment())
                .commit();
    }

    EditText editText = (EditText) findViewById(R.id.input_text);
    Button submit = (Button) findViewById(R.id.submit);
    LinearLayout layout = (LinearLayout) findViewById(R.id.layout_main);
    Intent intent = new Intent(this, testActivity.class);
    final TextView desc = new TextView(this);
    final TextView title = new TextView(this);

    String message = editText.getText().toString();

    submit.setVisibility(View.VISIBLE);
    submit.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            editText.setVisibility(View.GONE);}});

    desc.setTextSize(20);
    desc.setText(message);
    desc.setGravity(Gravity.LEFT | Gravity.TOP);
    desc.setPadding(5, 5, 5, 5);
    desc.setTextColor(getResources().getColor(R.color.black));

    title.setTextSize(10);
    title.setText(R.string.title_activity_dictionary);
    title.setGravity(Gravity.LEFT | Gravity.TOP);
    title.setPadding(5, 5, 5, 5);
    title.setTextColor(getResources().getColor(R.color.black));

    layout.addView(desc);
    layout.addView(title);
}

我不明白的是,当我明确定义视图时,为什么会有 NPE?

【问题讨论】:

  • 将fragment_main.xml中的全部内容复制到activity_main.xml试试..
  • 非常感谢,终于破解了!多谢,伙计。但是,那么有一个 fragment_main 有什么意义呢? @拉尔
  • 看到这个link那个@user3625982
  • 我已将其添加为我的答案..请将其标记为已接受..请..
  • 哎呀抱歉我是这个论坛的新手 :) 我现在试试@Lal

标签: java android nullpointerexception


【解决方案1】:

确保您在布局中可用的 findviewbyid 方法中传递了正确的 id..

否则。只需清理并构建项目。

【讨论】:

    【解决方案2】:

    这是因为 findViewById() 在activity_main布局中搜索,而按钮位于fragment的布局fragment_main中。

    在片段的 onCreateView() 方法中移动那段代码:

    //...
    
    View rootView = inflater.inflate(R.layout.fragment_main, container, false);
    Button buttonClick = (Button)rootView.findViewById(R.id.button);
    buttonClick.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            onButtonClick((Button) view);
        }
    });
    

    请注意,现在您通过 rootView 视图访问它:

    Button buttonClick = (Button)rootView.findViewById(R.id.button);
    

    否则你会再次得到 NullPointerException。

    【讨论】:

    • 再次感谢!!这对我很有用!!
    • 也可以将上面的代码添加到 OnCreate();而不是 OnCreateView(); ?
    • 我不确定@user3625982
    【解决方案3】:

    改变

    String message = editTextInput.getText().toString();
    

    到

    String message = editText.getText().toString();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-10
      • 1970-01-01
      • 1970-01-01
      • 2016-02-13
      相关资源
      最近更新 更多