gpt4 book ai didi

java - 尝试在空对象引用上调用虚拟方法 'java.lang.Long com.google.firebase.firestore.DocumentSnapshot.getLong(java.lang.String)'

转载 作者:行者123 更新时间:2023-12-01 16:15:05 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





What is a NullPointerException, and how do I fix it?

(12 个回答)


1年前关闭。




请帮我

    public class ProductDetailsActivity extends AppCompatActivity {

public static boolean running_wishlist_query = false;
public static boolean running_rating_query = false;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_product_details);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);


productID = getIntent().getStringExtra("PRODUCT_ID");



inititalRating = -1;


firebaseFirestore = FirebaseFirestore.getInstance();

final List<String> productImages = new ArrayList<>();


firebaseFirestore.collection("PRODUCTS").document(productID)
.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
documentSnapshot = task.getResult();

for (long x = 1; x < documentSnapshot.getLong("no_of_product_images") + 1; x++) {
productImages.add(documentSnapshot.getString("product_image_" + x));
}
ProductImagesAdapter productImagesAdapter = new ProductImagesAdapter(productImages);
productImagesViewPager.setAdapter(productImagesAdapter);

productTitle.setText(documentSnapshot.getString("product_title"));
averageRatingMiniView.setText(String.valueOf(documentSnapshot.get("average_rating")));
totalRatingMiniView.setText("(" + documentSnapshot.getLong("total_ratings") + ")ratings");
productPrice.setText("TK." + documentSnapshot.getString("product_price") + "/-");
cuttedPrice.setText("TK." + documentSnapshot.getString("cutted_price") + "/-");
if (documentSnapshot.getBoolean("COD")) {
codIndicator.setVisibility(View.VISIBLE);
tvCodIndicator.setVisibility(View.VISIBLE);
} else {
codIndicator.setVisibility(View.INVISIBLE);
tvCodIndicator.setVisibility(View.INVISIBLE);
}
rewardTitle.setText(documentSnapshot.getLong("free_coupens") + documentSnapshot.getString("free_coupen_title"));
rewardBody.setText(documentSnapshot.getString("free_coupen_body"));
if (documentSnapshot.getBoolean("use_tab_layout")) {
productDetailsTabsContainer.setVisibility(View.VISIBLE);
productDetailsOnlyContainer.setVisibility(View.GONE);
productDescription = documentSnapshot.getString("product_description");
productOtherDetails = documentSnapshot.getString("product_other_details");

for (long x = 1; x < documentSnapshot.getLong("total_spec_titles") + 1; x++) {
productSpecificationModelList.add(new ProductSpecificationModel(0, documentSnapshot.getString("spec_title_" + x)));
for (long y = 1; y < documentSnapshot.getLong("spec_title_" + x + "_total_fields") + 1; y++) {
productSpecificationModelList.add(new ProductSpecificationModel(1, documentSnapshot.getString("spec_title_" + x + "_field_" + y + "_name"),
documentSnapshot.getString("spec_title_" + x + "_field_" + y + "_value")));
}
}
} else {
productDetailsTabsContainer.setVisibility(View.GONE);
productDetailsOnlyContainer.setVisibility(View.GONE);
productOnlyDescriptionBody.setText(documentSnapshot.getString("product_description"));
}
totalRatings.setText(documentSnapshot.getLong("total_ratings") + " ratings");

for (int x = 0; x < 5; x++) {
TextView rating = (TextView) ratingsNumberContainer.getChildAt(x);
rating.setText(String.valueOf(documentSnapshot.getLong((5 - x) + "_star")));

ProgressBar progressBar = (ProgressBar) ratingsProgressbarContainer.getChildAt(x);
int maxProgress = Integer.parseInt(String.valueOf(documentSnapshot.getLong("total_ratings")));
progressBar.setMax(maxProgress);
progressBar.setProgress(Integer.parseInt(String.valueOf(documentSnapshot.getLong((5 - x) + "_star"))));

}
totalRatingsFigure.setText(String.valueOf(documentSnapshot.getLong("total_ratings")));
averageRating.setText(String.valueOf(documentSnapshot.get("average_rating")));
productDetailsViewPager.setAdapter(new ProductDetailsAdapter(getSupportFragmentManager(), productDescription, productOtherDetails, productSpecificationModelList, productDetailsTabLayout.getTabCount()));

if(currentUser != null) {
if(DBqueries.myRating.size() == 0){
DBqueries.loadRatingList(ProductDetailsActivity.this);
}
if (DBqueries.wishList.size() == 0) {
DBqueries.loadWishList(ProductDetailsActivity.this, loadingDialog,false);
} else {
loadingDialog.dismiss();
}
}else{
loadingDialog.dismiss();
}

if(DBqueries.myRatedIds.contains(productID)){
int index = DBqueries.myRatedIds.indexOf(productID);
inititalRating = Integer.parseInt(String.valueOf(DBqueries.myRating.get(index)));
setRating(inititalRating);
}

