无法执行android活动

DevWithSigns

我正在尝试为Android Lollipop(5.0)构建一个应用程序。有一个登录片段,当我按下登录按钮时,应用程序会自动崩溃。我正在分享我的代码和错误消息,请指导我。

BaseActivity.java

public abstract class BaseActivity extends AppCompatActivity {
    protected CoreApplication coreApplication;
    @Override
    protected void onCreate(Bundle savedState) {
        super.onCreate(savedState);
        coreApplication = (CoreApplication) getApplication();
    }
}

BaseAuthenticatedActivity.java

public abstract class BaseAuthenticatedActivity extends BaseActivity {
    @Override
    protected final void onCreate(Bundle savedState) {
        super.onCreate(savedState);
        if (!coreApplication.getAuth().getUser().isLoggedIn()) {
            startActivity(new Intent(this, LoginActivity.class));
            finish();
            return;
        }
        onCoreApplicationCreate(savedState);
    }
    protected abstract void onCoreApplicationCreate(Bundle savedState);
}

LoginActivity.java

public class LoginActivity extends BaseActivity implements View.OnClickListener, LoginFragment.CallBacks {
    private static final int REQUEST_NARROW_LOGIN = 1;
    private View loginButton;
    @Override
    protected void onCreate(Bundle savedState) {
        super.onCreate(savedState);
        setContentView(R.layout.activity_login);
        loginButton = findViewById(R.id.LoginJustChat);
        if (loginButton != null) {
            loginButton.setOnClickListener(this);
        }
    }
    @Override
    public void onClick(View view) {
        if (view == loginButton)
            startActivityForResult(new Intent(this, LoginNarrowActivity.class), REQUEST_NARROW_LOGIN);
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode != RESULT_OK)
            return;
        if (requestCode == REQUEST_NARROW_LOGIN) {
            finishLogin();
        }
    }
    private void finishLogin() {
        startActivity(new Intent(this, MainActivity.class));
        finish();
    }
    @Override
    public void onLoggedIn() {
        finishLogin();
    }
}

LoginNarrowActivity.java

public class LoginNarrowActivity extends BaseActivity implements LoginFragment.CallBacks {
    @Override
    protected void onCreate(Bundle savedState){
        super.onCreate(savedState);
        setContentView(R.layout.activity_login_narrow);
    }
    @Override
    public void onLoggedIn() {
        setResult(RESULT_OK);
        finish();
    }
}

MainActivity.java

public class MainActivity extends BaseAuthenticatedActivity {
    @Override
    protected void onCoreApplicationCreate(Bundle savedState) {
    }
}

BaseFragment.java

public abstract class BaseFragment extends Fragment {
    protected CoreApplication application;
    @Override
    public void onCreate(Bundle savedInstance) {
        super.onCreate(savedInstance);
        application = (CoreApplication) getActivity().getApplication();
    }
}

LoginFragment.java

public class LoginFragment extends BaseFragment implements View.OnClickListener {

    private Button loginButton;
    private CallBacks callBacks;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup root, Bundle savedState) {
        View view = inflater.inflate(R.layout.fragment_login, root, false);
        loginButton = (Button) view.findViewById(R.id.fragment_login_loginButton);
        loginButton.setOnClickListener(this);
        return view;
    }
    @Override
    public void onClick(View view) {
        if (view == loginButton) {
            application.getAuth().getUser().setIsLoggedIn(true);
            callBacks.onLoggedIn();

        }
    }
    // because onAttach(Activity activity) is deprecated
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof CallBacks) {
            callBacks = (CallBacks) context;
        } else {
            throw new ClassCastException(context.toString()
                    + " must implement MyListFragment.OnItemSelectedListener");
        }
    }
    @Override
    public void onDetach() {
        super.onDetach();
        callBacks = null;
    }

    public interface CallBacks {
        void onLoggedIn();
    }
}

错误:

java.lang.NullPointerException:尝试在空对象引用上调用接口方法'void com.example.usama.demoapp.fragments.LoginFragment $ CallBacks.onLoggedIn()'

请用这个指导我。

青蛙

欢迎使用Android!

你有一个NullPointerException这是非常普遍的[而且很可爱;因为它很容易调试] Java中的异常。检查您的LoginFragment以下方法将导致引发此异常。

@Override
public void onClick(View view) {
    if (view == loginButton) {
        application.getAuth().getUser().setIsLoggedIn(true);
        callBacks.onLoggedIn();
    }
}

为了诊断此错误,有几点注意事项:

  • 在这种情况下callBacks当您声明类成员进行初始化时,Java会自动将其初始化为null

  • null参考上调用任何方法都将导致NPE

好吧,让我们缩小到您的具体情况。您声明了一个名为的类成员,callBacks但从未对其进行初始化,而且,我看不到为其分配任何内容的方法。因此,该类成员始终存在null,因此对其进行的任何后续方法调用都会导致我们转到NPE

