首页 文章

改造1.9如何从回调中启动新活动

提问于
浏览
0

我只是提问,我认为很简单:)我无法从Retrofit中的CallBack方法启动新的Activity,我遇到的问题就像

" android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?"

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.app.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)at com.android.internal.os.ZygoteInit.main(Zy) goteInit.java:1120)引起:java.lang.NullPointerException:尝试在com.example.bunzlau.retrofit上的空对象引用上调用虚方法'android.view.View android.widget.Button.findViewById(int)' .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.app.Looper.loop(Looper.java:158)android.app.ActivityThread.main(ActivityThread.java:7225)at java.lang.reflect.Method.invoke(Native Method)位于com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1230)的com.and roid.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

1 回答

  • 0

    您从Callback范围内调用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();
    
                }
            });
    

相关问题