Textview.settext(), предоставляющий исключение nullpointer

Это действие, которое вызывает текстовое представление и получает намерение

package com.example.smartbrowser;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView vw =(TextView) findViewById(R.id.text);
Intent intent =getIntent();
String message = intent.getStringExtra(Browseractivity.Message);
vw.setText(message);
setContentView(R.layout.activity_main);
 }
}

И activity_main.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: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>

почему я получаю исключение null-указателя в MainActivity.java?

4 ответа

Вы должны поместить setContentView(R.layout.activity_main); перед инициализацией любого вида. Здесь инициализировался ваш TextView перед настройкой содержимого, поэтому он возвращал null.

@Override 
protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 TextView vw =(TextView) findViewById(R.id.text);
 Intent intent =getIntent();
 String message = intent.getStringExtra(Browseractivity.Message);
 vw.setText(message);
}


Вы всегда должны в этом цирконном состоянии задавать представление контента перед тем, как играть с любым виджетом в виде текстового представления в вашем примере

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView vw =(TextView) findViewById(R.id.text);
Intent intent =getIntent();
String message = intent.getStringExtra(Browseractivity.Message);
vw.setText(message);
 }
}

Это должно сделать трюк:) надеюсь, что это помогло


Изменить на

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); // should be first
TextView vw =(TextView) findViewById(R.id.text); // then initialize textview
Intent intent =getIntent();
String message = intent.getStringExtra(Browseractivity.Message);
vw.setText(message);
}

Сначала вам нужно сначала установить содержимое макета, а затем инициализировать свои представления.

findViewById ищет вид в текущем раздутом макете. Вы получили NullPointerException bcoz, который вы инициализировали TextView, прежде чем устанавливать макет в действие.


Я знаю, что это старый, но я отвечу на него, поскольку этот код по-прежнему применим.

MainActivity.java

public class MainActivity extends Activity {
private TextView textView2; 
@Override
protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.fragment_main); // Change from activity_main > fragment_main
 textView2 = (TextView)findViewById(R.id.textview2);
 textView2.setOnClickListener(new View.OnClickListener() {
 @Override
 public void onClick(View textView2) {
 // TODO Auto-generated method stub
 if (textView2.isClickable() == true){
 ((TextView) textView2).setText("Changed!!!!!!"); 
 }
 }
 });
 if (savedInstanceState == null) {
 getFragmentManager().beginTransaction().add(R.id.container, new PlaceholderFragment()).commit();
 }
}

activity_main.xml

<framelayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" <!--="" remove="" android:id="@+id/container" --="">
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.thinktankcoding.androiddevtest.MainActivity"
tools:ignore="MergeRootFrame" />
</framelayout>

fragment_main.xml

<relativelayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container" <!--="" add="" the="" line="" you="" removed="" here="" and="" remove="" these="" comments="" --="">
android:layout_width="match_parent"
android:layout_height="match_parent"
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="com.thinktankcoding.androiddevtest.MainActivity$PlaceholderFragment" >
</relativelayout>

licensed under cc by-sa 3.0 with attribution.