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

Ошибка java.lang.ClassCastException: com.organizer.ToDoItemDescr cannot be cast to java.util.Map

22.03.2017, 12:00. Просмотров 1028. Ответов 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)
Ругается на класс, в котором происходит инициализация переменных адаптера:
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
Ответы с готовыми решениями:

Ошибка: Caused by Android java.lang.ClassCastException: android.app.Application cannot be cast
Здравствуйте. Очень нужен ваш совет. При запуске приложения появляется ошибка: Caused by:...

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

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

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

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

11
Pablito
2812 / 2236 / 754
Регистрация: 12.05.2014
Сообщений: 7,824
Завершенные тесты: 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 / 26
Регистрация: 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 / 26
Регистрация: 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 Кб, 1 просмотров)
shavuz
114 / 120 / 26
Регистрация: 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 / 26
Регистрация: 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 / 26
Регистрация: 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

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

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

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


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

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

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