Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
mak95
0 / 0 / 0
Регистрация: 15.03.2015
Сообщений: 27
#1

NullPointerException при поиске ListView - Программирование Android

21.06.2015, 18:56. Просмотров 334. Ответов 6
Метки нет (Все метки)

Здравствуйте! Есть список (ListView), заполненный данными, есть строка поиска (EditText). Список отображается верно, но если ввести любой символ - возникает NullPointerException:

MainActivity.java:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
public class MainActivity extends Activity
{
    EditText edit;
    ListView lv;
    SimpleAdapter aa;
    ArrayList<HashMap<String, Object>> al;
    
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        HashMap<String, Object> hm;
        al = new ArrayList<HashMap<String,Object>>();
        String products[] = {"Dell Inspiron", "HTC One X", "HTC Wildfire S", "HTC Sense",
                "HTC Sensation XE", "iPhone 4S", "Samsung Galaxy Note 800", 
                "Samsung Galaxy S3", "MacBook Air", "Mac Mini", "MacBook Pro"};
        String from[] = { "name", "img" };
        int to[] = { R.id.text1, R.id.img };
        
        for(int i = 0; i < products.length; i++)
        {
            hm = new HashMap<String, Object>();
            hm.put("name", products[i]);
            hm.put("img", R.drawable.ic_launcher);
            al.add(hm);
        }
        
        edit = (EditText)findViewById(R.id.editText1);
        lv = (ListView)findViewById(R.id.listView1);
        
        aa = new SimpleAdapter(this, al, R.layout.list_item, from, to);
        lv.setAdapter(aa);
        
        edit.addTextChangedListener(new TextWatcher() {
            
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                aa.getFilter().filter(s.toString());
            }
            
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after)
            {
            }
            
            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub
                
            }
        });
    }
}


activity_main.xml:
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
 
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >
 
        <EditText
            android:id="@+id/editText1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10" >
 
            <requestFocus />
        </EditText>
 
    </LinearLayout>
 
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
 
        <ListView
            android:id="@+id/listView1"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >
        </ListView>
 
    </LinearLayout>
 
</LinearLayout>


list_item.xml:
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >
 
   <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="5"
        android:orientation="vertical" >
 
        <TextView
            android:id="@+id/text1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="This is Title"
            android:textSize="22sp" />
 
 
    </LinearLayout>
 
    <ImageView
        android:id="@+id/img"
        android:layout_width="50dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:src="@drawable/ic_launcher" />
 
</LinearLayout>


Логи:
0
Миниатюры
NullPointerException при поиске ListView  
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2015, 18:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос NullPointerException при поиске ListView (Программирование Android):

Сохранение position элемента ListView при поиске - Программирование Android
Если можно подробно описать и показать пример кода не посредственно показывающего сохранение позиции конкретного элемента ListView. т.к....

Приложение с ListView падает с NullPointerException - Программирование Android
Нужно было создать список с помощью ListView (На одной странице вводится домашняя работа, на другой выводится). Создал 2 подобные...