if(DBqueries.wishList.contains(productID)){
ALREADY_ADDED_TO_WISHLIST = true;
addToWishlistBtn.setSupportImageTintList(ColorStateList.valueOf(getResources().getColor(R.color.colorPrimary)));
}else {
addToWishlistBtn.setSupportImageTintList(ColorStateList.valueOf(Color.parseColor("#9e9e9e")));
ALREADY_ADDED_TO_WISHLIST = false;
}

} else {
loadingDialog.dismiss();
String error = task.getException().getMessage();
Toast.makeText(ProductDetailsActivity.this, error, Toast.LENGTH_SHORT).show();
}
}
});


//////rating layout
rateNowContainer = findViewById(R.id.rate_now_container);
for(int x = 0; x< 6;x++){
rateNowContainer.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
@Override
public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
final int starPosition = (int) ratingBar.getRating();
if(currentUser == null){
signInDialog.show();
}else {
if(!running_rating_query){
running_rating_query = true;
setRating(starPosition);
Map<String, Object> updateRating = new HashMap<>();
//int initialTestRating = Integer.parseInt(String.valueOf(documentSnapshot.getLong("rating_" + finalX)));
if(DBqueries.myRatedIds.contains(productID)){

updateRating.put(inititalRating+"_star", documentSnapshot.getLong(inititalRating+"_star") - 1); // -1
updateRating.put(starPosition+"_star", documentSnapshot.getLong(starPosition+"_star")+ 1); // +1
updateRating.put("average_rating",String.valueOf(calculateAverageRating()));

}else {
updateRating.put(starPosition+ "_star", documentSnapshot.getLong(starPosition+ "_star")+1);
updateRating.put("total_ratings", documentSnapshot.getLong("total_ratings")+1);
updateRating.put("average_rating", String.valueOf(calculateAverageRating()));

}

firebaseFirestore.collection("PRODUCTS").document(productID)
.update(updateRating).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {


Map<String, Object> rating = new HashMap<>();
if(DBqueries.myRatedIds.contains(productID)){
rating.put("rating_"+DBqueries.myRatedIds.indexOf(productID),starPosition);
}else {
rating.put("list_size", DBqueries.myRatedIds.size() + 1);
rating.put("product_ID_" + DBqueries.myRatedIds.size(), productID);
rating.put("rating_" + DBqueries.myRatedIds.size(), (long) starPosition);
}

firebaseFirestore.collection("USERS").document(currentUser.getUid()).collection("USER_DATA").document("MY_RATINGS")
.update(rating).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {

if(DBqueries.myRatedIds.contains(productID)){

DBqueries.myRating.set(DBqueries.myRatedIds.indexOf(productID), (long) starPosition);

TextView oldRating = (TextView) ratingsNumberContainer.getChildAt(5 - inititalRating);
TextView finalRating = (TextView) ratingsNumberContainer.getChildAt(5 - starPosition);

oldRating.setText(String.valueOf(Integer.parseInt(oldRating.getText().toString())-1));
finalRating.setText(String.valueOf(Integer.parseInt(finalRating.getText().toString()) + 1));



}else {
DBqueries.myRatedIds.add(productID);
DBqueries.myRating.add((long) starPosition);

TextView rating = (TextView) ratingsNumberContainer.getChildAt(5 - starPosition);
rating.setText(String.valueOf(Integer.parseInt(rating.getText().toString()) + 1));


totalRatingMiniView.setText("(" + (documentSnapshot.getLong("total_ratings")) + ")ratings");
totalRatings.setText(documentSnapshot.getLong("total_ratings") + " ratings");
totalRatingsFigure.setText(String.valueOf(documentSnapshot.getLong("total_ratings")));



Toast.makeText(ProductDetailsActivity.this, "Thank you ! for rating", Toast.LENGTH_SHORT).show();
}

averageRating.setText(String.valueOf(calculateAverageRating()));
averageRatingMiniView.setText(String.valueOf(calculateAverageRating()));

for (int x = 0; x < 5; x++) {
TextView ratingfigures = (TextView) ratingsNumberContainer.getChildAt(x);

ProgressBar progressBar = (ProgressBar) ratingsProgressbarContainer.getChildAt(x);
if(!DBqueries.myRatedIds.contains(productID)) {
int maxProgress = Integer.parseInt(String.valueOf(documentSnapshot.getLong("total_ratings")));
progressBar.setMax(maxProgress);
}
progressBar.setProgress(Integer.parseInt(ratingfigures.getText().toString()));

}


} else {
setRating(inititalRating);
String error = task.getException().getMessage();
Toast.makeText(ProductDetailsActivity.this, error, Toast.LENGTH_SHORT).show();
}
running_rating_query = false;
}
});

} else {
running_rating_query = false;
setRating(inititalRating);
String error = task.getException().getMessage();
Toast.makeText(ProductDetailsActivity.this, error, Toast.LENGTH_SHORT).show();
}
}
});

}
}
}
});
}
//////rating layout

}

