Nano Hash - криптовалюты, майнинг, программирование

Исключение нулевого указателя Android SetText

Я только начал разработку Android, и я уверен, что вы можете помочь с этим (извините за мой плохой английский)

У меня есть основное действие, и в определенный момент я хочу вызвать другое действие, в котором хочу изменить текстовое представление с некоторым сообщением. В этот момент я получаю исключение нулевого указателя, если я не помещаю setContentView (R.layout.register);

Но когда я помещаю эту строку, я на миллисекунду правильно вижу действие регистрации с моим новым текстом «Android2», а затем снова перехожу к действию регистрации без текста. Я имею в виду, я рисую это дважды. Я надеюсь, что объяснил достаточно.

Вопрос в том, куда мне поставить setcontentview и с каким макетом.

Большое спасибо, Даниил

Я покажу вам код:

Моя основная деятельность имеет этот метод:

  protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {

        if (requestCode == REQUEST_CODE && resultCode == RESULT_OK)
        {
            Intent i = new Intent(this, register.class);
            startActivity(i);       

            setContentView(R.layout.register);
            TextView text = (TextView) findViewById(R.id.texto);

            try {
                text.setText("Android2");
                }catch(Exception e) {
                    Log.i("Log", e.getMessage()+"Error!"); // LogCat message
                }
        }
        //super.onActivityResult(requestCode, resultCode, data);
    }

Мой второй класс активности, называемый регистром:

public class register extends Activity {
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.register);
   }
}

Интерфейс реестра — register.xml.

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

    <TextView
        android:id="@+id/about_content"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="@string/register" />

    <TextView
        android:id="@+id/texto"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/continue_button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/save" />

        <Button
            android:id="@+id/new_button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/repeat" />
    </LinearLayout>

</LinearLayout>
22.04.2012

  • можете ли вы вставить свой общий код в первое действие, есть ли у вас onCreate или нет? 22.04.2012

Ответы:


1

В основном вы делаете следующее:

  1. вы готовите намерение начать другую деятельность
  2. вы начинаете деятельность, для которой подготовили намерение
  3. вы устанавливаете содержимое текущего действия в R.layout.register
  4. вы получаете textView (в текущей деятельности)
  5. вы устанавливаете текст textView на Android2

И в этот момент на экране появляется новая активность. Обратите внимание, что ваш код неверен, так как вы манипулируете элементами пользовательского интерфейса в текущем действии и ожидаете изменений во вновь запущенном действии.

Переместите этот код

TextView text = (TextView) findViewById(R.id.texto);

try {
    text.setText("Android2");
}catch(Exception e) {
    Log.i("Log", e.getMessage()+"Error!"); // LogCat message
}

к методу onCreate() действия регистрации.

Кстати, обычно, когда вы создаете класс, его имя должно начинаться с заглавной буквы в соответствии со стандартами.

22.04.2012
  • Большое спасибо за Вашу помощь. Я действительно ценю это. Даниэль. 22.04.2012
  • А также проверьте это как ответ, если вы считаете это ответом. Спасибо 23.04.2012

  • 2

    У вас два разных занятия. Один из них использует представление register.xml, а второй пытается получить доступ к представлению регистра. Представление существует только в вашей активности "register". Другая деятельность, кажется, не имеет представления? Вероятно, поэтому вы получаете NULL.

    Вы должны объединить эти два класса вместе, поскольку похоже, что вы пытаетесь получить доступ к texto из одного и того же представления.

    Итак, подведем итог: findViewById следует вызывать из действия, вызывающего setContentView.

    22.04.2012
  • Большое спасибо за Вашу помощь. Я действительно ценю это. Даниэль. 22.04.2012

  • 3

    Удалите эту строку, и она должна работать

       startActivity(i); 
    

    Не уверен, почему вы называете это внешней деятельностью.

    В противном случае переместите код ниже в свой класс регистрации.

    setContentView(R.layout.register);
            TextView text = (TextView) findViewById(R.id.texto);
    
            try {
                text.setText("Android2");
                }catch(Exception e) {
                    Log.i("Log", e.getMessage()+"Error!"); // LogCat message
                }
        }
    
    22.04.2012
  • Большой! это работает, теперь мне интересно, перенесу ли я этот фрагмент кода в другое действие, как передать значение сообщения, которое теперь является тестовым текстом Android2, который я знаю только в своем основном классе? Спасибо, Даниэль. 22.04.2012
  • О, я должен поблагодарить вас, так что setContentView должен быть выше всего почти 18.04.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..