需要解决这个尝试在空对象引用上调用虚拟方法我使用了firebase实时[重复]

Posted

技术标签:

【中文标题】需要解决这个尝试在空对象引用上调用虚拟方法我使用了firebase实时[重复]【英文标题】:need to solve this Attempt to invoke virtual method on a null object reference im used firebase realtime [duplicate] 【发布时间】:2020-01-05 04:04:13 【问题描述】:

我将标记 onclick 设置为另一个活动

public class CoffeeShopDetail  extends AppCompatActivity 
 TextView DetailText;
 TextView DetailTipe;
 TextView DetailAsal;
 ImageView DetailImage;
 private CustomGauge gauge1;
 TextView DetailPersen;

 int i;
 private TextView text1;


 String LokasiId="";
 FirebaseDatabase database;
 DatabaseReference lokasi;

 @Override
 protected void onCreate(@Nullable Bundle savedInstanceState) 
     super.onCreate(savedInstanceState);
     setContentView(R.layout.detail_loc);


     database = FirebaseDatabase.getInstance();
     lokasi = database.getReference().child("Lokasi");

     DetailText = findViewById(R.id.detail_shop);
     DetailImage = findViewById(R.id.detail_image1);
     DetailTipe = findViewById(R.id.descCS);
     DetailAsal = findViewById(R.id.tandatanya);
     Intent intent = getIntent();
     Bundle bd = intent.getExtras();



    if (getIntent() != null)
         LokasiId = getIntent().getStringExtra("LokasiId");
     if ("LokasiId".equals(true)) 

         return;

     
     getDetailLokasi(LokasiId);



 

 //-----1-----
 private void getDetailLokasi(final String LokasiId) 

     lokasi.child(String.valueOf(LokasiId)).addValueEventListener(new ValueEventListener() 

             @Override
             public void onDataChange(@NonNull DataSnapshot dataSnapshot) 

                 final LocationDB LocationDB = dataSnapshot.getValue(LocationDB.class);

                     Picasso.get().load(LocationDB.getImage()).into(DetailImage);

                     DetailText.setText(LocationDB.getNama_tempat());
                     // DetailTipe.setText(Jenis.getTipe_kopi());
                     //  DetailAsal.setText(Jenis.getAsal());
                     // DetailPersen.setText(Jenis.percent);

             

             @Override
             public void onCancelled(@NonNull DatabaseError databaseError) 

             
         
     );

 

错误

E/androidRuntime: FATAL EXCEPTION: main
    Process: com.example.myapplication, PID: 491
    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.myapplication.Lokasi.LocationDB.getImage()' on a null object reference
        at com.example.myapplication.CoffeeShopDetail$1.onDataChange(CoffeeShopDetail.java:87)
        at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@18.0.1:75)
        at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@18.0.1:63)
        at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@18.0.1:55)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7319)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:934)

【问题讨论】:

这不是javascript!!这是java 明确表示 LocationDB.getImage() 。是 。空 如何解决 发布LocationDB类的代码 我无法编辑和添加位置数据库类 【参考方案1】:

你有没有试过改变LocationDB的变量名?

因为 LocationDB 是一个数据模型类,而您将其用作变量。

但是您可以尝试将变量 LocationDB 更改为其他名称。

 final LocationDB myLocationDB= dataSnapshot.getValue(LocationDB.class);


 Picasso.get().load(myLocationDB.getImage()).into(DetailImage);

  DetailText.setText(myLocationDB.getNama_tempat());

【讨论】:

还是同样的错误 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.myapplication.Lokasi.LocationDB.getImage()' on an null object reference 请出示你的模特班,谢谢。您是否像这样添加了班级中的代码? public LocationDB() 我无法编辑或添加新的 public class LocationDB public String nama_tempat, image;双纬度,液化天然气; public LocationDB() public LocationDB(String nama_tempat, double lat, double lng, String image) this.image = image; public String getImage() 返回图片; public void setImage(String image) this.image = image; 并在 firebase 中显示您的数据结构,请不要将其粘贴在这里编辑您的问题【参考方案2】:

您不必按要求获得数据。所以不要直接将它与视图绑定,而是先在其上添加一些验证。

         public void onDataChange(@NonNull DataSnapshot dataSnapshot) 
             if(dataSnapshot.getValue(LocationDB.class) != null) 
                 final LocationDB locationDB = dataSnapshot.getValue(LocationDB.class);

                 Picasso.get().load(locationDB.getImage()).into(DetailImage);

                 DetailText.setText(locationDB.getNama_tempat());
                 // DetailTipe.setText(Jenis.getTipe_kopi());
                 //  DetailAsal.setText(Jenis.getAsal());
                 // DetailPersen.setText(Jenis.percent);
              else 

                 Picasso.get().load("").error(R.drawable.placeholder_error_loading).into(DetailImage);

                 DetailText.setText("");
             
         

提示: 始终对变量使用良好的命名约定。即,始终以小写开头的变量名,如 mVariableName、variableName。

【讨论】:

路径不能为空的新错误 我不能放。错误 请再次检查答案。我忘了把load("") 方法放在error(...) 之前。 我没有 R.drawable.placeholder_error_loading @NewbieMMR 您可以使用可绘制文件夹中的任何图像作为错误图像。

以上是关于需要解决这个尝试在空对象引用上调用虚拟方法我使用了firebase实时[重复]的主要内容,如果未能解决你的问题,请参考以下文章

AsyncTask +数据库尝试在空对象引用上调用虚拟方法[重复]

Android错误尝试在空对象引用上调用虚拟方法[重复]

NullPointerException:尝试在空对象引用上调用虚拟方法 findViewById(int)'

NullPointerException 错误尝试在空对象引用上调用虚拟方法错误

显示来自sqlite数据库的数据时“尝试在空对象引用上调用虚拟方法”[重复]

JPE:尝试在空对象引用上调用虚拟方法“android.content.res.Resources”