首页 > 解决方案 > Android In-app Review 弹出窗口使应用程序崩溃

问题描述

尝试为 Android 实施应用内审查时,我运行测试 FakeReviewManager 没有问题,如下所述,但是当与真正的经理交换它时,我遇到了崩溃,因为窗口应该弹出。这是我的代码:

ReviewManager manager;
ReviewInfo reviewInfo;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //manager = new FakeReviewManager(context);
    manager = ReviewManagerFactory.create(this);
    Task<ReviewInfo> request = manager.requestReviewFlow();
    request.addOnCompleteListener(task -> {
        if (task.isSuccessful()) {
            Log.d("myTag","Review can be requested");
            ReviewInfo reviewInfo = task.getResult();
        } else {
            // There was some problem, continue regardless of the result.
        }
    });
}

public void ProgressManagement() {

     Task<Void> flow = manager.launchReviewFlow(MainActivity.this, reviewInfo);
     flow.addOnCompleteListener(task -> {
     Log.d("myTag","Review process completed");
     });
}

这是我得到的错误代码:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.android, PID: 16579
java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.PendingIntent com.google.android.play.core.review.ReviewInfo.a()' on a null object reference
    at com.google.android.play.core.review.c.launchReviewFlow(Unknown Source:7)
    at com.android.MainActivity.ProgressManagement(MainActivity.java:280)
    at com.android.MainActivity$4.onClick(MainActivity.java:209)
    at android.view.View.performClick(View.java:6897)
    at android.view.View$PerformClick.run(View.java:26104)
    at android.os.Handler.handleCallback(Handler.java:789)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6944)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

标签: javaandroidandroid-studio

解决方案


试试这个:

添加以下内容

private ReviewInfo reviewInfo;

以下

ReviewManager manager;

然后改变这个:

if (task.isSuccessful()) {
        Log.d("myTag","Review can be requested");
        ReviewInfo reviewInfo = task.getResult();
    }

对此:

if (task.isSuccessful()) {
        Log.d("myTag","Review can be requested");
        reviewInfo = task.getResult();
    }

推荐阅读