@Override
protected void onStart() {
super.onStart();
currentUser = FirebaseAuth.getInstance().getCurrentUser();
if(currentUser == null){
coupenRedemptionLayout.setVisibility(View.GONE);
}else {
coupenRedemptionLayout.setVisibility(View.VISIBLE);
}

if(currentUser != null) {
if(DBqueries.myRating.size() == 0){
DBqueries.loadRatingList(ProductDetailsActivity.this);
}
if (DBqueries.wishList.size() == 0) {
DBqueries.loadWishList(ProductDetailsActivity.this, loadingDialog,false);
} else {
loadingDialog.dismiss();
}
}else{
loadingDialog.dismiss();
}

if(DBqueries.myRatedIds.contains(productID)){
int index = DBqueries.myRatedIds.indexOf(productID);
inititalRating = Integer.parseInt(String.valueOf(DBqueries.myRating.get(index)));
setRating(inititalRating);
}

if(DBqueries.wishList.contains(productID)){
ALREADY_ADDED_TO_WISHLIST = true;
addToWishlistBtn.setSupportImageTintList(getResources().getColorStateList(R.color.colorPrimary));
}else{
ALREADY_ADDED_TO_WISHLIST = false;
addToWishlistBtn.setSupportImageTintList(ColorStateList.valueOf(Color.parseColor("#9e9e9e")));
}

}


public static void setRating(int starPosition) {
rateNowContainer.setRating(starPosition);

}

private float calculateAverageRating(){
float totalStars = documentSnapshot.getLong("1_star")*1 +
documentSnapshot.getLong("2_star")*2 +
documentSnapshot.getLong("3_star")*3 +
documentSnapshot.getLong("4_star")*4 +

if(documentSnapshot.getLong("total_ratings") != null && totalStars != 0){
return totalStars / documentSnapshot.getLong("total_ratings");
}else {
return 0;
}
}
}

这是错误

E/AndroidRuntime: 致命异常: main
进程:com.gabwire.mymall,PID:3985
java.lang.RuntimeException:无法启动 Activity ComponentInfo{com.gabwire.mymall/com.gabwire.mymall.ProductDetailsActivity}:java.lang.NullPointerException:尝试调用虚拟方法 'java.lang.Long com.google.firebase。 firestore.DocumentSnapshot.getLong(java.lang.String)' 在空对象引用上
在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2327)
在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2392)
在 android.app.ActivityThread.access$800(ActivityThread.java:153)
在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1305)
在 android.os.Handler.dispatchMessage(Handler.java:102)
在 android.os.Looper.loop(Looper.java:135)
在 android.app.ActivityThread.main(ActivityThread.java:5305)
在 java.lang.reflect.Method.invoke( native 方法)
在 java.lang.reflect.Method.invoke(Method.java:372)
在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.Long com.google.firebase.firestore.DocumentSnapshot.getLong(java.lang.String)”
在 com.gabwire.mymall.ProductDetailsActivity$4.onRatingChanged(ProductDetailsActivity.java:372)
在 android.widget.RatingBar.dispatchRatingChange(RatingBar.java:319)
在 android.widget.RatingBar.onProgressRefresh(RatingBar.java:262)
在 android.widget.ProgressBar.doRefreshProgress(ProgressBar.java:1262)
在 android.widget.ProgressBar.refreshProgress(ProgressBar.java:1274)
在 android.widget.ProgressBar.setProgress(ProgressBar.java:1321)
在 android.widget.ProgressBar.setProgress(ProgressBar.java:1302)
在 android.widget.RatingBar.setRating(RatingBar.java:198)
在 com.gabwire.mymall.ProductDetailsActivity.setRating(ProductDetailsActivity.java:633)
在 com.gabwire.mymall.ProductDetailsActivity.onStart(ProductDetailsActivity.java:609)
在 android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1236)
在 android.app.Activity.performStart(Activity.java:6006)
在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2290)
在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2392)
在 android.app.ActivityThread.access$800(ActivityThread.java:153)
在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1305)
在 android.os.Handler.dispatchMessage(Handler.java:102)
在 android.os.Looper.loop(Looper.java:135)
在 android.app.ActivityThread.main(ActivityThread.java:5305)
在 java.lang.reflect.Method.invoke( native 方法)
在 java.lang.reflect.Method.invoke(Method.java:372)
在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
I/Process:发送信号。 PID:3985 SIG:9

最佳答案

即使文档不存在,任务仍然会成功。

您需要检查文档快照是否存在。

firebaseFirestore.collection("PRODUCTS").document(productID)
.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
documentSnapshot = task.getResult();
if (documentSnapshot.exists()) {
...

请参阅 getting a document 上的文档.

关于java - 尝试在空对象引用上调用虚拟方法 'java.lang.Long com.google.firebase.firestore.DocumentSnapshot.getLong(java.lang.String)',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62420975/

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