Java 在助手类中使用ApplicationContext

Java 在助手类中使用ApplicationContext,java,android,login,nullpointerexception,android-context,Java,Android,Login,Nullpointerexception,Android Context,我想做的事 我试图创建一个登录名,该登录名在帮助类中完全处理,以保持代码简单 为此,我创建了一个具有所需功能的helperclass,现在的问题是我总是得到一个null指针异常,可能是因为getApplicationContext 问题 那么我需要在我的代码中修改什么才能让它工作呢。代码如下所示。如果你有一个伟大的教程或东西,请提供给我这个。我真的很喜欢自己做这件事 代码 LoginActivity.class package de.ivocore; public class Logi

我想做的事


我试图创建一个登录名,该登录名在
帮助类
中完全处理,以保持代码简单

为此,我创建了一个具有所需功能的
helperclass
,现在的问题是我总是得到一个
null指针异常
,可能是因为
getApplicationContext

问题


那么我需要在我的代码中修改什么才能让它工作呢。代码如下所示。如果你有一个伟大的教程或东西,请提供给我这个。我真的很喜欢自己做这件事

代码


LoginActivity.class

package de.ivocore;


public class LoginActivity extends Activity {

    private DBAdapter mDbHelper;

    private LoginHelper login = new LoginHelper();



    **/
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);

        mDbHelper = new DBAdapter(this);
        mDbHelper.open();
        mDbHelper.close();

        // Text-Felder
        final EditText user = (EditText) findViewById(R.id.edt_username);
        final EditText pwd = (EditText) findViewById(R.id.edt_password);

        // Button
        Button loginbt = (Button) findViewById(R.id.bt_login);

        // OnClickListner für den Button definieren
        loginbt.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {

                // Eingegebener Username und Passwort auslesen
                final String usertxt = user.getText().toString();
                final String pwdtxt = pwd.getText().toString();
                Log.d("User", usertxt);
                Log.d("PWD", pwdtxt);

                checkLoginData(usertxt, pwdtxt);
            }
        });

    }   

public void checkLoginData(final String username, final String password){

    boolean user, pass;

    if (username.length() < 6){
        user = false;
    }else {
        user = true;
    }

    if (password.length() < 6){
        pass = false;
    }else {
        pass = true;
    }

    int val = 0;
    if (user) val |= 0x1;
    if (pass) val |= 0x2;

    switch (val){
    case 0:
        login.loginFalse(getApplicationContext(),"Username und Passwort müssen mindestens 6 Zeichen haben");

    break;

    case 1:
        login.loginFalse(getApplicationContext(),"Passwort muss mindestens 6 Zeichen haben");
    break;

    case 2:
        login.loginFalse(getApplicationContext(),"Username muss mindestens 6 Zeichen haben");
    break;

    case 3:
        login.doLogin(getApplicationContext(),username, password);
    }

}
}

日志:

   03-14 08:12:53.464: E/AndroidRuntime(9462): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
03-14 08:12:53.464: E/AndroidRuntime(9462):     at android.view.ViewRootImpl.setView(ViewRootImpl.java:519)
03-14 08:12:53.464: E/AndroidRuntime(9462):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:279)
03-14 08:12:53.464: E/AndroidRuntime(9462):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:193)
03-14 08:12:53.464: E/AndroidRuntime(9462):     at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:118)
03-14 08:12:53.464: E/AndroidRuntime(9462):     at android.app.Dialog.show(Dialog.java:274)
03-14 08:12:53.464: E/AndroidRuntime(9462):     at android.app.AlertDialog$Builder.show(AlertDialog.java:932)
03-14 08:12:53.464: E/AndroidRuntime(9462):     at de.ivocore.firstboot.LoginHelper.loginFalse(LoginHelper.java:80)
03-14 08:12:53.464: E/AndroidRuntime(9462):     at de.ivocore.LoginActivity.checkLoginData(LoginActivity.java:120)
03-14 08:12:53.464: E/AndroidRuntime(9462):     at de.ivocore.LoginActivity$1.onClick(LoginActivity.java:92)
03-14 08:12:53.464: E/AndroidRuntime(9462):     at android.view.View.performClick(View.java:3480)
03-14 08:12:53.464: E/AndroidRuntime(9462):     at android.view.View$PerformClick.run(View.java:13983)
03-14 08:12:53.464: E/AndroidRuntime(9462):     at android.os.Handler.handleCallback(Handler.java:605)
03-14 08:12:53.464: E/AndroidRuntime(9462):     at android.os.Handler.dispatchMessage(Handler.java:92)
03-14 08:12:53.464: E/AndroidRuntime(9462):     at android.os.Looper.loop(Looper.java:137)
03-14 08:12:53.464: E/AndroidRuntime(9462):     at android.app.ActivityThread.main(ActivityThread.java:4340)
03-14 08:12:53.464: E/AndroidRuntime(9462):     at java.lang.reflect.Method.invokeNative(Native Method)
03-14 08:12:53.464: E/AndroidRuntime(9462):     at java.lang.reflect.Method.invoke(Method.java:511)
03-14 08:12:53.464: E/AndroidRuntime(9462):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-14 08:12:53.464: E/AndroidRuntime(9462):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-14 08:12:53.464: E/AndroidRuntime(9462):     at dalvik.system.NativeStart.main(Native Method)

如果您需要更多代码或更详细的信息,请在下面的注释中填写。

尝试初始化LoginHelper。在当前代码中,它将为空

getApplicationContext(); 
对于对话框或任何其他改变用户界面的功能,您必须从活动中传递此信息

getApplicationContext()只应在不涉及UI的情况下使用(加载资源、pref等)。

试试这个

View view = LayoutInflater.from(getParent()).inflate(
            R.layout.login, null);
    setContentView(view);

我解决了我自己的问题

你能发布你的NPE日志吗?如果您只使用
这个
作为上下文会怎么样?您在哪里定义loginHelper?看起来什么地方都没有…我做了私人登录登录;是的,您进行了私人登录登录登录;但是login=newloginhelper()在哪里;还是什么?您的登录名为null。@safari如果您确实使用某些内容初始化了登录名变量,请在LoginActivity类的第120行添加一个尾随注释,因为这是发生异常的地方:de.ivocore.LoginActivity.checkLoginData(LoginActivity.java:120)好的,这样做了,现在我得到一个新异常'03-14 08:12:53.464:E/AndroidRuntime(9462):android.view.WindowManager$BadTokenException:无法添加窗口--标记null不适用于应用程序。好了,除了获取上下文,我还能做什么?并将其交给我的helperclass?而不是调用login.loginFalse(getApplicationContext(),…)只需调用login.loginFalse(此,…)活动实现Contexttell me,第一个。而不是调用login.loginFalse(getApplicationContext(),…)只需调用login.loginFalse(此,…)Activity实现Contextand,并对显示对话框的所有方法执行此操作,或对助手中的任何UI执行此操作
View view = LayoutInflater.from(getParent()).inflate(
            R.layout.login, null);
    setContentView(view);