Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
MODifikaTOR18
0 / 0 / 1
Регистрация: 26.05.2016
Сообщений: 80
Завершенные тесты: 1
#1

Ошибка java.lang.ClassCastException: com.organizer.ToDoItemDescr cannot be cast to java.util.Map - Программирование Android

22.03.2017, 12:00. Просмотров 603. Ответов 11
Метки нет (Все метки)

Ошибка появляется когда пытаюсь вытянуть из кастомного адаптера запись ListView. Весь лог ошибки такой:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
FATAL EXCEPTION: main
Process: com.organizer, PID: 11828
java.lang.ClassCastException: com.organizer.ToDoItemDescr cannot be cast to java.util.Map
at com.organizer.todo_manager_try001$1.onItemClick(todo_manager_try001.java:343)
at android.widget.AdapterView.performItemClick(AdapterView.java:300)
at android.widget.AbsListView.performItemClick(AbsListView.java:1180)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3217)
at android.widget.AbsListView$3.run(AbsListView.java:4133)
at android.os.Handler.handleCallback(Handler.java:810)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:189)
at android.app.ActivityThread.main(ActivityThread.java:5535)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:950)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:745)
Ругается на класс, в котором происходит инициализация переменных адаптера:
http://www.cyberforum.ru/android-dev/thread1979110.html
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
public class ToDoItemDescr extends todo_manager_try001 {
    String item_header;
    String item_body;
    boolean item_status;
    String item_id;
 
    ToDoItemDescr(String _item_header, String _item_body, boolean _item_status, String _item_id) {
        item_header = _item_header;
        item_body = _item_body;
        item_status = _item_status;
        item_id = _item_id;
    }
}
Сама ошибка возникает в этой функции:
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
Map element;//объявление глобальное
 
protected void On_ToDo_List_Click (ListView list) {
        Log.w(LOG_TAG, "Назначение слушателя листу " + list);
        list_todo.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Log.w(LOG_TAG, "Поймал!");
 
                element = (Map<String, String>)todoadapter.getItem(position); //здесь программа крашится
 
                ID = element.get("ID").toString();
                Log.w(LOG_TAG, "Извлечённый ID элемента - " + ID);
 
                head = element.get("Header").toString();
                Log.w(LOG_TAG, "Извлечённый заголовок элемента - " + head);
 
                body = element.get("Body").toString();
                Log.w(LOG_TAG, "Извлечённое тело элемента - " + body);
 
                status = Integer.parseInt(element.get("Active").toString());
                Log.w(LOG_TAG, "Извлечённое состояние элемента - " + status);
 
                Send_To_Edit_Window(head, body, status);
            }
        });
    }
Как мне решить эту проблему?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2017, 12:00
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Ошибка java.lang.ClassCastException: com.organizer.ToDoItemDescr cannot be cast to java.util.Map (Программирование Android):

Java.lang.ClasscastException
Пишу на андроид, но не суть. Есть один класс, наследующий от application,...

Ошибка java.util.zip.ZipException duplicate entry
Добрый день! Очень прошу помочь выходит такая ошибка, как исправить?...

Ошибка java.lang.NullPointerException
Помогите решать проблему. ошибку на этом строке указывает selected =...

Ошибка java.lang.NullPointerException
Возникает ошибка при объявлении строкового массива, я проверил, в файле string...

Ошибка java.lang.OutOfMemoryError
Здравствуйте. В приложении частенько выскакивает ошибки...

11
Pablito
2645 / 2127 / 726
Регистрация: 12.05.2014
Сообщений: 7,436
Завершенные тесты: 1
22.03.2017, 12:30 #2
а почему каст в Map, почему, например, не в Fragmentmanager или в Activity?
просто интересно, что должно твориться в голове человека, который берет ОДИН айтем из адаптера и пытается его кастовать в мапу
0
MODifikaTOR18
0 / 0 / 1
Регистрация: 26.05.2016
Сообщений: 80
Завершенные тесты: 1
22.03.2017, 14:12  [ТС] #3
Паблито, я по примеру на сайтах делал. А как иначе вытащить значения полей элемента в переменную?
0
shavuz
114 / 120 / 25
Регистрация: 29.01.2014
Сообщений: 596
22.03.2017, 18:24 #4
Цитата Сообщение от MODifikaTOR18 Посмотреть сообщение
А как иначе вытащить значения полей элемента в переменную
Что лежит в айтеме адаптера? то и вытягивайте . я так понял что в адаптере лежат ToDoItemDescr-ы , и из кода я не понял что он МAP, может я ошибаюсь, не понятно что у вас в todo_manager_try001.

отметьте мышкой этот кусок кода - todoadapter.getItem(position), и нажмите альт+контрол+V , система сама создаст переменную для выделенного куска кода.