NullPointerException при доступе к локальной БД - Программирование Android
Вот такая вот ошибка. Вот такой вот код (public class DatabaseHelper extends SQLiteOpenHelper implements BaseColumns{) public int...

NullpointerException при записи файла - Программирование Android
NullpointerException в чем проблема может быть? BufferedWriter fs = new BufferedWriter(new...

Выкидывает NullPointerException при заполнении данных через ArrayAdapter - Программирование Android
Заполняю данные из массива Food.foods с помощью ArrayAdapter в ListView макета activity_food_category.xml. При заполнении выкидывает ошибку...

java.lang.nullpointerexception при создании нового проекта - Программирование Android
Доброго времени суток, собственно вопрос состоит в том что при создании нового проекта в эклипсе появляетса...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
androbro
326 / 286 / 60
Регистрация: 17.10.2014
Сообщений: 843
21.06.2015, 19:54 #2
mak95, class cast exception у Вас в фильтре. Integer не может привести к String
а ниже у вас еще ошибка или что???
вообще по хорошему лог приводите, а не скрин!
1
mak95
0 / 0 / 0
Регистрация: 15.03.2015
Сообщений: 27
21.06.2015, 20:12  [ТС] #3
Прошу прощения, вот лог:
Кликните здесь для просмотра всего текста
06-21 20:10:35.548: W/Filter(4368): An exception occured during performFiltering()!
06-21 20:10:35.548: W/Filter(4368): java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
06-21 20:10:35.548: W/Filter(4368): at android.widget.SimpleAdapter$SimpleFilter.performFiltering(SimpleAdapter.java:352)
06-21 20:10:35.548: W/Filter(4368): at android.widget.Filter$RequestHandler.handleMessage(Filter.java:234)
06-21 20:10:35.548: W/Filter(4368): at android.os.Handler.dispatchMessage(Handler.java:99)
06-21 20:10:35.548: W/Filter(4368): at android.os.Looper.loop(Looper.java:137)
06-21 20:10:35.548: W/Filter(4368): at android.os.HandlerThread.run(HandlerThread.java:60)
06-21 20:10:35.618: D/AndroidRuntime(4368): Shutting down VM
06-21 20:10:35.618: W/dalvikvm(4368): threadid=1: thread exiting with uncaught exception (group=0x40a611f8)
06-21 20:10:35.628: E/AndroidRuntime(4368): FATAL EXCEPTION: main
06-21 20:10:35.628: E/AndroidRuntime(4368): java.lang.NullPointerException
06-21 20:10:35.628: E/AndroidRuntime(4368): at android.widget.SimpleAdapter.getCount(SimpleAdapter.java:93)
06-21 20:10:35.628: E/AndroidRuntime(4368): at android.widget.AdapterView.checkFocus(AdapterView.java:700)
06-21 20:10:35.628: E/AndroidRuntime(4368): at android.widget.AdapterView$AdapterDataSetObserver.onInvalidated(AdapterView.java:823)
06-21 20:10:35.628: E/AndroidRuntime(4368): at android.widget.AbsListView$AdapterDataSetObserver.onInvalidated(AbsListView.java:5612)
06-21 20:10:35.628: E/AndroidRuntime(4368): at android.database.DataSetObservable.notifyInvalidated(DataSetObservable.java:47)
06-21 20:10:35.628: E/AndroidRuntime(4368): at android.widget.BaseAdapter.notifyDataSetInvalidated(BaseAdapter.java:59)
06-21 20:10:35.628: E/AndroidRuntime(4368): at android.widget.SimpleAdapter$SimpleFilter.publishResults(SimpleAdapter.java:383)
06-21 20:10:35.628: E/AndroidRuntime(4368): at android.widget.Filter$ResultsHandler.handleMessage(Filter.java:282)
06-21 20:10:35.628: E/AndroidRuntime(4368): at android.os.Handler.dispatchMessage(Handler.java:99)
06-21 20:10:35.628: E/AndroidRuntime(4368): at android.os.Looper.loop(Looper.java:137)
06-21 20:10:35.628: E/AndroidRuntime(4368): at android.app.ActivityThread.main(ActivityThread.java:4575)
06-21 20:10:35.628: E/AndroidRuntime(4368): at java.lang.reflect.Method.invokeNative(Native Method)
06-21 20:10:35.628: E/AndroidRuntime(4368): at java.lang.reflect.Method.invoke(Method.java:511)
06-21 20:10:35.628: E/AndroidRuntime(4368): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
06-21 20:10:35.628: E/AndroidRuntime(4368): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
06-21 20:10:35.628: E/AndroidRuntime(4368): at dalvik.system.NativeStart.main(Native Method)


Можете подсказать как ее можно исправить в данном случае, или носом тыкнуть в нужную сторону где копать?
0
androbro
326 / 286 / 60
Регистрация: 17.10.2014
Сообщений: 843
22.06.2015, 09:20 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
mak95, в общем на этой строчке кода падает 352:
Java
1
String str =  (String)h.get(mFrom[j]);
если так подумать, то все логично, т.к. реализация стандартная, то он хочет искать по всем наборам данных(массивам), по String[] все нормально, а второй набор int[] не кастуется к стрингу.

Мне выходи видится в реализации собственного адаптера с фильтром.
1
mak95
0 / 0 / 0
Регистрация: 15.03.2015
Сообщений: 27
22.06.2015, 11:02  [ТС] #5
Подскажите пожалуйста, как можно осуществить поиск только по String.
0
androbro
326 / 286 / 60
Регистрация: 17.10.2014
Сообщений: 843
22.06.2015, 11:15 #6
Цитата Сообщение от mak95 Посмотреть сообщение
Подскажите пожалуйста, как можно осуществить поиск только по String.
я уже написал
Цитата Сообщение от androbro Посмотреть сообщение
Мне выходи видится в реализации собственного адаптера с фильтром.
1
mak95
0 / 0 / 0
Регистрация: 15.03.2015
Сообщений: 27
22.06.2015, 11:20  [ТС] #7
а, ясно, спасибо за помощь) буду копать
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.06.2015, 11:20
Привет! Вот еще темы с ответами:

ListView: сбивается содержимое ImageView элемента при скроллинге + как сделать выделение пункта списка при нажатии? - Программирование Android
1. Есть свой класс ContactsSimpleCursorAdapter, в методе public void bindView(View view, Context context, Cursor c) которого происходит...

Как изменить цвет пункта ListView при нажатии на него и сохранять его цвет при проматывании списка? - Программирование Android
Здравствуйте, подскажите, пожалуйста, как изменить цвет пункта ListView при нажатии на него и сохранять его цвет при проматывании списка? ...

Цвет ListView при скролинге - Программирование Android
Добрый день. Есть ListView с белым фоном, на время скролинга фон становиться черным, буквы белым. Где то можно настроить цвет на время...

ListView ошибка при прокручивании - Программирование Android
Читаю с json файла данные и добавляю их в ListView, первые 5 отображаются, а когда начинаю прокручивать вниз он выбивает ошибку. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.06.2015, 11:20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru