Datasnapshot HashMap 无法转换为另一个 class
Datasnapshot HashMap cannot be cast to another class
我已将功能添加到我正在设计的应用程序中,以从我的 Firebase 数据库中获取所有 "Job_Class" 对象的列表,这工作正常,我可以获得所有工作。
问题是我需要使用我检索到的作业集合,但是我收到错误:
java.util.HashMap cannot be cast to (packages removed).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();
}
});
}
Firebase 无法知道地图中的每个对象代表一个 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());
}
}
我已将功能添加到我正在设计的应用程序中,以从我的 Firebase 数据库中获取所有 "Job_Class" 对象的列表,这工作正常,我可以获得所有工作。
问题是我需要使用我检索到的作业集合,但是我收到错误:
java.util.HashMap cannot be cast to (packages removed).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();
}
});
}
Firebase 无法知道地图中的每个对象代表一个 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());
}
}