我对android Context有一点问题,我不知道如何解决问题。这是我正在使用的代码:
public class TestActivity {
Context context;
public static String getPackageVersion(){
try {
PackageManager pm = context.getPackageManager();
PackageInfo packageInfo = pm.getPackageInfo(context.getPackageName(), 0);
version = packageInfo.versionName;
} catch (NameNotFoundException e) {
e.printStackTrace();
}
return version;
}
public static boolean checkClientApiVer(String clientApiVer){
int s = RPCCommunicator.strVerToIntVer(clientApiVer);
int c = RPCCommunicator.strVerToIntVer(getPackageVersion());
return (c>=s);
}
public boolean execute() {
serverApiVer = jsonObj.getString("server_api_ver");
Log.w("SERVER API VER","SHOW SERVER API VERSION : "+serverApiVer);
checkClientApiVer(serverApiVer);
}
}
它在这一行中表示Nullpointer异常:
PackageManager pm = context.getPackageManager();
实际上我无法使用this.getPackageManager()
或TestActivity.getPackageManager()
而我无法将context
设置为this
。
有什么建议吗?
答案 0 :(得分:3)
@Roflcoptr指出了基本的,但实际上,你的类没有扩展活动,所以它不是一个上下文,把它改成:
public class TestActivity extends Activity
如果你想让它成为一个实际的活动,或者,如果它只是一个辅助类,则在实例化时将活动传递给它。
答案 1 :(得分:3)
如果您的课程是一项活动,最好将其用作上下文。如果你需要另一个类中的上下文,你可以在applicationContext上有一个单例指针。
public class MyApp extends Application {
private static MyApp instance;
public MyApp() {
instance = this;
}
public static Context getContext() {
return instance;
}
}
并在您的清单文件中:
<application
android:name="com.mycompany.appname.MyApp"
android:icon="@drawable/icon"
android:label="@string/app_name">
现在您可以随时拥有
的上下文MyApp.GetContext();
答案 2 :(得分:2)
问题是您声明了上下文但从未实例化或分配了对它的引用。所以它指向null。
通常,TestActivity应该是Activity类的子类或类似的东西。
在这种情况下,您可以执行类似
的操作this.getPackageManager();
答案 3 :(得分:2)
您应该通过添加类的构造函数来初始化您的上下文,该构造函数不是Activity,
public TestActivity(Context c) {
this.context = c;
}
并在您的活动中,通过发送TestActivity
作为参数来实例化this
:
TestActivity tActivity = new TestActivity(this);//this refer to the Activity
第二个解决方案是扩展活动,你应该覆盖方法onCreate()
答案 4 :(得分:1)
而不是在类中创建上下文对象并保持活动或应用程序的引用导致android bcz中的内存泄漏,而不是创建任何特定类的对象。
您可以通过以下步骤
来实现这一目标1&GT;创建单例类的应用程序上下文并在manifest.xml中定义应用程序类;所以他们将成为整个应用程序生命周期中的一个上下文对象
2 - ;在使用该方法时传递上下文。
public static String getPackageVersion(Context context){
try {
PackageManager pm = context.getPackageManager();
PackageInfo packageInfo = pm.getPackageInfo(context.getPackageName(), 0);
version = packageInfo.versionName;
} catch (NameNotFoundException e) {
e.printStackTrace();
}
return version;
}