Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法从firebase检索数据以在要修改的字段中显示用户,android java中的java.lang.NullPointerException_Java_Android_Firebase_Nullpointerexception - Fatal编程技术网

无法从firebase检索数据以在要修改的字段中显示用户,android java中的java.lang.NullPointerException

无法从firebase检索数据以在要修改的字段中显示用户,android java中的java.lang.NullPointerException,java,android,firebase,nullpointerexception,Java,Android,Firebase,Nullpointerexception,当我想从FirebaseDatabase检索数据以向用户显示数据时,允许他们修改输入 我得到如下java.lang.NullPointerException错误: public class ParkingSpaceData { String parkingAddress; String latlng; LatLng myMarkerPosition; String entranceRef; String ownershipRef; String videoRef; U

当我想从FirebaseDatabase检索数据以向用户显示数据时,允许他们修改输入

我得到如下java.lang.NullPointerException错误:

public class ParkingSpaceData {
  String parkingAddress;
  String latlng;
  LatLng myMarkerPosition;
  String entranceRef;
  String ownershipRef;
  String videoRef;
  Uri ivParkingSpaceEntranceUri, ivCertificateOfOwnershipUri , vvVideoOfEntranceToParkingSpaceUri;

  public ParkingSpaceData() {}  
  public String getEntranceRef() {return entranceRef;}
  public void setEntranceRef(String entranceRef) {this.entranceRef = entranceRef;}
  public String getLatlng() {return latlng;}
  public void setLatlng(String latlng) {this.latlng = latlng;}
  public LatLng getMyMarkerPosition() {return myMarkerPosition;}
  public void setMyMarkerPosition(LatLng myMarkerPosition) {this.myMarkerPosition = myMarkerPosition;}
  .
  .
  .//getters and setters
  .
  public Uri getIvCertificateOfOwnershipUri() {return ivCertificateOfOwnershipUri;}
  public void setIvCertificateOfOwnershipUri(Uri ivCertificateOfOwnershipUri){this.ivCertificateOfOwnershipUri = ivCertificateOfOwnershipUri;}
  .
  .
  .
真奇怪。即使我检查了FirebaseDatabase,输入也已经存在于每个用户的唯一ID下

请帮我解决这个问题,并告诉我原因。 非常感谢你的帮助

FATAL EXCEPTION: main
Process: com.comli.loyalfine.myfirstgooglemapapplication, PID:16262 java.lang.NullPointerException 
at com.comli.loyalfine.myfirstgooglemapapplication.ParkingSpaceRegisterActivity$12.onDataChange(ParkingSpaceRegisterActivity.java:495)
at com.firebase.client.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:56)
at com.firebase.client.core.view.DataEvent.fire(DataEvent.java:45)
at com.firebase.client.core.view.EventRaiser$1.run(EventRaiser.java:38)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5335)
at java.lang.reflect.Method.invokeNative(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)
以下是我的代码

public void ReadAndDisplayData() {
    mDatabaseRef= FirebaseDatabase.getInstance().getReference();
    mDatabaseRef.child("Parking Space Data").child("Not Verified").child(userId).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            ParkingSpaceData post = null;

            post = dataSnapshot.getValue(ParkingSpaceData.class);
            assert post != null;
            System.out.print("etParkingSpaceAddress is "+post.getParkingAddress().toString());
            System.out.print("etLatLgn is "+post.getLatlng().toString());
            System.out.print("entranceuri is "+post.getIvParkingSpaceEntranceUri().toString());

            StorageReference fileRef = storageRef.child(userId).child("image").child(post.getEntranceRef());
            System.out.print("file uri is " +fileRef.getDownloadUrl().toString());
            ivParkingSpaceEntranceUri = post.getIvParkingSpaceEntranceUri();
            ivCertificateOfOwnershipUri = post.getIvCertificateOfOwnershipUri();
            vvVideoOfEntranceToParkingSpaceUri = post.getVvVideoOfEntranceToParkingSpaceUri();

            //Toast.makeText(ParkingSpaceRegisterActivity.this,"entranceuri is "+post.getIvParkingSpaceEntranceUri().toString(), Toast.LENGTH_LONG).show();
            // Toast.makeText(ParkingSpaceRegisterActivity.this,"file uri is " +fileRef.getDownloadUrl().toString(),Toast.LENGTH_LONG).show();
            //Picasso.with(ParkingSpaceRegisterActivity.this).load(ivParkingSpaceEntranceUri).fit().centerCrop().into(ivParkingSpaceEntrance);
            assert fileRef != null;
            fileRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                @Override
                public void onSuccess(Uri uri) {
                    Picasso.with(ParkingSpaceRegisterActivity.this).load(uri).fit().centerCrop().into(ivParkingSpaceEntrance);
                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception exception) {
                    // Handle any errors
                }
            });
            fileRef = storageRef.child(userId).child("image").child(post.getOwnershipRef());
            fileRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                @Override
                public void onSuccess(Uri uri) {
                    Picasso.with(ParkingSpaceRegisterActivity.this).load(uri).fit().centerCrop().into(ivCertificateOfOwnership);
                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception exception) {
                    // Handle any errors
                }
            });
            fileRef = storageRef.child(userId).child("video").child(post.getVideoRef());
            fileRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                @Override
                public void onSuccess(Uri uri) {
                    vvVideoOfEntranceToParkingSpace.setBackgroundResource(0);
                    vvVideoOfEntranceToParkingSpace.setVideoURI(uri);
                    vvVideoOfEntranceToParkingSpace.start();
                    vvVideoOfEntranceToParkingSpace.pause();
                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception exception) {
                    // Handle any errors
                }
            });
            etParkingSpaceAddress.setText(post.getParkingAddress(), TextView.BufferType.EDITABLE);
            etLatLgn.setText(post.getLatlng(), TextView.BufferType.EDITABLE);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            // Getting Post failed, log a message
            Toast.makeText(ParkingSpaceRegisterActivity.this, "loadPost:onCancelled" + databaseError.toException().getMessage(), Toast.LENGTH_LONG).show();
            // ...
        }
    });
}
对于ParkingSpaceData.class,其等级如下:

