我正在使用下面的代码通过使用 Jsoup 获取详细信息来从 Google Play 商店获取versionName,但它抛出了一些异常,但最近它工作正常。不知道现在怎么样了?
我的代码是 -
public class VersionChecker extends AsyncTask<String, String, String> {
private String newVersion;
@Override
protected String doInBackground(String... params) {
try {
newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + ParkwayApplication.getInstance().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();
Log.d("otherhtml", newVersion);
} catch (IOException e) {
e.printStackTrace();
}
return newVersion;
}
}
Run Code Online (Sandbox Code Playgroud)
注意 - 在上面的代码中,select()返回大小 0,当我调用first() 时,它将返回 null,这就是为什么会出现空指针异常。
注意 - 我不知道为什么它最近工作为什么现在不工作?
我现在使用的这个库版本 -
compile 'org.jsoup:jsoup:1.8.3'
Run Code Online (Sandbox Code Playgroud)
但我也尝试了最新的-
compile 'org.jsoup:jsoup:1.11.3'
Run Code Online (Sandbox Code Playgroud)
以下是我得到的确切错误 -
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method
'java.lang.String org.jsoup.nodes.Element.ownText()' on a null object reference
at com.ranosys.parkway.utils.VersionChecker.doInBackground(VersionChecker.java:31)
at com.ranosys.parkway.utils.VersionChecker.doInBackground(VersionChecker.java:16)
at android.os.AsyncTask$2.call(AsyncTask.java:295)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
Run Code Online (Sandbox Code Playgroud)
小智 6
我经常解析来自谷歌的信息。在我看来,不要选择像 .xyOfqd 这样生成的类名,因为它们经常改变。我更喜欢通过正则表达式搜索常量文本。
Element element = document.select("div:matchesOwn(^Current Version$)").first().parent().select("span").first();
String version = element.text();
Run Code Online (Sandbox Code Playgroud)
由于页面已更改,您将获得空指针异常。我已经查看了 Playstore 中的几个应用程序。没有你的 div 名为 [itemprop = softwareversion] 了。所以你在 null 上调用 .first() 因为你的 select() 不会返回任何结果。
只是如果您需要另一种方法 =)
| 归档时间: |
|
| 查看次数: |
2135 次 |
| 最近记录: |