Приложение сбой каждый раз, когда я добавляю функциональность в TextViews [duplicate]

Наряду с попыткой всего, что предлагает Teo Chuen Wei Bryan, убедитесь, что вы также ссылаетесь на правильное имя Server / Instance в строке подключения.

Если вы используете краткую форму имени хоста / экземпляра на сервере базы данных или в файле web.config, убедитесь, что вы используете полное доменное имя (FQDN) / экземпляр

Кроме того, чтобы проверить подключение с сервера, на котором нет клиента SQL-сервера,

-> создать текстовый файл и изменить его расширение файла на .udl

-> Щелкните правой кнопкой мыши файл, и вы увидите вкладку подключения.

-> Введите имя сервера и зарегистрируйте информацию для проверки соединения с сервером базы данных.

Надеюсь, это поможет.

39
задан weston 4 February 2017 в 15:33
поделиться

10 ответов

findViewById() возвращает вид, если он существует в макете, указанном в setContentView(), в противном случае он возвращает null, и это то, что происходит с вами.

Пример, если вы setContentView(R.layout.activity_first);, а затем вызовите findViewById(R.id.first_View); он вернет представление, которое является вашим макетом.

Но если вы выберете findViewById(R.id.second_View);, он вернет null, поскольку на вашем макете activity_first.xml нет представления, называемого @+id/second_View.

69
ответ дан cricket_007 18 August 2018 в 23:11
поделиться
  • 1
    Я включил все макеты в основной макет, и у меня больше нет исключения с указателем на указатель. Спасибо за совет. – user2629828 29 September 2013 в 15:01
  • 2
    Когда я использовал это в другом представлении, отличном от отображаемого в настоящее время вида, этот появился. Чтобы преодолеть это нежелательное поведение, я назвал представление без использования setContentView следующим образом. layout1 = (LinearLayout) View.inflate (это, R.layout.first_View, null); Затем, чтобы получить доступ к чему-либо внутри, я мог бы использовать Button botton = (Button) layout1.findViewById (R.id.button1); Просто добавив, чтобы это помогло кому-то. – isuru chathuranga 24 August 2014 в 14:08
  • 3
    Зачем? В чем преимущество форсирования нас? – Niklas Rosencrantz 21 November 2017 в 07:38

Добавлен акцент

Для этих случаев в классе Activity.

Activity.findViewById(int id)

Находит представление, которое было идентифицировано атрибутом id из XML, обработанного в onCreate(Bundle).


В противном случае, например, фрагмент, адаптер, View из LayoutInflater и т. д.

View.findViewById(int id)

Ищите вид ребенка с данным id. Если это представление имеет данный идентификатор, верните это представление.


В любом случае,

Возвращает представление, если найдено, или null в противном случае.


Теперь перепроверьте ваши XML-файлы. Убедитесь, что вы ввели правильное значение в setContentView или inflater.inflate.

В случае действия вызовите findViewById после setContentView.

Затем убедитесь, что в этом макете есть вид, который вы ищете с помощью android:id="@+id/...". Убедитесь, что + находится в @+id, который добавит ресурс в значения R.id, чтобы убедиться, что вы можете найти его на Java.

1
ответ дан 2 revs 18 August 2018 в 23:11
поделиться

Что сказал @Warlock, это правильно, вы должны сначала создать LinearLayout layout1, layout2, layout3 правильным способом:

LinearLayout layout1 = (LinearLayout) View.inflate(this, R.layout.first_View, null);
LinearLayout layout2 = (LinearLayout) View.inflate(this, R.layout.second_View, null);
LinearLayout layout3 = (LinearLayout) View.inflate(this, R.layout.third, null);

пожелать, чтобы моя консультация вам

0
ответ дан ArronXY 18 August 2018 в 23:11
поделиться

В моем случае это была глупая ошибка с моей стороны. Я написал код в методе OnCreate, но он был выше строки кода setContentView. Когда я переместил код ниже этой строки, приложение начало работать нормально.

setContentView(R.layout.activity_main);
0
ответ дан IKavanagh 18 August 2018 в 23:11
поделиться

В Android findViewById(R.id.some_id) работает, когда вы находите вид в макете.

То есть, если вы установили макет, скажите:

setContentView(R.layout.my_layout);

Просмотров могут можно найти только в этом макете (my_layout).

В вашем коде layout1, layout2, layout3 все три разных макета, и они не настроены на активность.

0
ответ дан MrLore 18 August 2018 в 23:11
поделиться

добавьте эти представления в адаптер пейджера, прежде чем обращаться к ним.

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

    adapter = new MyPagerAdapter();
    pager = (ViewPager) findViewById(R.id.main_pager);
    pager.setAdapter(adapter);

    layout1 = (LinearLayout) findViewById(R.id.first_View);
    layout2 = (LinearLayout) findViewById(R.id.second_View);
    layout3 = (LinearLayout) findViewById(R.id.third_View);

}

в адаптере пейджера:

public Object instantiateItem(View collection, int position) {
    if(position == 0){
        View layout = inflater.inflate(R.layout.activity_first, null);

        ((ViewPager) collection).addView(layout);

        return layout;
    } 
    ... and so forth.

}

отсюда вы можете получить к ним доступ через findViewById.

1
ответ дан nebulae 18 August 2018 в 23:11
поделиться

Я получил эту ошибку сегодня, и было так просто очистить, что я «facepalmed».

Просто попробуйте добавить элемент пользовательского интерфейса в свой XML-файл макета в каталоге res / layout-port !!!

1
ответ дан some_nick 18 August 2018 в 23:11
поделиться

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

@Override
public Object instantiateItem(ViewGroup collection, int position) {
    LinearLayout l = null;

    if (position == 0) {
        l = (LinearLayout) View.inflate(this, R.layout.activity_first, null);
    }
    if (position == 1) {
        l = (LinearLayout) View.inflate(this, R.layout.activity_second, null);
    }
    if (position == 2) {
        l = (LinearLayout) View.inflate(this, R.layout.activity_third, null);
    }

    collection.addView(l, position);
    return l;
}
2
ответ дан ssantos 18 August 2018 в 23:11
поделиться
  • 1
    Как получить доступ к представлениям в вашей основной деятельности? – Denny 11 February 2017 в 16:13

Метод findViewById должен найти то, что находится в макете (которую вы вызывали в setContentView)

0
ответ дан Vasily Kabunov 18 August 2018 в 23:11
поделиться

Иногда вам нужно очистить свой проект в Eclipse (Project - Clean ..).

0
ответ дан Vlad 18 August 2018 в 23:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: