인터페이스를 구현하는 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
}
}
이 메서드는 AsyncTask를 확장하는 AsynchronousTask 클래스를 추출한 후 호출됩니다.
하지만 충돌이 발생합니다. 그리고 오류 메시지는
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)
답변
나는 내가 한 실수를 발견했습니다. 재정의 메서드 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);
도움이 되었기를 바랍니다.
답변
안드로이드 API 레벨 23.
사용하다
getContext ()
대신에
getActivity ()
getActivity ()는 부모 Activity, Context 객체를 제공합니다.
여기에서 사용할 수 있습니다
MyActivity.this
대신에
getActivity () / getApplicationContext ()
답변
토스트를 조각으로 보여 주려고도 똑같은 문제가 발생했습니다.
디버깅 후 호출하기 전에 조각을 제거하고 있음을 알았습니다.
Toast.makeText(getContext(), "text", Toast.LENGTH_SHORT).show();
조각이 제거 되었기 때문에 컨텍스트가 null이되어 예외가 발생했습니다.
간단한 해결책 : 조각을 getContext()
제거하기 전에를 호출하십시오 .
답변
제 경우에는 Fragment
이 줄 에서 오류가 발생했습니다 .
Intent intent = new Intent(getActivity(), SecondaryActivity.class);
위의 코드를 트리거 한 항목을 두 번 클릭했을 때 발생하여 두 개의 SecondaryActivity.class
활동이 동시에 시작되었습니다. 나는 정상 폐쇄 SecondaryActivity.class
에 대한 호출을 트리거 누르면 다시 버튼으로 활동을 getActivity()
의 SecondaryActivity.class
전경에 온있다. getActivity()
반환 된에 대한 호출 null
입니다. 일종의 이상한 Android 버그이므로 일반적으로 발생하지 않아야합니다. 사용자가 한 번 클릭 한 후 클릭을 차단할 수 있습니다.
답변
다음 만 수행하면됩니다.
Intent myIntent = new Intent(MainActivity.this, nextActivity.class);
답변
나에게 문제는 내가 Context가 아닌 생성자에 Activity를 전달한다는 것입니다.
public Adapter(Activity activity, List<MediaItem> items, boolean can) {
mItems = items;
canEdit = can;
mActivity = activity;
}
이 활동을 getDefaultSharedPreferences ()에 사용하여 활동을 Context로 변경하고 MainActivity.this를 사용하여 여전히 Adapter 생성자를 호출했습니다.