public class ParkingSpaceData {
  String parkingAddress;
  String latlng;
  LatLng myMarkerPosition;
  String entranceRef;
  String ownershipRef;
  String videoRef;
  Uri ivParkingSpaceEntranceUri, ivCertificateOfOwnershipUri , vvVideoOfEntranceToParkingSpaceUri;

  public ParkingSpaceData() {}  
  public String getEntranceRef() {return entranceRef;}
  public void setEntranceRef(String entranceRef) {this.entranceRef = entranceRef;}
  public String getLatlng() {return latlng;}
  public void setLatlng(String latlng) {this.latlng = latlng;}
  public LatLng getMyMarkerPosition() {return myMarkerPosition;}
  public void setMyMarkerPosition(LatLng myMarkerPosition) {this.myMarkerPosition = myMarkerPosition;}
  .
  .
  .//getters and setters
  .
  public Uri getIvCertificateOfOwnershipUri() {return ivCertificateOfOwnershipUri;}
  public void setIvCertificateOfOwnershipUri(Uri ivCertificateOfOwnershipUri){this.ivCertificateOfOwnershipUri = ivCertificateOfOwnershipUri;}
  .
  .
  .
在on DataChanged下的readAndDisplayData()方法中

查格:这是什么

ParkingSpaceData post = null; 
post=dataSnapshot.getValue(ParkingSpaceData.class);
为此:

dataSnapshot.getValue(new ParkingSpaceData.class);
看看你是否仍然会犯同样的错误。我总是怀疑在本地用null初始化这样的对象。这可能不是一个完美的解决方案,但很多时候它确实解决了此类空错误。此外,大多数firebase示例鼓励采用更晚的方式检索数据

如果这对你有什么改变,请告诉我

编辑-在您的场景中,它的工作方式如下:

ParkingSpaceData post = dataSnapshot.getValue(ParkingSpaceData.class);
这应该可以编译。我的全部目的是避免用null初始化它。请试试这个

System.out.print("etParkingSpaceAddress is "+post.getParkingAddress().toString());
System.out.print("etLatLgn is "+post.getLatlng().toString());
System.out.print("entranceuri is "+post.getIvParkingSpaceEntranceUri().toString());
从此代码中删除所有
.toString()
调用。如果项目不为空,则它们是多余的,如果为空,则会导致NPE

System.out.print("etParkingSpaceAddress is "+post.getParkingAddress());
System.out.print("etLatLgn is "+post.getLatlng());
System.out.print("entranceuri is "+post.getIvParkingSpaceEntranceUri());

该错误是在第
行ParkingSpaceRegisterActivity.java:495
上引起的。我将在调试器中运行代码,并查看引发异常的位置。该行中的一个值是
null
。这是一个System.Out.Println,用于显示null位置,其中post.getParkingAddress()为null。但是,firebasedatabase中已经有一个值。您能否更新您的问题,在
停车位数据/Not Verified/$userId
中包含JSON结构的最小示例(作为文本,无屏幕截图)?如果您可以将代码减少到仍然会导致崩溃的最小代码,这也会很好。我怀疑你的
ParkingSpaceData
类是否能处理它们,但如果没有看到这个类,很难确定。另外:请将代码和JSON的数量减少到再现问题所需的最小值。这将使帮助您变得更容易。建议的代码甚至没有编译,更不用说有一个合理的解释了。我忘了指出一个事实,即我遗漏了用于实际获取数据的实际post变量。对不起,我犯了那个错误。希望建议的编辑可以编译。那么为什么不删除没有编译的部分呢?新建议的代码将如何改变任何事情?仍然没有合理的解释。我同意你的观点,初始化为null是徒劳的,但这并不会导致这个问题。谢谢你的输入,但它不起作用。原因尚不清楚。即使使用toString(),它仍然会得到Null异常。问题位于post.get…()为null的任何位置。但这是为什么?@LoyalFine我说要删除它,而不是继续使用它。那些System.out.print语句通常会被删除,并且只有在我的调试过程中出现,以确定问题所在。如果它们包含
.toString()
调用,它们就会成为问题。因此,请删除
.toString()
。根本的问题是一个或多个getter正在重新运行null,而您没有检查它。为什么post.getvalue()可以正常工作,而其他post.getParkingAddress()或其他键的值会遇到NPE问题?