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

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

Войти
Регистрация
Восстановить пароль
 
MODifikaTOR18
0 / 0 / 0
Регистрация: 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. Просмотров 376. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка java.lang.ClassCastException: com.organizer.ToDoItemDescr cannot be cast to java.util.Map (Программирование Android):

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

Java.lang.ClasscastException - Программирование Android
Пишу на андроид, но не суть. Есть один класс, наследующий от application, например MyApp. В MainActivity (главном рабочем, стартовом классе...

Ошибка java.lang.NullPointerException - Программирование Android
Возникает ошибка при объявлении строкового массива, я проверил, в файле string все данные есть Лог ошибки: 07-31 15:25:38.258...

Ошибка java.lang.OutOfMemoryError - Программирование Android
Здравствуйте. В приложении частенько выскакивает ошибки java.lang.OutOfMemoryError BitmapFactory.nativeDecodeAsset() и...

Ошибка: java.lang.NullPointerException: Attempt to invoke virtual method - Программирование Android
Что исправить ошибку? java.lang.NullPointerException: Attempt to invoke virtual method 'void...

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

11
Pablito
2580 / 2061 / 643
Регистрация: 12.05.2014
Сообщений: 7,232
Завершенные тесты: 1
22.03.2017, 12:30 #2
а почему каст в Map, почему, например, не в Fragmentmanager или в Activity?
просто интересно, что должно твориться в голове человека, который берет ОДИН айтем из адаптера и пытается его кастовать в мапу
0
MODifikaTOR18
0 / 0 / 0
Регистрация: 26.05.2016
Сообщений: 80
Завершенные тесты: 1
22.03.2017, 14:12  [ТС] #3
Паблито, я по примеру на сайтах делал. А как иначе вытащить значения полей элемента в переменную?
0
shavuz
114 / 120 / 23
Регистрация: 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 / 0
Регистрация: 26.05.2016
Сообщений: 80
Завершенные тесты: 1
22.03.2017, 19:10  [ТС] #5
shavuz, ToDoItemDescr - это класс, который описывает инициализацию переменных адаптера. А todo_manager_try001 это класс активности, в нём почти весь код расположен кроме адаптера и описания.
Так как мне вытянуть элемент ListView'а?
0
shavuz
114 / 120 / 23
Регистрация: 29.01.2014
Сообщений: 596
22.03.2017, 19:12 #6
отметьте мышкой этот кусок кода - todoadapter.getItem(position), и нажмите альт+контрол+V , система сама создаст переменную для выделенного куска кода.
0
MODifikaTOR18
0 / 0 / 0
Регистрация: 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 / 23
Регистрация: 29.01.2014
Сообщений: 596
23.03.2017, 08:55 #8
покажите код адаптера
0
MODifikaTOR18
0 / 0 / 0
Регистрация: 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 / 23
Регистрация: 29.01.2014
Сообщений: 596
23.03.2017, 09:05 #10
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
в 35 строке должен быть не обджект а тудуайтемдескр. и чтоб получить айте надо написать TodoItemDesce todoitemdescr = todoadapter.getItem(position);
1
MODifikaTOR18
0 / 0 / 0
Регистрация: 26.05.2016
Сообщений: 80
Завершенные тесты: 1
23.03.2017, 09:14  [ТС] #11
shavuz, только что до этого додумался)
Сейчас проверю
0
shavuz
114 / 120 / 23
Регистрация: 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: Attempt to invoke virtual method - Программирование Android
Помогите, пожалуйста. Делал приложение на андроид для установки обоев и когда выбираю обои приложение выдает ошибку

Ava.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String[] link.stuzer.stattrack.data - Программирование Android
// Print out the database as array public String getAllWeapons(){ String dbString = new String; SQLiteDatabase...

Ошибка - Errororg.json.JSONExceprion: Value bd.json of type java.lang.String cannot be converted to JSONObject - Программирование Android
Здравствуйте! Есть база данных bd.json, которая находится в проекте в папке assets. Вот содержимое базы данных; { &quot;name&quot;:...

java.lang.NoClassDefFoundError - Программирование Android
Не пойму, что не так. DataActivity.java находится в пакете com.example.helper, в манифесте прописано: &lt;activity...


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

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

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