【问题标题】:Android can not get version name, return String nullAndroid 无法获取版本名称,返回 String null
【发布时间】:2016-06-12 16:19:19
【问题描述】:

首先对不起我的英语,我是一个新的 android 开发者(爱好),我有一个问题。

很抱歉,我不知道如何更好地描述我的问题。 Inded,从 3 天开始,我试图解决这个问题,但我没有更多的想法。

我相信认为android studio很疯狂,或者对我来说可能是。

所以在我的项目中,我尝试实现一个自动更新系统,但为此我已经实现了从服务器上的文本中获取版本的部分。

但是由于我已经实现了代码来获取我的应用程序“应用程序名称”的当前版本,所以我遇到了同样的错误

java.lang.RuntimeException:无法实例化活动 ComponentInfo{erim.ups/erim.ups.PreLoadScreen}:java.lang.NullPointerException:尝试调用虚拟方法 'android.content.pm.ApplicationInfo android.content.Context .getApplicationInfo()' 在空对象引用上 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2361) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2510) 在 android.app.ActivityThread.-wrap11(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1363) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5461) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' 在 android.content.ContextWrapper.getApplicationInfo(ContextWrapper.java:156) 在 android.view.ContextThemeWrapper.getTheme(ContextThemeWrapper.java:110) 在 android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:222) 在 android.app.AlertDialog$Builder.(AlertDialog.java:452) 在 erim.ups.PreLoadScreen.(PreLoadScreen.java:44) 在 java.lang.Class.newInstance(本机方法) 在 android.app.Instrumentation.newActivity(Instrumentation.java:1068) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2351) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2510) 在 android.app.ActivityThread.-wrap11(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1363) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5461) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

但是第 44 行是声明 sharedPreferences,我不明白我的问题是什么。

最终的 SharedPreferences data = this.getSharedPreferences("Mes_Paramets", MODE_PRIVATE);

你能帮帮我吗?

我的来源链接:preloadScreen.java

【问题讨论】:

  • 提问的时候不要把你的源代码链接到其他网站,尽量放在同一个问题sn-p中
  • 对不起,这是我第一次也是第一次犯这个错误。
  • 提示:使用 Github 代替 Dropbox

标签: java android android-studio nullpointerexception


【解决方案1】:

通常,在onCreate() 方法中调用super.onCreate() 之前,不要调用从Activity 继承的方法。

替换:

final SharedPreferences sharedPrefs = getSharedPreferences("Mes_Parametres", MODE_PRIVATE); 
final SharedPreferences data = this.getSharedPreferences("Mes_Parametres", MODE_PRIVATE); 
final String monParametreUrl = data.getString("ParametreUrl", null); 

与:

SharedPreferences sharedPrefs; 
SharedPreferences data; 
String monParametreUrl; 

然后,将您的 onCreate() 更改为:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
  super.onCreate(savedInstanceState); 
  sharedPrefs = getSharedPreferences("Mes_Parametres", MODE_PRIVATE); 
  data = this.getSharedPreferences("Mes_Parametres", MODE_PRIVATE); 
  monParametreUrl = data.getString("ParametreUrl", null); 

  setContentView(R.layout.activity_pre_load_screen); 

  // rest of your onCreate() code goes here
}

另外,今后在 Stack Overflow 上提问时,请将相关源代码放在问题中,而不是作为链接。毕竟,一旦您在 DropBox 中删除该文件,您的问题就几乎无法再帮助其他开发人员了。

【讨论】:

  • 感谢您的帮助,遗憾的是您的解决方案只是更改了错误消息,现在我有:Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.SharedPreferences android.content. Context.getSharedPreferences(java.lang.String, int)' 在一个空对象上'对于行:SharedPreferences sharedPrefs;' PS:我不知道来源,我会在以后的帖子中改变它
猜你喜欢
  • 1970-01-01
  • 2017-05-10
  • 2020-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
相关资源
最近更新 更多