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);