【发布时间】: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(旧的和现在的)。