Подтвердить что ты не робот

#ИМЯ?

Это то, что я пытаюсь сделать в течение нескольких часов: У меня есть файл MainActivity.java(список ниже) и файл fragment_start.xml с кнопкой запуска. Нажатие кнопки "Пуск" должно отображать файл activity_main.xml с точками -/round - и обратный отсчет - Textviews. Это не работает, и это то, что происходит:

Логарифм говорит мне: PID: 1240 java.lang.NullPointerException: попытка вызвать виртуальный метод 'void android.widget.TextView.setText(java.lang.CharSequence)' для ссылки на нулевой объект

Эмулятор отображает: К сожалению, GAME остановлена.

Необходимо отметить, что я довольно новичок в программировании?

Спасибо за любой совет!

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;


public class MainActivity extends Activity implements View.OnClickListener {

private int points;
private int round;
private int countdown;

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

private void newGame () {
    points=0;
    round=1;
    initRound();
}

private void initRound() {
    countdown = 10;
    update();
}

private void update () {
    fillTextView(R.id.points, Integer.toString(points));
    fillTextView(R.id.round, Integer.toString(round));
    fillTextView(R.id.countdown, Integer.toString(countdown * 1000));
}

private void fillTextView (int id, String text) {
    TextView tv = (TextView) findViewById(id);
    tv.setText(text);
}

private void showStartFragment() {
    ViewGroup container = (ViewGroup) findViewById(R.id.container);
    container.removeAllViews();
    container.addView(
            getLayoutInflater().inflate(R.layout.fragment_start, null) );
    container.findViewById(R.id.start).setOnClickListener(this);
}

@Override
public void onClick(View view) {
    if(view.getId() == R.id.start) {
        startGame();
    }
}

public void startGame() {
    newGame();
}
}
4b9b3361

Ответ 1

Проблема заключается в tv.setText(текст). Переменная tv, вероятно, является нулевой, и вы вызываете метод setText на этом нуле, который вы не можете. Я предполагаю, что проблема заключается в методе findViewById, но его здесь нет, поэтому я не могу сказать больше, без кода.

Ответ 2

Вот ваша проблема:

private void fillTextView (int id, String text) {
    TextView tv = (TextView) findViewById(id);
    tv.setText(text); // tv is null
}

- > (TextView) findViewById (id);//возвращает null Но из вашего кода я не могу найти, почему этот метод возвращает null. Попробуйте отследить, какой идентификатор вы укажете в качестве параметра и если это представление с указанным идентификатором существует.

Сообщение об ошибке очень понятно и даже сообщает вам, какой метод. Из документации:

public final View findViewById (int id)
    Look for a child view with the given id. If this view has the given id, return this view.
    Parameters
        id  The id to search for.
    Returns
        The view that has the given id in the hierarchy or null

http://developer.android.com/reference/android/view/View.html#findViewById%28int%29

Другими словами: у вас нет представления с идентификатором, который вы укажете в качестве параметра.

Ответ 3

private void fillTextView (int id, String text) {
    TextView tv = (TextView) findViewById(id);
    tv.setText(text);
}

Если вы получаете исключение нулевого указателя, не было обнаружено никакого представления для id, который вы передали в findViewById(), и фактическое исключение возникает при попытке вызвать функцию setText() on null. Вы должны опубликовать свой XML для R.layout.activity_main, так как трудно сказать, где все пошло не так, просто взглянув на ваш код.

Дополнительная информация о нулевых указателях: Что такое исключение NullPointerException и как его исправить?