-1

我正在尝试创建一个登录页面,该页面检查 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);

非常感谢您的帮助:)

4

1 回答 1

0

它在这里:

 05-19 17:08:17.111: ERROR/AndroidRuntime(27481):     at  com.B00512756.angertwo.Login$3.onClick(Login.java:76)

找到 Login.java 的源代码,转到第 76 行,查看哪些对象实例被取消引用。其中之一是空的。

于 2012-05-19T17:31:34.100 回答