尝试在空对象引用上调用虚方法’java.lang.String org.jsoup.nodes.Element.ownText()’

我使用下面的代码通过使用jsoup从playstore获取versionName我正在获取详细信息,但它抛出了一些exception。

我的代码是

public class ForceUpdateAsync extends AsyncTask{ private String latestVersion; private String currentVersion; private Context context; public ForceUpdateAsync(String currentVersion, Context context){ this.currentVersion = currentVersion; this.context = context; } @Override protected JSONObject doInBackground(String... params) { try { latestVersion = 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 new JSONObject(); } @Override protected void onPostExecute(JSONObject jsonObject) { if(latestVersion!=null){ if(!currentVersion.equalsIgnoreCase(latestVersion)){ // Toast.makeText(context,"update is available.",Toast.LENGTH_LONG).show(); if(!(context instanceof SplashActivity)) { if(!((Activity)context).isFinishing()){ showForceUpdateDialog(); } } } } super.onPostExecute(jsonObject); } public void showForceUpdateDialog(){ AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(new ContextThemeWrapper(context, R.style.DialogDark)); alertDialogBuilder.setTitle(context.getString(R.string.youAreNotUpdatedTitle)); alertDialogBuilder.setMessage(context.getString(R.string.youAreNotUpdatedMessage) + " " + latestVersion + context.getString(R.string.youAreNotUpdatedMessage1)); alertDialogBuilder.setCancelable(false); alertDialogBuilder.setPositiveButton(R.string.update, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + context.getPackageName()))); dialog.cancel(); } }); alertDialogBuilder.show(); } } 

但我得到空指针exception错误

致命exception:AsyncTask#1进程:com.yabeee.yabeee,PID:15893 java.lang.RuntimeException:在java上的android.os.AsyncTask $ 3.done(AsyncTask.java 🙂 4执行doInBackground()时发生错误。 util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)at java.util.concurrent.FutureTask.setException(FutureTask.java:222)at java.util.concurrent.FutureTask.run(FutureTask.java:242)at android .os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:231)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java: 587)at java.lang.Thread.run(Thread.java:818)引起:java.lang.NullPointerException:尝试调用虚方法’java.lang.String org.jsoup.nodes.Element.ownText()’on com.yabeee.yabeee.ModelClasses.ForceUpdateAsync.doInBackground(ForceUpdateAsync.java:53)中的空对象引用,位于com.yabeee.yabeee.ModelClasses.ForceUpdateAsync.doInBackground(ForceUpdateAsy) nc.java:28)android.os.AsyncTask $ 2.call(AsyncTask.java:292)at java.util.concurrent.FutureTask.run(FutureTask.java:237)at android.os.AsyncTask $ SerialExecutor $ 1.run (AsyncTask.java:231)java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)位于java.lang.Thread的java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:587)。运行(Thread.java:818)

请有人帮我解决这个问题。

使用更新的代码:

  newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + mCom.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.hAyfc:nth-child(4) > span:nth-child(2) > div:nth-child(1) > span:nth-child(1)") .first() .ownText(); 

我使用相同的代码,也得到了相同的错误。 我通过获取Web开发人员的帮助来解决此错误,以便更好地了解Google Play商店更新的代码。 使用下面的代码工作正常(代码更新于10/08/2018)

公共类ForceUpdateAsync扩展AsyncTask {

  private String latestVersion; private String currentVersion; private Context context; public ForceUpdateAsync(String currentVersion, Context context){ this.currentVersion = currentVersion; this.context = context; } @Override protected JSONObject doInBackground(String... params) { try { latestVersion = 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.hAyfc:nth-child(4) > span:nth-child(2) > div:nth-child(1) > span:nth-child(1)") .first() .ownText(); Log.e("latestversion","---"+latestVersion); } catch (IOException e) { e.printStackTrace(); } return new JSONObject(); } @Override protected void onPostExecute(JSONObject jsonObject) { if(latestVersion!=null){ if(!currentVersion.equalsIgnoreCase(latestVersion)){ // Toast.makeText(context,"update is available.",Toast.LENGTH_LONG).show(); if(!(context instanceof SplashActivity)) { if(!((Activity)context).isFinishing()){ showForceUpdateDialog(); } } } } super.onPostExecute(jsonObject); } public void showForceUpdateDialog(){ context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + context.getPackageName()))); } }