【问题标题】:getting app Crashed every time when the user open the app from Playstore每次用户从 Playstore 打开应用程序时,应用程序都会崩溃
【发布时间】:2018-03-23 07:02:46
【问题描述】:

虽然问题与 null 有点相关,因为 ownText() 返回 null 这很好并且可以处理,主要问题是使用的方法不够好,我正在检查 div[itemprop=softwareVersion。我已经更改了版本检查下面给出的答案只是在 playstore 上检查 softwareVersion 的版本。

原始问题 我有一个几天前运行良好的实时应用程序,现在担心当用户从 Play 商店或应用程序抽屉或主屏幕快捷方式打开应用程序时。应用程序随机崩溃并且 1/5 它正在启动很好

下面是版本检查代码

build.gradle(应用级别)

compile 'org.jsoup:jsoup:1.8.3'

java代码:

public class VersionChecker extends AsyncTask<String, String, String> {
    String newVersion;
    Context context;
    public VersionChecker(Context context) {
        this.context = context;
    }
    @Override
    protected String doInBackground(String... params) {
        try {
            newVersion = Jsoup.connect("https://play.google.com/store    /apps/details?id=" + context.getPackageName() + "&hl=en")
                    .timeout(30000)
                    .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
                    .referrer("http://www.google.com")
                    .get()
                    .select("div[itemprop=softwareVersion]")
                    .first()
                    .ownText();
        } catch (IOException e) {
            e.printStackTrace();
        }

            return newVersion;
    } }

下面是异常跟踪

例外: 致命异常:主进程:com.demo.android.myapp,PID:5325 java.lang.RuntimeException:无法恢复活动 {com.demo.android.myapp/com.demo.android.myapp.SplashActivity}: java.lang.NullPointerException:尝试调用虚拟方法 'boolean java.lang.String.equalsIgnoreCase(java.lang.String)' 空对象引用 android.app.ActivityThread.performResumeActivity(ActivityThread.java:3103) 在 android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3134) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2481) 在 android.app.ActivityThread.-wrap11(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5417) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 引起 作者:java.lang.NullPointerException:尝试调用虚拟方法 'boolean java.lang.String.equalsIgnoreCase(java.lang.String)' 空对象引用 com.demo.android.myapp.SplashActivity.checkVersion(SplashActivity.java:81) 在 com.demo.android.myapp.SplashActivity.onResume(SplashActivity.java:242) 在 android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1258) 在 android.app.Activity.performResume(Activity.java:6327) 在 android.app.ActivityThread.performResumeActivity(ActivityThread.java:3092) 在 android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3134) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2481) 在 android.app.ActivityThread.-wrap11(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5417) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

【问题讨论】:

  • 添加字符串 newVersion=""。有时你不会连接到互联网,那个时候 newVersion 将为空或在检查之前检查 neqVersion 是否为空
  • 输入你的 SplashActivity 代码
  • 在 SplashActivity 中没什么大不了的,因为主要关注的是版本检查器顺便说一句我正在使用 VersionChecker versionChecker=new VersionChecker(); latestVersion = versionChecker.execute().get();@ManthanPatel 和 @Vinayak B 空案例被处理为 if (newVersion != null) return newVersion; else return CommonUtilities.getAppVersionName(context);
  • 在这里发短信给你的version name(旧的和现在的)。

标签: android jsoup


【解决方案1】:

我遇到了同样的问题,发现解决方案对我来说效果很好:

build.gradle(应用级别)

 compile 'com.squareup.okhttp:okhttp:2.5.0'

java代码:

public class VersionChecker extends AsyncTask<String, String, String> {
String newVersion;
Context context;
public VersionChecker(Context context) {
     this.context = context;
}
@Override
protected String doInBackground(String... params) {
    OkHttpClient client = new OkHttpClient();
    Request request = new Request.Builder()
            .url("https://play.google.com/store/apps/details?id=" + context.getPackageName() + "&hl=en")
            .build();
    try {
        Response response = client.newCall(request).execute();
        result = response.body().string();
    if(result!=null && result.contains("softwareVersion")){
        String parts[] = result.split("softwareVersion");
        result= parts[1].substring(
                parts[1].indexOf('>') + 1, parts[1].indexOf('<')
        ).trim();
    }else {
        result=CommonUtilities.getAppVersionName(context);
    }
    } catch (Exception ex) {
        result=CommonUtilities.getAppVersionName(context);
        ex.printStackTrace();
    }
    return result;
}}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多