и еще. не по теме todo_manager_try001- такими именами называются хмли.
On_ToDo_List_Click нижнее тире не используется в имени метода,класса или чегото еще кроме ресурса
Цитата Сообщение от MODifikaTOR18 Посмотреть сообщение
Map element;//объявление глобальное
в глобальном обьявлении надо переменные назвать с буквой м - мЭмбер, вот так mElement
0
MODifikaTOR18
0 / 0 / 1
Регистрация: 26.05.2016
Сообщений: 80
Завершенные тесты: 1
22.03.2017, 19:10  [ТС] #5
shavuz, ToDoItemDescr - это класс, который описывает инициализацию переменных адаптера. А todo_manager_try001 это класс активности, в нём почти весь код расположен кроме адаптера и описания.
Так как мне вытянуть элемент ListView'а?
0
shavuz
114 / 120 / 25
Регистрация: 29.01.2014
Сообщений: 596
22.03.2017, 19:12 #6
отметьте мышкой этот кусок кода - todoadapter.getItem(position), и нажмите альт+контрол+V , система сама создаст переменную для выделенного куска кода.
0
MODifikaTOR18
0 / 0 / 1
Регистрация: 26.05.2016
Сообщений: 80
Завершенные тесты: 1
23.03.2017, 08:52  [ТС] #7
shavuz, переменную создал, ошибка та же. Сменил метод getItem на getToDoItem:
Java
1
2
3
ToDoItemDescr getToDoItem(int pos) {
    return ((ToDoItemDescr) getItem(pos));
}
Ничего не изменилось. У самого объекта подходящих команд не нашёл. Нашёл нормальную библиотеку по преобразованию Object в Map, но подключить не могу. Как мне её подключить, либо просто вытащить мои значения из элемента?
0
Вложения
Тип файла: zip jackson-master.zip (53.0 Кб, 0 просмотров)
shavuz
114 / 120 / 25
Регистрация: 29.01.2014
Сообщений: 596
23.03.2017, 08:55 #8
покажите код адаптера
0
MODifikaTOR18
0 / 0 / 1
Регистрация: 26.05.2016
Сообщений: 80
Завершенные тесты: 1
23.03.2017, 09:01  [ТС] #9
shavuz, сам адаптер:
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package com.diplom.modifikator.organizer;
 
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
 
import java.util.ArrayList;
import java.util.HashMap;
 
/**
 * Created by MODifikaTOR on 20.03.2017.
 */
 
public class ToDoAdapter extends BaseAdapter {
    Context cont;
    LayoutInflater inflater;
    ArrayList<ToDoItemDescr> item_parts;
    HashMap<String, String> map;
 
    ToDoAdapter(Context context, ArrayList<ToDoItemDescr> items) {
        cont = context;
        item_parts = items;
        inflater = (LayoutInflater) cont.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 
    }
 
    public int getCount() {
        return item_parts.size();
    }
 
    public Object getItem (int pos) {
        return item_parts.get(pos);
    }
 
    public long getItemId(int pos) {
        return pos;
    }
 
    public View getView(int pos, View convertView, ViewGroup parent) {
        View view = convertView;
        if (view == null) {
            view = inflater.inflate(android.R.layout.simple_list_item_2, parent, false); //R.layout.todo_list_item_try_2
        }
 
        ToDoItemDescr did = getToDoItem(pos);
 
        ((TextView) view.findViewById(android.R.id.text1)).setText(did.item_header);
        ((TextView) view.findViewById(android.R.id.text2)).setText(did.item_body);
//        ((Switch) view.findViewById(R.id.switch1)).setChecked(did.item_status);
        if (did.item_status == true) {
            ((TextView) view.findViewById(android.R.id.text1)).setTextColor(Color.GREEN); //#12d148
            ((TextView) view.findViewById(android.R.id.text2)).setTextColor(Color.GREEN);
        }
        else {
            ((TextView) view.findViewById(android.R.id.text1)).setTextColor(Color.RED); //#12d148
            ((TextView) view.findViewById(android.R.id.text2)).setTextColor(Color.RED);
        }
//
        return view;
    }
 
    ToDoItemDescr getToDoItem(int pos) {
        return ((ToDoItemDescr) getItem(pos));
    }
 
}
Описание аргументов адаптера:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package com.diplom.modifikator.organizer;
 
/**
 * Created by MODifikaTOR on 20.03.2017.
 */
 
public class ToDoItemDescr extends todo_manager_try001 {
    String item_header;
    String item_body;
    boolean item_status;
    String item_id;
 
    ToDoItemDescr(String _item_header, String _item_body, boolean _item_status, String _item_id) {
        item_header = _item_header;
        item_body = _item_body;
        item_status = _item_status;
        item_id = _item_id;
    }
}
0
shavuz
114 / 120 / 25
Регистрация: 29.01.2014
Сообщений: 596
23.03.2017, 09:05 #10
Лучший ответ Сообщение было отмечено MODifikaTOR18 как решение

Решение

в 35 строке должен быть не обджект а тудуайтемдескр. и чтоб получить айте надо написать TodoItemDesce todoitemdescr = todoadapter.getItem(position);
1
MODifikaTOR18
0 / 0 / 1
Регистрация: 26.05.2016
Сообщений: 80
Завершенные тесты: 1
23.03.2017, 09:14  [ТС] #11
shavuz, только что до этого додумался)
Сейчас проверю
0
shavuz
114 / 120 / 25
Регистрация: 29.01.2014
Сообщений: 596
23.03.2017, 10:41 #12
Цитата Сообщение от MODifikaTOR18 Посмотреть сообщение
Сейчас проверю
проверил?
0
23.03.2017, 10:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.03.2017, 10:41
Привет! Вот еще темы с решениями:

Ошибка activity_main.xml: java.lang.System.arraycopy([CI[CII)V
При перетягивании из Text Field любой виюшки появляется Error...

Ошибка java.lang.NullPointerException: Attempt to invoke virtual method
Помогите, пожалуйста. Делал приложение на андроид для установки обоев и когда...

Ошибка: java.lang.NullPointerException: Attempt to invoke virtual method
Что исправить ошибку? java.lang.NullPointerException: Attempt to invoke...

Ava.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String[] link.stuzer.stattrack.data
// Print out the database as array public String getAllWeapons(){ ...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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