java - DialogListener 的 startActivity 导致应用程序崩溃

标签 java android android-intent android-fragments listener

我正在使用socialauth-android在我的应用程序中,我有使用 linkedin 登录的按钮。

这是我的代码 fragment :

public class SigninDialog extends android.app.DialogFragment{

    public SigninDialog () {}

    SocialAuthAdapter adapter;
    Profile profileMap;


    @Override
    public View onCreateView(LayoutInflater inflater,
            @Nullable ViewGroup container,
            @Nullable Bundle savedInstanceState) {


         View view = inflater.inflate(R.layout.dialog_signin, container, false);
         getDialog().setTitle("Sign In");

         //Login via Linkedin
          adapter = new SocialAuthAdapter(new ResponseListener());
         ((Button) view.findViewById(R.id.Signin_linkedinBtn)).setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                getDialog().dismiss();
                adapter.authorize(getActivity(), Provider.LINKEDIN);
            }
        });

        return view;
    }

        //Listener For the Linkedin Connection 
        private final class ResponseListener implements DialogListener {

            //If login with linkedin success then execute this void
            @Override
            public void onComplete(Bundle values) {           
                profileMap =  adapter.getUserProfile(); 
                String email=profileMap.getEmail(); 

                //Error Lines
                Intent i = new Intent(getActivity(),CallActivity.class);
                startActivity(i); // The error is raised here

                }   
      }

}

问题是,当使用 linkedin 成功登录时,应用程序崩溃而不是启动新 Activity 。

01-20 22:10:44.184: E/AndroidRuntime(5759): FATAL EXCEPTION: main
01-20 22:10:44.184: E/AndroidRuntime(5759): Process: com.example.kontactapp, PID: 5759
01-20 22:10:44.184: E/AndroidRuntime(5759): java.lang.IllegalStateException: Fragment SigninDialog{4b0a067c} not attached to Activity
01-20 22:10:44.184: E/AndroidRuntime(5759):     at android.app.Fragment.startActivity(Fragment.java:1047)
01-20 22:10:44.184: E/AndroidRuntime(5759):     at android.app.Fragment.startActivity(Fragment.java:1033)
01-20 22:10:44.184: E/AndroidRuntime(5759):     at com.example.kontactapp.SigninDialog$ResponseListener.onComplete(SigninDialog.java:173)
01-20 22:10:44.184: E/AndroidRuntime(5759):     at org.brickred.socialauth.android.SocialAuthAdapter$5$1.run(SocialAuthAdapter.java:731)
01-20 22:10:44.184: E/AndroidRuntime(5759):     at android.os.Handler.handleCallback(Handler.java:733)
01-20 22:10:44.184: E/AndroidRuntime(5759):     at android.os.Handler.dispatchMessage(Handler.java:95)
01-20 22:10:44.184: E/AndroidRuntime(5759):     at android.os.Looper.loop(Looper.java:136)
01-20 22:10:44.184: E/AndroidRuntime(5759):     at android.app.ActivityThread.main(ActivityThread.java:5021)
01-20 22:10:44.184: E/AndroidRuntime(5759):     at java.lang.reflect.Method.invokeNative(Native Method)
01-20 22:10:44.184: E/AndroidRuntime(5759):     at java.lang.reflect.Method.invoke(Method.java:515)
01-20 22:10:44.184: E/AndroidRuntime(5759):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:827)
01-20 22:10:44.184: E/AndroidRuntime(5759):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:643)
01-20 22:10:44.184: E/AndroidRuntime(5759):     at dalvik.system.NativeStart.main(Native Method)

这是错误消息:

最佳答案

发生此异常是因为 ResponseListener 回调(onComplete)在您的dialogFragment解雇之后调用。因此,在调用 startActivity() 之后,在 onComplete 方法中关闭对话框 fragment 。

public class SigninDialog extends android.app.DialogFragment{

    public SigninDialog () {}

    SocialAuthAdapter adapter;
    Profile profileMap;


    @Override
    public View onCreateView(LayoutInflater inflater,
            @Nullable ViewGroup container,
            @Nullable Bundle savedInstanceState) {


         View view = inflater.inflate(R.layout.dialog_signin, container, false);
         getDialog().setTitle("Sign In");

         //Login via Linkedin
          adapter = new SocialAuthAdapter(new ResponseListener());
         ((Button) view.findViewById(R.id.Signin_linkedinBtn)).setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                adapter.authorize(getActivity(), Provider.LINKEDIN);
            }
        });

        return view;
    }

        //Listener For the Linkedin Connection 
        private final class ResponseListener implements DialogListener {

            //If login with linkedin success then execute this void
            @Override
            public void onComplete(Bundle values) {           
                profileMap =  adapter.getUserProfile(); 
                String email=profileMap.getEmail(); 

                //Error Lines
                Intent i = new Intent(getActivity(),CallActivity.class);
                startActivity(i); // The error is raised here
                 getDialog().dismiss();
                }   
      }

}

关于java - DialogListener 的 startActivity 导致应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28055466/

相关文章:

java - Java中的位级操作/Java中的reterpreted_cast<>?

java - 有什么办法可以从多个网址获取多张图片吗?

android - 从 DialogFragment 接收回(到 Fragment)数据的最佳方式是什么

java - android.intent.action.DOWNLOAD_COMPLETE 不会在下载失败时收到

java - 将一个spliterator拆分成N个spliterator

java - 长时间运行的构造函数会创建半初始化对象吗?

java - Selenium Java-如何登录一次并使用同一浏览器实例运行多个测试用例,而不是为每个测试打开/关闭浏览器

java - android CardView 替代方案

Android 从 Intent 获取 vCard 数据

android - 在 Activity 中声明 intent-filter 与在接收器中声明有什么区别?