Android.content.Context.getPackageName () 'для ссылки на нулевой объект

Привет, я работаю с Fragments, который реализует интерфейс.

public class SigninFragment extends Fragment implements SigninInterface 

Реализация метода интерфейса в классе фрагмента выглядит следующим образом.

 @Override public void afterSubmitClicked(String userId, Bundle bundle) { Log.d(TAG,"Calling time afterSubmitClicked called"+bundle); if(!userId.equals("-1")){ //Logged in successfully //Move to MusicHome Intent mIntent = new Intent(getActivity(),MusicHome.class); mIntent.putExtra("SigninFragment.user_details", bundle); startActivity(mIntent); }else{ //Logging in failed //show error dialog } } 

Этот метод вызывается после извлечения класса AsynchronousTask (который расширяет AsyncTask).

Но у меня крушение. И сообщение об ошибке показывает

 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference 

Logcat

  02-14 16:37:04.648: E/AndroidRuntime(28177): Process: com.raaga.android, PID: 28177 02-14 16:37:04.648: E/AndroidRuntime(28177): java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference 02-14 16:37:04.648: E/AndroidRuntime(28177): at android.content.ComponentName.<init>(ComponentName.java:77) 02-14 16:37:04.648: E/AndroidRuntime(28177): at android.content.Intent.<init>(Intent.java:3996) 02-14 16:37:04.648: E/AndroidRuntime(28177): at com.raaga.fragments.SigninFragment.afterSubmitClicked(SigninFragment.java:152) 02-14 16:37:04.648: E/AndroidRuntime(28177): at com.raaga.asynctask.SignInAsyncTask.onPostExecute(SignInAsyncTask.java:92) 02-14 16:37:04.648: E/AndroidRuntime(28177): at com.raaga.asynctask.SignInAsyncTask.onPostExecute(SignInAsyncTask.java:1) 02-14 16:37:04.648: E/AndroidRuntime(28177): at android.os.AsyncTask.finish(AsyncTask.java:632) 02-14 16:37:04.648: E/AndroidRuntime(28177): at android.os.AsyncTask.access$600(AsyncTask.java:177) 02-14 16:37:04.648: E/AndroidRuntime(28177): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645) 02-14 16:37:04.648: E/AndroidRuntime(28177): at android.os.Handler.dispatchMessage(Handler.java:102) 02-14 16:37:04.648: E/AndroidRuntime(28177): at android.os.Looper.loop(Looper.java:135) 02-14 16:37:04.648: E/AndroidRuntime(28177): at android.app.ActivityThread.main(ActivityThread.java:5221) 02-14 16:37:04.648: E/AndroidRuntime(28177): at java.lang.reflect.Method.invoke(Native Method) 02-14 16:37:04.648: E/AndroidRuntime(28177): at java.lang.reflect.Method.invoke(Method.java:372) 02-14 16:37:04.648: E/AndroidRuntime(28177): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 02-14 16:37:04.648: E/AndroidRuntime(28177): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 

Я попробовал себя и исследовал в Google. Но я не получил никакого решения. Может ли кто-нибудь помочь в этом?

Solutions Collecting From Web of "Android.content.Context.getPackageName () 'для ссылки на нулевой объект"

Я нашел ошибку, что сделал. Нам нужно получить экземпляр активности из метода переопределения OnAttach () Например,

 public MainActivity activity; @Override public void onAttach(Activity activity){ this.activity = activity; } 

Затем передайте действие как контекст следующим образом.

 Intent mIntent = new Intent(activity, MusicHome.class); 

Ответы на этот вопрос помогли мне найти мою проблему, но мой источник был другим, поэтому, надеюсь, это может пролить свет на то, что кто-то найдет эту страницу, ища ответы на случайный случайный сбой:

Я указал объект SharedPreferences и попытался создать его в своем объявлении на уровне класса, например:

 public class MyFragment extends FragmentActivity { private SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //... 

Ссылаясь на this перед onCreate, вы вызывали ошибку «java.lang.NullPointerException: попытка вызвать виртуальный метод» java.lang.String android.content.Context.getPackageName () «для ссылки на нулевой объект».

Игнорирование объекта внутри onCreate () решило мою проблему, например:

 public class MyFragment extends FragmentActivity { private SharedPreferences sharedPref ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //... sharedPref = PreferenceManager.getDefaultSharedPreferences(this); 

Надеюсь, это поможет.

Android API уровня 23.

использование

getContext ()

вместо

getActivity ()

,

2. сильный текст

GetActivity () дает контекст активности. Здесь вы можете использовать

MyActivity.this

вместо

GetActivity () / getApplicationContext ()

Вам нужно только сделать это:

 Intent myIntent = new Intent(MainActivity.this, nextActivity.class); 

Для меня проблема заключалась в том, что я передавал Activity в конструктор, а не в контекст

 public Adapter(Activity activity, List<MediaItem> items, boolean can) { mItems = items; canEdit = can; mActivity = activity; } 

И используя эту активность для getDefaultSharedPreferences (), поэтому я изменил Activity на Context, и я все еще вызывал конструктор Adapter с MainActivity.this