我有一个包含方法的类(DataSource.java),该方法调用MainActivity中的另一个方法,该方法接收上下文和字符串变量。
在Datasource.java中,当从MainActivity调用方法时,我已将上下文变量设置为null,即使我将其设置为“context”,我也会收到与启动应用程序时相同的错误:EXCEPTION错误这一行:context = getApplicationContext();
。
有人可以建议我,我错在哪里吗?
DataSource.java:
public class ToursDataSource {
public boolean addToFollowList(Tour tour) {
ContentValues values = new ContentValues();
values.put(ToursDBOpenHelper.COLUMN_IMAGE, tour.getTitle());
long result = database.insert(ToursDBOpenHelper.TABLE_FOLLOW, null, values);
MainActivity orgName = new MainActivity();
orgName.sendRegId(this, "Test string");
return null;
}
}
MainActivity:
Context context;
...
public void sendRegId(Context context, String organization) {
//PROBLEM IS AT THIS LINE
context = getApplicationContext();
// Check device for Play Services APK. If check succeeds, proceed with
// GCM registration.
if (checkPlayServices()) {
gcm = GoogleCloudMessaging.getInstance(this);
regid = getRegistrationId(context);
Log.i(TAG, "Registration started!");
Log.d("RegisterActivity", "GCM RegId is: " + regid);
if (regid.isEmpty()) {
registerInBackground();
}
} else {
Log.i(TAG, "No valid Google Play Services APK found.");
}
Sender results = new Sender();
results.shareRegIdWithAppServer(regid, organization);
}
...
logcat的:
04-16 15:42:07.765: E/AndroidRuntime(15610): FATAL EXCEPTION: main
04-16 15:42:07.765: E/AndroidRuntime(15610): java.lang.NullPointerException
04-16 15:42:07.765: E/AndroidRuntime(15610): at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:109)
04-16 15:42:07.765: E/AndroidRuntime(15610): at com.exploreca.tourfinder.MainActivity.sendRegId(MainActivity.java:189)
04-16 15:42:07.765: E/AndroidRuntime(15610): at com.exploreca.tourfinder.ToursDataSource.addToFollowList(ToursDataSource.java:205)
04-16 15:42:07.765: E/AndroidRuntime(15610): at com.exploreca.tourfinder.TourDetailActivity.onOptionsItemSelected(TourDetailActivity.java:129)
04-16 15:42:07.765: E/AndroidRuntime(15610): at android.app.Activity.onMenuItemSelected(Activity.java:2640)
04-16 15:42:07.765: E/AndroidRuntime(15610): at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:1171)
04-16 15:42:07.765: E/AndroidRuntime(15610): at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
04-16 15:42:07.765: E/AndroidRuntime(15610): at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)
04-16 15:42:07.765: E/AndroidRuntime(15610): at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
04-16 15:42:07.765: E/AndroidRuntime(15610): at com.android.internal.view.menu.ActionMenuView.invokeItem(ActionMenuView.java:630)
04-16 15:42:07.765: E/AndroidRuntime(15610): at com.android.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:200)
04-16 15:42:07.765: E/AndroidRuntime(15610): at android.view.View.performClick(View.java:4475)
04-16 15:42:07.765: E/AndroidRuntime(15610): at android.view.View$PerformClick.run(View.java:18786)
04-16 15:42:07.765: E/AndroidRuntime(15610): at android.os.Handler.handleCallback(Handler.java:730)
04-16 15:42:07.765: E/AndroidRuntime(15610): at android.os.Handler.dispatchMessage(Handler.java:92)
04-16 15:42:07.765: E/AndroidRuntime(15610): at android.os.Looper.loop(Looper.java:137)
04-16 15:42:07.765: E/AndroidRuntime(15610): at android.app.ActivityThread.main(ActivityThread.java:5493)
04-16 15:42:07.765: E/AndroidRuntime(15610): at java.lang.reflect.Method.invokeNative(Native Method)
04-16 15:42:07.765: E/AndroidRuntime(15610): at java.lang.reflect.Method.invoke(Method.java:525)
04-16 15:42:07.765: E/AndroidRuntime(15610): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209)
04-16 15:42:07.765: E/AndroidRuntime(15610): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025)
04-16 15:42:07.765: E/AndroidRuntime(15610): at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:1)
尝试使用它:
static Context = mConext;
我认为这很有效。
答案 1 :(得分:0)
像这样做出改变:
context = getApplicationContext();
到
this.context = context;
答案 2 :(得分:0)
我猜MainActivity
是一个Activity类。您无法实例化Activity
类。您在清单文件中声明活动。每个Activity都有一个生命周期。您不能将Activity类视为普通的java类。
要知道原因阅读raghav sood的回答@
Can i Create the object of a activity in other class?
引用Raghav's Sood
通过将Activity视为普通的Java类,最终得到null 上下文。因为Activity中的大多数方法都是在其Context上调用的,所以 将获得一个空指针异常,这就是你的应用程序崩溃的原因。