findViewById возвращает ошибку

#java #android #textview

#java #Android #TextView

Вопрос:

findViewById выдает ошибку, я думаю, это потому, что он возвращает null . Мое приложение принудительно закрывается.

 SensorManager sensorManager=null;

TextView x= null;
TextView y= null;
TextView z= null;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    setContentView(R.layout.main);
    x= (TextView) findViewById(R.id.tv1);
    y= (TextView) findViewById(R.id.tv2);
    z= (TextView) findViewById(R.id.tv3);
}
  

XML:

 <TextView
    android:id="@ id/tv1"
    android:layout_x="10px"
    android:layout_y="550px"
    android:text="@string/x"
    />  
<TextView
    android:id="@ id/tv2"
    android:layout_x="100px"
    android:layout_y="550px"
    android:text="@string/y"
    />  
<TextView
    android:id="@ id/tv3"
    android:layout_x="200px"
    android:layout_y="550px"
    android:text="@string/z"
    />
  

Может кто-нибудь, пожалуйста, скажите мне, что я делаю не так?

РЕШАЕМАЯ!

Я использовал XML, указанный Sunny внизу! Спасибо всем!

Комментарии:

1. Являются tv1 tv2 и tv3 правильно объявлены в основном XML-макете?

2. Help? <- layout? (также может быть, что вы не объявили это действие в своем манифесте)

3. покажите мне вашу ошибку, что показывает logcat, а также ваш XML-макет

4. Я уже добавил 3 TextViews с этими идентификаторами в XML. Извините, но как мне увидеть LogCat?

5. Logcat — это то, что вы должны использовать, прежде чем даже думать о программировании и задавать вопросы. Без этого вы полностью слепы в своем коде. Для отображения: добавить view -> logcat

Ответ №1:

Это просто …. tv * отсутствует в вашем макете!

Пожалуйста, опубликуйте макет, я на 100% уверен, что он не содержит:

 <TextView android:id="@ id/tv1"/>
<TextView android:id="@ id/tv2"/>
<TextView android:id="@ id/tv3"/>
  


Пожалуйста, также узнайте, как получить logcat, прежде чем идти дальше в разработке Android! 😉

Окно -> Показать вид -> logcat

Комментарии:

1. Я должен опубликовать, что я уже добавил XML перед публикацией, я отредактирую его снова. 😀

Ответ №2:

да, приведенный выше код работает нормально, и файл xml должен быть таким.

  <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
 <TextView 
 android:id="@ id/tv1"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"></TextView>
 <TextView 
  android:id="@ id/tv2"
  android:layout_width="wrap_content"
   android:layout_height="wrap_content"></TextView>
  <TextView>
 android:id="@ id/tv3"
 android:layout_width="wrap_content"
android:layout_height="wrap_content"></TextView>
 </LinearLayout>
  

Комментарии:

1. теперь вы понимаете это, и вы удалили свой пост 🙂 , вы должны разрешить это, чтобы другие могли получать из него информацию 🙂

2. Я попытался использовать это как свой XML, и это сработало! Большое вам спасибо, сэр!

Ответ №3:

да, эта проблема, и если с xml это не сделано, тогда вы импортируете android.R; так что это выдаст ошибку, если у вас есть xml, удалите это и импортируйте PACKAGENAME.R;

Ответ №4:

Во-первых: убедитесь, что ваши TextView данные присутствуют в вашем макете: main.xml :

 <TextView android:id="@ id/tv1" .../>
<TextView android:id="@ id/tv2" .../>
<TextView android:id="@ id/tv3" .../>
  

Второе: перестройте свой проект, выполнив следующие действия: Project ==> Clean ==> Выберите свой проект и нажмите OK .

Ответ №5:

Причина, по которой это происходит :

findViewById() будет искать текстовые представления в иерархии представлений, установленной setContentView(R.layout.main) . Так что, если текстовые представления не находятся в main.xml вы получите нулевое значение