Datasnapshot HashMap无法强制转换为其他类

Ale*_*ley 3 java hashmap firebase firebase-realtime-database

我已经为我正在设计的应用程序添加了这些功能,以便从我的Firebase数据库中获取所有"Job_Class"对象的列表,这工作正常,我可以获得所有工作.

问题是我需要使用我已检索的作业集合但是我收到错误:

无法转换java.util.HashMap(删除了包).Job_Class

您将在下面的代码中看到for循环发生此错误.如果有人能帮助我实际使用检索到的工作,我将非常感激.

public static void setUpCityChildrenListRetriever(final Context context, String cityName)
{
    database.getReference("Cities").child(cityName).addValueEventListener(new ValueEventListener()
    {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot)
        {
            Map<String, Job_Class> td = (HashMap<String, Job_Class>) dataSnapshot.getValue();

            if (td != null)
            {
                ArrayList<Job_Class> values = new ArrayList<>(td.values());
                //jobsInCityObjects = values;
                List<String> keys = new ArrayList<String>(td.keySet());
                //jobsInCityKeys = (ArrayList<String>) keys;

                for (Job_Class job: values)
                {
                    Log.d("firebase", job.getJobTitle());
                }

                Log.d("firebase", values.toString());
                Log.d("firebase", keys.toString());
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError)
        {
            Main_Activity.shared_preferences_manager.setLatestErrorLog(databaseError.toString());
            Toast.makeText(context, "Database Error - Please Report", Toast.LENGTH_SHORT).show();
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

Fra*_*len 14

Firebase无法知道Map中的每个对象都代表一个Job_Class实例.因此,您不需要一次性转换结果,而是需要循环遍历DataSnapshot,然后依次提取每个对象:

    public void onDataChange(DataSnapshot dataSnapshot)
    {
        Map<String, Job_Class> td = new HashMap<String, Job_Class>()
        for (DataSnapshot jobSnapshot: dataSnapshot.getChildren()) {
            Job_Class job = jobSnapshot.getValue(Job_Class.class);
            td.put(jobSnapshot.getKey(), job);
        }

        ArrayList<Job_Class> values = new ArrayList<>(td.values());
        List<String> keys = new ArrayList<String>(td.keySet());

        for (Job_Class job: values) {
            Log.d("firebase", job.getJobTitle());
        }

    }
Run Code Online (Sandbox Code Playgroud)