作为解决方案,您应该在您的LoginFragment类中添加setter方法callBacks在另一面提供此对象,您首先在其中创建此片段的实例。

更新#1

当我在onAttach方法中将Activity而不是Context作为参数传递时,它将起作用。但我想知道为什么会导致错误?

原因很简单。由于您的活动已经实现了该接口,因此将其传递给您的LoginFragmentas上下文将导致条件if (context instanceof CallBacks)变为真。但是,裸露通过context不会导致该if语句的建立

你能告诉我如何定义二传手吗?

很简单!就像其他常规方法一样,声明这样的方法:

public void setOnLoginListener(Callbacks listener){
    this.callbacks = listener;
}

更新#2

我需要定义setOnLoginListener方法的地方

LoginFragment班里。

我应该在哪里称呼它

在您首先实例化LoginFragment课程的主要活动中

有什么参数?

您的活动,该活动实现了该Java接口。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法执行活动Android的方法

来自分类Dev

Android无法执行活动方法

来自分类Dev

Android-无法执行活动的方法

来自分类Dev

无法执行活动的方法?

来自分类Dev

无法执行活动的方法?

来自分类Dev

Android-IllegalStateException:无法执行活动的方法

来自分类Dev

Android-java.lang.IllegalStateException:无法执行活动的方法

来自分类Dev

InvocationTargetException:无法执行活动的方法

来自分类Dev

Android IllegalStateException:无法执行活动的方法。发起新活动时

来自分类Dev

Android-IllegalStateException:无法执行活动的方法,由InvocationTargetException引起

来自分类Dev

Android客户端错误-java.lang.IllegalStateException:无法执行活动的方法

来自分类Dev

Android-IllegalStateException:无法执行活动的方法,由InvocationTargetException引起

来自分类Dev

IllegalStateException:发生onClick事件时无法执行活动的方法

来自分类Dev

无法执行活动的方法:AutoCompleteTextView.setAdapter

来自分类Dev

发现按钮IllegalStateException:无法执行活动的方法

来自分类Dev

Android:我无法执行collapseActionView

来自分类Dev

Android Studio无法执行DEX

来自分类Dev

Android Dex:无法执行DX(IntelliJ)

来自分类Dev

Android Studio无法执行DEX

来自分类Dev

Android sqlite:无法执行方法onclick

来自分类Dev

Android-由于IllegalStateException,导致无法在完成后销毁活动:onSaveInstanceState之后无法执行此操作

来自分类Dev

Android Studio执行失败,无法执行任务compilefreeDebugKotlin

来自分类Dev

Android-无法执行任务:任务已经执行

来自分类Dev

无法执行测试

来自分类Dev

无法执行缺席

来自分类Dev

无法执行Cardview

来自分类Dev

无法执行表格

来自分类Dev

SoapExtension无法执行

来自分类Dev

无法执行查询

Related 相关文章

  1. 1

    无法执行活动Android的方法

  2. 2

    Android无法执行活动方法

  3. 3

    Android-无法执行活动的方法

  4. 4

    无法执行活动的方法?

  5. 5

    无法执行活动的方法?

  6. 6

    Android-IllegalStateException:无法执行活动的方法

  7. 7

    Android-java.lang.IllegalStateException:无法执行活动的方法

  8. 8

    InvocationTargetException:无法执行活动的方法

  9. 9

    Android IllegalStateException:无法执行活动的方法。发起新活动时

  10. 10

    Android-IllegalStateException:无法执行活动的方法,由InvocationTargetException引起

  11. 11

    Android客户端错误-java.lang.IllegalStateException:无法执行活动的方法

  12. 12

    Android-IllegalStateException:无法执行活动的方法,由InvocationTargetException引起

  13. 13

    IllegalStateException:发生onClick事件时无法执行活动的方法

  14. 14

    无法执行活动的方法:AutoCompleteTextView.setAdapter

  15. 15

    发现按钮IllegalStateException:无法执行活动的方法

  16. 16

    Android:我无法执行collapseActionView

  17. 17

    Android Studio无法执行DEX

  18. 18

    Android Dex:无法执行DX(IntelliJ)

  19. 19

    Android Studio无法执行DEX

  20. 20

    Android sqlite:无法执行方法onclick

  21. 21

    Android-由于IllegalStateException,导致无法在完成后销毁活动:onSaveInstanceState之后无法执行此操作

  22. 22

    Android Studio执行失败,无法执行任务compilefreeDebugKotlin

  23. 23

    Android-无法执行任务:任务已经执行

  24. 24

    无法执行测试

  25. 25

    无法执行缺席

  26. 26

    无法执行Cardview

  27. 27

    无法执行表格

  28. 28

    SoapExtension无法执行

  29. 29

    无法执行查询

热门标签

归档