gpt4 book ai didi

Android Firebase valueEventListener 导致应用程序崩溃

转载 作者:行者123 更新时间:2023-11-29 18:56:50 25 4
gpt4 key购买 nike

应用说明

我的应用程序从 Firebase 数据库中检索数据。首先,我将 java 对象正确推送到数据库,并且可以毫无问题地检索数据,使用 Fragments onActivityCreated 中的 addListenerForSingleValueEvent 方法。我总共有 4 个 fragment ,它们是使用 ViewPager 实现的。其中三个 fragment 各包含一个 ListView,每个 fragment 中显示不同类型的数据。数据被下载并添加到每个 fragment 的 ListView 中。当用户单击 ListView 项时,将显示一个包含和编辑文本的对话框。用户输入一个值并单击保存。用户输入的值与附加参数一起推送到数据库,例如日期、jobID 等作为另一个 Java 对象 (Status.class) 当我推送这个对象时,我使用的是 DatabaseReference.CompletionListener,并且在 onComplete 方法中我正在执行一些操作。这些操作之一是重新创建 Fragment 的父 Activity ,以允许根据项目操作状态更新 UI。我不认为每次操作 ListView 中的一项时重新创建父 Activity 是非常有效的。所以我决定使用 ValueEventListener 而不是 SingleValueEventListener,后者应该更新该项目的 ListView。 ValueEventListener 可以很好地创建 ListView,但是当用户第一次单击任何 ListView 项目并输入一个值并单击“保存”时,应用程序就会崩溃并出现以下错误。当应用程序重新启动时,ListView 中的项目现在以不同的方式显示,因为它已被执行。单击任何项​​目并从那时起保存数据就可以正常工作。只有当用户第一次保存数据时,应用程序才会崩溃。我不知道是什么原因造成的。

错误

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference
at android.view.LayoutInflater.from(LayoutInflater.java:233)
at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:181)
at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:166)
at com.project.nolan.john.application.IOAdapter.<init>(IOAdapter.java:0)
at com.project.nolan.john.application.Fragment_Sensors.makeListViewFromDataSnapshot(Fragment_Sensors.java:178)
at com.project.nolan.john.application.Fragment_Sensors.access$000(Fragment_Sensors.java:58)
at com.project.nolan.john.application.Fragment_Sensors$1.onDataChange(Fragment_Sensors.java:141)
at com.google.android.gms.internal.zzegf.zza(Unknown Source)
at com.google.android.gms.internal.zzeia.zzbyc(Unknown Source)
at com.google.android.gms.internal.zzeig.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6682)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)*

Fragment 的 onActivityCreated 中的值事件监听器

 databaseReference.addValueEventListener(new ValueEventListener()
{
@Override
public void onDataChange(DataSnapshot dataSnapshot)
{
mPointsList = new ArrayList<>();

for (DataSnapshot ds : dataSnapshot.getChildren())
{
IO_Point io = ds.getValue(IO_Point.class);

if(io != null)
{
if(io.getSiteUID().equals(mSiteUID) && io.getType().equals("S"))
{
mPointsList.add(io);
}
}
}

if(mSensors_IOPointList != null)
{
mListAdapter = new IOAdapter(getActivity(), mPointsList);
}

mListView.setAdapter(mListAdapter);
}

@Override
public void onCancelled(DatabaseError databaseError)
{

}
});

如果您需要更多信息/代码,请告诉我,我将编辑我的问题。

编辑

IO_Point.class

    public class IO_Point
{
private String type;
private String lan;
private String os;
private String ionum;
private String label;
private String siteUID;
private Boolean actioned;
private String iouid;

public IO_Point()
{

}

public IO_Point(String type, String lan, String os, String ioNum, String label, String siteUID, Boolean actioned, String iouid)
{
this.type = type;
this.lan = lan;
this.os = os;
this.ionum = ioNum;
this.label = label;
this.siteUID = siteUID;
this.actioned = actioned;
this.iouid = iouid;

}

public String getType()
{
return type;
}

public String getLan()
{
return lan;
}

public String getOS()
{
return os;
}

public String getIONum()
{
return ionum;
}

public String getLabel()
{
return label;
}

public String getSiteUID()
{
return siteUID;
}

public Boolean getActioned()
{
return actioned;
}

public String getIOUID()
{
return iouid;
}

}

数据库示例

    {
"IO Points" : {
"-L9fzerDpRXR72ilvRht" : {
"actioned" : true,
"ionum" : "S1",
"iouid" : "-L9fzerDpRXR72ilvRht",
"label" : "Sensor One",
"lan" : "1",
"os" : "11",
"siteUID" : "-L9fz_QYz8KFQtByYOxN",
"type" : "S"
},
"-L9fzij0Kyt1x3F_W7Ea" : {
"actioned" : false,
"ionum" : "I1",
"iouid" : "-L9fzij0Kyt1x3F_W7Ea",
"label" : "Digital One",
"lan" : "1",
"os" : "11",
"siteUID" : "-L9fz_QYz8KFQtByYOxN",
"type" : "D"
},
"-L9fzlCaDhagrIzIzTTI" : {
"actioned" : false,
"ionum" : "D1",
"iouid" : "-L9fzlCaDhagrIzIzTTI",
"label" : "Output One",
"lan" : "1",
"os" : "11",
"siteUID" : "-L9fz_QYz8KFQtByYOxN",
"type" : "O"
},
"-L9g-Ppg9noyYepYRLMq" : {
"actioned" : false,
"ionum" : "S1",
"iouid" : "-L9g-Ppg9noyYepYRLMq",
"label" : "Sensor Two",
"lan" : "1",
"os" : "11",
"siteUID" : "-L9g-Hr-v8zgO08zWGTP",
"type" : "S"
},
"-L9g-XOoOSlv15PKiC0e" : {
"actioned" : false,
"ionum" : "I1",
"iouid" : "-L9g-XOoOSlv15PKiC0e",
"label" : "Digital Two",
"lan" : "1",
"os" : "11",
"siteUID" : "-L9g-Hr-v8zgO08zWGTP",
"type" : "D"
},
"-L9g-k0poRsnDi5ZyHjP" : {
"actioned" : false,
"ionum" : "D1",
"iouid" : "-L9g-k0poRsnDi5ZyHjP",
"label" : "Output Two",
"lan" : "1",
"os" : "11",
"siteUID" : "-L9g-Hr-v8zgO08zWGTP",
"type" : "O"
}
},
"Sites" : {
"-L9fz_QYz8KFQtByYOxN" : {
"inProgress" : true,
"siteAddress" : "Site One Address",
"siteName" : "Site One",
"siteUID" : "-L9fz_QYz8KFQtByYOxN"
},
"-L9g-Hr-v8zgO08zWGTP" : {
"inProgress" : false,
"siteAddress" : "Site Two Address",
"siteName" : "Site Two",
"siteUID" : "-L9g-Hr-v8zgO08zWGTP"
}
}
}

最佳答案

“尝试在空对象引用上调用虚拟方法”意味着您尝试对其执行某些操作的该对象未初始化。调试您的程序,您必须找到您“松开” this 的位置。检查“LayoutInflater.java:233”中的对象!!

关于Android Firebase valueEventListener 导致应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49815632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com