【问题标题】:Retrofit 1.9 How to start new Activity from CallbackRetrofit 1.9 如何从回调开始新的Activity
【发布时间】:2017-11-05 15:25:12
【问题描述】:

我的问题很简单,我认为很简单:) 我无法从 Retrofit 中的 CallBack 方法启动新的 Activity,我遇到了类似

的问题

" android.util.AndroidRuntimeException:从 Activity 上下文外部调用 startActivity() 需要 FLAG_ACTIVITY_NEW_TASK 标志。这真的是您想要的吗?"

    sign_in_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String userEmail = email.getText().toString();
            String userPassword = password.getText().toString();

            final LoginService loginService = RetrofitClient.createService(LoginService.class, userEmail, userPassword);
            loginService.basicLogin(new Callback<User>() {
                @Override
                public void success(User user, Response response) {
                    Toast.makeText(getApplicationContext(),"You are Logged", Toast.LENGTH_SHORT).show();

                    Intent intent = new Intent(getApplicationContext(), BetweenActivity.class);
                    startActivity(intent);





                }

                @Override
                public void failure(RetrofitError error) {
                    Toast.makeText(getApplicationContext(),"Something went wrong", Toast.LENGTH_SHORT).show();

                }
            });

这是我的日志:

致命异常:主要 进程:com.example.bunzlau.retrofit,PID:18138 java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.bunzlau.retrofit/com.example.bunzlau.retrofit.BetweenActivity}:java.lang.NullPointerException:尝试调用虚拟方法 'android.view.View android.空对象引用上的 widget.Button.findViewById(int)' 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3253) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349) 在 android.app.ActivityThread.access$1100(ActivityThread.java:221) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:158) 在 android.app.ActivityThread.main(ActivityThread.java:7225) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法 'android.view.View android.widget.Button.findViewById(int)' 在 com.example.bunzlau.retrofit.BetweenActivity.onCreate(BetweenActivity.java:18) 在 android.app.Activity.performCreate(Activity.java:6876) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3206) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349) 在 android.app.ActivityThread.access$1100(ActivityThread.java:221) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:158) 在 android.app.ActivityThread.main(ActivityThread.java:7225) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

【问题讨论】:

  • 您的 BetweenActivity.onCreate() 似乎正在引发异常,因此您的问题可能与从 Retrofit 启动活动没有直接关系。在 BetweenActivity.onCreate() 中查找 findViewById()。

标签: java android callback retrofit


【解决方案1】:

您是在回调范围内调用 startActivity(),而不是在活动范围内。您需要获取对当前活动的引用,并使用它来开始下一个活动。

private Context context = this;

sign_in_button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        String userEmail = email.getText().toString();
        String userPassword = password.getText().toString();

        final LoginService loginService = RetrofitClient.createService(LoginService.class, userEmail, userPassword);
        loginService.basicLogin(new Callback<User>() {
            @Override
            public void success(User user, Response response) {
                Toast.makeText(getApplicationContext(),"You are Logged", Toast.LENGTH_SHORT).show();

                Intent intent = new Intent(getApplicationContext(), BetweenActivity.class);
                context.startActivity(intent);





            }

            @Override
            public void failure(RetrofitError error) {
                Toast.makeText(getApplicationContext(),"Something went wrong", Toast.LENGTH_SHORT).show();

            }
        });

【讨论】:

  • 感谢您的评论,但我仍然收到此错误:"Caused by: java.lang.NullPointerException"。你知道可能是什么原因吗?
  • 我的意思是,我得到了对当前活动的引用,但它不能正常工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-30
  • 1970-01-01
  • 1970-01-01
  • 2017-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多