Проблема с View.findViewById (int) 'для пустой ссылки на объект - PullRequest
0 голосов
/ 29 апреля 2020
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
        at com.test.apptest.Home.HomePageActivity.onCreateOptionsMenu(HomePageActivity.java:366)

Строка 366 была:

ImageView searchIcon = (ImageView)searchView.findViewById(R.id.search_mag_icon);

Очевидно, я пытаюсь использовать ссылку на объект, который имеет нулевое значение. Я пытаюсь понять, где проблема, здесь я разделяю часть фрагмента:

HomePageActivity. java

@Override
public boolean onCreateOptionsMenu(final Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.

    getMenuInflater().inflate(R.menu.home, menu);
    MenuItem myActionMenuItem = menu.findItem(R.id.action_search);
    Drawable drawable = menu.findItem(R.id.action_search).getIcon();
    if (drawable != null) {
        drawable.mutate();
        drawable.setColorFilter(Color.parseColor(sharedObjects.getPrimaryColor()), PorterDuff.Mode.SRC_ATOP);
    }
    final SearchView searchView = (SearchView) myActionMenuItem.getActionView();
    ImageView searchIcon = (ImageView)searchView.findViewById(R.id.search_mag_icon); // <-- Here is the error
    searchIcon.setColorFilter(Color.parseColor(sharedObjects.getPrimaryColor()));

    ImageView searchClose = searchView.findViewById(R.id.search_close_btn);
    searchClose.setColorFilter(Color.parseColor(sharedObjects.getPrimaryColor()));
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    EditText searchEditText = (EditText) searchView.findViewById(R.id.search_src_text);
    searchEditText.setTextColor(Color.BLACK);
    searchEditText.setHintTextColor(Color.parseColor(sharedObjects.getFooterColor()));

   searchEditText.setTextColor(Color.parseColor(sharedObjects.getPrimaryColor()));
    searchEditText.setDrawingCacheBackgroundColor(Color.parseColor(sharedObjects.getPrimaryColor()));
    searchEditText.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor(sharedObjects.getPrimaryColor())));
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    searchView.setIconifiedByDefault(true);
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            Log.e("Submit", query);

            (menu.findItem(R.id.action_search)).collapseActionView();
            Intent intent = new Intent(HomePageActivity.this, SearchActivity.class);
            intent.putExtra(AppConstants.KEYWORD, query);
            startActivity(intent);
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            Log.e("TextChange", newText);
            return false;
        }
    });
    return true;
}

ОБНОВЛЕНИЕ

Это полный код:

activity_homepage. xml: https://www.codepile.net/pile/X5yWyp18

HomePageactivity . java: https://www.codepile.net/pile/oJyYQWJK

Буду признателен за любую помощь, я расследую весь день

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

Сначала проверьте, если myActionMenuItem.getActionView() возвращает ноль или нет.

, если myActionMenuItem.getActionView() не равно нулю, попробуйте заменить свой findViewById searchIcon на

ImageView searchIcon = (ImageView)searchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon);
0 голосов
/ 29 апреля 2020

Из трассировки стека видно, что объект searchView, для которого вы пытаетесь вызвать метод findViewById(R.id.search_mag_icon), является нулевым. Итак, чтобы исправить эту ошибку:

  • Добавить нулевую проверку для объектов, которые используются как Java, не является пустым.
  • Определить код, который создает объект экземпляра для SearchView и почему он установлен как null.

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

...