我正在尝试创建一个登录页面,该页面检查 SQLite 数据库中的用户详细信息,如果它们存在,它们将被推进到应用程序的主页。我不断收到 java.lang.NullPointerException 并且不知道我做错了什么。请您就代码中的问题提供建议吗?
登录.java:
package com.B00512756.angertwo;
public class Login extends Activity implements OnClickListener{
public static final String DATABASE_NAME = "login_database.db";
public static final String USER_INFO_TABLE = "user_information";
public static final String COLUMN_ID = "UserID";
public static final String COLUMN_RATING = "UserName";
public static final String COLUMN_NAME = "Password";
public SQLiteDatabase regDB;
public EditText txtUserName;
public EditText txtPassword;
public static Button btnLogin;
public static Button btnCancel;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.loginpage);
txtUserName=(EditText)this.findViewById(R.id.txtUname);
txtPassword=(EditText)this.findViewById(R.id.txtPwd);
//btnLogin=(Button)this.findViewById(R.id.btnLogin);
Button Login = (Button) findViewById(R.id.btnLogin);
Button Register = (Button) findViewById(R.id.btnregister);
Button Cancel = (Button) findViewById(R.id.btnCancel);
Register.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Intent myIntent = new Intent(view.getContext(), Registration.class);
startActivityForResult(myIntent, 0);
finish();
}
});
Cancel.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
android.os.Process.killProcess(android.os.Process.myPid());
}
});
Login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//String[] columns = new String[]{COLUMN_ID, COLUMN_RATING, COLUMN_NAME };
Cursor c = regDB.query(USER_INFO_TABLE, new String[] {
COLUMN_ID, COLUMN_RATING, COLUMN_NAME}, null, null, null, null, null);
String result = "";
int iRow = c.getColumnIndex(COLUMN_ID);
int iRating = c.getColumnIndex(COLUMN_RATING);
int iName = c.getColumnIndex(COLUMN_NAME);
c.moveToLast();
for (int i = c.getCount() - 1; i >= 0; i--) {
// Get the data
result = result + c.getString(iRow) + " " + c.getString(iRating) + " " + c.getString(iName) + "\n" ;
if("select * from USER_INFO_TABLE where UserName =" + "\""+ txtUserName + "\""+" and Password="+ "\""+ txtPassword != null);
{ Intent j = new Intent();
j.setClassName("com.B00512756.angertwo",
"com.B00512756.angertwo.AngerprototypetwoActivity");
startActivity(j);}
// Move the cursor
c.moveToPrevious();
//return result;
}
c.close();
}
});
}
private SQLiteDatabase getWritableDatabase() {
// TODO Auto-generated method stub
return null;
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
}
}
登录页面.xml:
<?xml version="1.0" encoding="UTF-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:stretchColumns="1">
<TableRow>
<TextView
android:text="User Name: "
android:id="@+id/TextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
<EditText
android:text=""
android:id="@+id/txtUname"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</EditText>
</TableRow>
<TableRow>
<TextView
android:text="Password: "
android:id="@+id/TextView02"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
<EditText
android:text=""
android:id="@+id/txtPwd"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:password="true">
</EditText>
</TableRow>
<TableRow>
<Button
android:text="Login"
android:id="@+id/btnLogin"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Button>
<Button
android:text="Register"
android:id="@+id/btnregister"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Button>
<Button
android:text="Cancel"
android:id="@+id/btnCancel"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Button>
</TableRow>
</TableLayout>
安卓清单:
<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.B00512756.angertwo"
android:versionCode="1"
android:versionName="1.0" xmlns:android="http://schemas.android.com/apk/res/android">
<uses-sdk android:minSdkVersion="8" />
<application android:name=".AppState" android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Login"
android:label="@string/main_title">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".Login" android:label="@string/begin_label"
android:theme="@android:style/Theme"></activity>
<activity android:name=".Question1" android:label="@string/question_one"
android:theme="@android:style/Theme"></activity>
<activity android:name=".Question2" android:label="@string/question_two"
android:theme="@android:style/Theme"></activity>
<activity android:name=".Question3" android:label="@string/question_three"
android:theme="@android:style/Theme"></activity>
<activity android:name=".Question4" android:label="@string/question_four"
android:theme="@android:style/Theme"></activity>
<activity android:name=".Question5" android:label="@string/question_five"
android:theme="@android:style/Theme"></activity>
<!-- <activity android:name=".AngerprototypetwoActivity" android:label="@string/main_title"
android:theme="@android:style/Theme"></activity> -->
<activity android:name=".nextQ1" android:id="@+id/next_Q1_button"
android:theme="@android:style/Theme"></activity>
<activity android:name=".Strategies" android:label="@string/strategies_label"
android:theme="@android:style/Theme"></activity>
<activity android:name=".Contact" android:label="@string/begin_label"
android:theme="@android:style/Theme"></activity>
<activity android:name=".Strat_What_Is_Anger" android:label="@string/strategies_label_what_is_anger"
android:theme="@android:style/Theme"></activity>
<activity android:name=".Strat_Use_Distraction" android:label="@string/strategies_label_distraction"
android:theme="@android:style/Theme"></activity>
<activity android:name=".Registration" android:label="@string/registration"
android:theme="@android:style/Theme"></activity>
</application>
</manifest>
日志猫:
05-19 17:08:17.111: ERROR/AndroidRuntime(27481): FATAL EXCEPTION: main
05-19 17:08:17.111: ERROR/AndroidRuntime(27481): java.lang.NullPointerException
05-19 17:08:17.111: ERROR/AndroidRuntime(27481): at com.B00512756.angertwo.Login$3.onClick(Login.java:76)
05-19 17:08:17.111: ERROR/AndroidRuntime(27481): at android.view.View.performClick(View.java:2408)
05-19 17:08:17.111: ERROR/AndroidRuntime(27481): at android.view.View$PerformClick.run(View.java:8816)
05-19 17:08:17.111: ERROR/AndroidRuntime(27481): at android.os.Handler.handleCallback(Handler.java:587)
05-19 17:08:17.111: ERROR/AndroidRuntime(27481): at android.os.Handler.dispatchMessage(Handler.java:92)
05-19 17:08:17.111: ERROR/AndroidRuntime(27481): at android.os.Looper.loop(Looper.java:123)
05-19 17:08:17.111: ERROR/AndroidRuntime(27481): at android.app.ActivityThread.main(ActivityThread.java:4627)
05-19 17:08:17.111: ERROR/AndroidRuntime(27481): at java.lang.reflect.Method.invokeNative(Native Method)
05-19 17:08:17.111: ERROR/AndroidRuntime(27481): at java.lang.reflect.Method.invoke(Method.java:521)
05-19 17:08:17.111: ERROR/AndroidRuntime(27481): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-19 17:08:17.111: ERROR/AndroidRuntime(27481): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-19 17:08:17.111: ERROR/AndroidRuntime(27481): at dalvik.system.NativeStart.main(Native Method)
05-19 17:08:17.121: WARN/ActivityManager(58): Force finishing activity com.B00512756.angertwo/.Login
05-19 17:08:17.641: WARN/ActivityManager(58): Activity pause timeout for HistoryRecord{4505c768 com.B00512756.angertwo/.Login}
05-19 17:08:19.731: INFO/Process(27481): Sending signal. PID: 27481 SIG: 9
05-19 17:08:19.751: INFO/WindowManager(58): WIN DEATH: Window{4507d5b0 com.B00512756.angertwo/com.B00512756.angertwo.Login paused=false}
05-19 17:08:19.751: INFO/ActivityManager(58): Process com.B00512756.angertwo (pid 27481) has died.
05-19 17:08:19.921: WARN/InputManagerService(58): Got RemoteException sending setActive(false) notification to pid 27481 uid 10045
05-19 17:08:20.341: DEBUG/dalvikvm(117): GC_EXTERNAL_ALLOC freed 484 objects / 27832 bytes in 383ms
05-19 17:08:24.590: DEBUG/dalvikvm(197): GC_EXPLICIT freed 100 objects / 4336 bytes in 127ms
05-19 17:08:28.610: WARN/ActivityManager(58): Activity destroy timeout for HistoryRecord{4505c768 com.B00512756.angertwo/.Login}
05-19 17:08:29.650: DEBUG/dalvikvm(264): GC_EXPLICIT freed 58 objects / 2800 bytes in 140ms
05-19 17:08:33.513: DEBUG/SntpClient(58): request time failed: java.net.SocketException: Address family not supported by protocol
附加信息:
Login.setOnClickListener(new View.OnClickListener() {
@SuppressWarnings("null")
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String name = txtUserName.getText().toString();
String pwd = txtPassword.getText().toString();
SQLiteDatabase regDB = null;
//String[] columns = new String[]{COLUMN_ID, COLUMN_RATING, COLUMN_NAME };
Cursor c = regDB.query(USER_INFO_TABLE, new String[] {
COLUMN_ID, COLUMN_RATING, COLUMN_NAME}, null, null, null, null, null);
if(null!=c){
c.moveToFirst();
System.out.println("Cursor Size"+c.getCount());
}
String result = "";
int iRow = c.getColumnIndex(COLUMN_ID);
int iRating = c.getColumnIndex(COLUMN_RATING);
int iName = c.getColumnIndex(COLUMN_NAME);
c.moveToLast();
for (int i = c.getCount() - 1; i >= 0; i--) {
// Get the data
result = result + c.getString(iRow) + " " + c.getString(iRating) + " " + c.getString(iName) + "\n" ;
if("select * from USER_INFO_TABLE where UserName =" + "\""+ name + "\""+" and Password="+ "\""+ pwd != null );
{ Intent j = new Intent();
j.setClassName("com.B00512756.angertwo",
"com.B00512756.angertwo.AngerprototypetwoActivity");
startActivity(j);}
// Move the cursor
c.moveToPrevious();
//return result;
}
c.close();
}
});
在这一行抛出空错误:
Cursor c = regDB.query(USER_INFO_TABLE, new String[] {
COLUMN_ID, COLUMN_RATING, COLUMN_NAME}, null, null, null, null, null);
非常感谢您的帮助:)