有人可以帮我这个Android代码吗?

时间:2019-08-27 17:59:00

标签: java android

我正在尝试将名称和密码添加到sqlite数据库android,但出现一些错误

我是编程新手,我想向数据库添加名称和密码         使用sqlite         //主要活动

    package com.example.databasetutorial;

    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;

    import com.example.databasetutorial.Database.DBHandler;

    public class MainActivity extends AppCompatActivity {

        EditText name,password;
        DBHandler dbHandler;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

           name  = findViewById(R.id.name);
           password = findViewById(R.id.password);

          dbHandler   = new DBHandler(this);

        }


        public void addUser(View view) {



                String uname = name.getText().toString();
                String password = name.getText().toString();

                long result = dbHandler.addInfo(uname,password);

                if(result > 0 ) {
                    Toast.makeText(this, "Success", Toast.LENGTH_LONG);
                }
                else {

                    Toast.makeText(this,"ERROR!",Toast.LENGTH_LONG);


                }


        }
    }


    //DBHABDLER.JAVA

    package com.example.databasetutorial.Database;

    import android.provider.BaseColumns;

    public final class UserMaster {

        private UserMaster(){}

        protected static class Users implements BaseColumns {

            public static final String TABLE_NAME = "users";
            public static final String COLUMN_NAME_USERNAME = "username";
            public static final String COLUMN_NAME_PASSWORD = "username";



        }

    }

    package com.example.databasetutorial.Database;

    import android.content.ContentValues;
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;

    public class DBHandler extends SQLiteOpenHelper {

        public static final String DATABASE_NAME = "userInfo.db";

        public DBHandler(Context context) {
            super(context,DATABASE_NAME,null,2);

        }

        @Override
        public void onCreate(SQLiteDatabase db) {

            String SQL_CREATE_ENTRIES =
                    "CREATE TABLE " + UserMaster.Users.TABLE_NAME + " (" +
                            UserMaster.Users._ID + " INTEGER PRIMARY KEY," +
                            UserMaster.Users.COLUMN_NAME_PASSWORD + " TEXT," +
                            UserMaster.Users.COLUMN_NAME_PASSWORD + " TEXT) ";


            db.execSQL(SQL_CREATE_ENTRIES);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int 
    newVersion) {

        }

        public long addInfo(String userName , String password){

            SQLiteDatabase db = getWritableDatabase();

            ContentValues values = new ContentValues();
            values.put(UserMaster.Users.COLUMN_NAME_USERNAME,userName);
            values.put(UserMaster.Users.COLUMN_NAME_PASSWORD,password);

            long newRowID = 
    db.insert(UserMaster.Users.TABLE_NAME,null,values);

            return  newRowID;

        }
    }


    //XML FILE

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">

        <EditText
            android:id="@+id/name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:layout_marginEnd="8dp"
            android:layout_marginBottom="8dp"
            android:ems="10"
            android:inputType="textPersonName"

            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.164" />

        <EditText
            android:id="@+id/password"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:layout_marginEnd="8dp"
            android:layout_marginBottom="8dp"
            android:ems="10"
            android:inputType="textPersonName"

            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/name"
            app:layout_constraintVertical_bias="0.033" />

        <Button
            android:id="@+id/register"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:layout_marginTop="32dp"
            android:layout_marginEnd="8dp"
            android:text="Regiser"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.498"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/password"
            android:onClick="addUser"/>
    </android.support.constraint.ConstraintLayout>

运行时出现此错误:

I/AssistStructure: Flattened final assist data: 2652 bytes, containing 1 windows, 9 views
E/SQLiteLog: (1) duplicate column name: username
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.databasetutorial, PID: 13586
    java.lang.IllegalStateException: Could not execute method for android:onClick
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:390)
        at android.view.View.performClick(View.java:6597)
        at android.view.View.performClickInternal(View.java:6574)
        at android.view.View.access$3100(View.java:778)
        at android.view.View$PerformClick.run(View.java:25885)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
        at android.view.View.performClick(View.java:6597) 
        at android.view.View.performClickInternal(View.java:6574) 
        at android.view.View.access$3100(View.java:778) 
        at android.view.View$PerformClick.run(View.java:25885) 
        at android.os.Handler.handleCallback(Handler.java:873) 
        at android.os.Handler.dispatchMessage(Handler.java:99) 
        at android.os.Looper.loop(Looper.java:193) 
        at android.app.ActivityThread.main(ActivityThread.java:6669) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 
     Caused by: android.database.sqlite.SQLiteException: duplicate column name: username (code 1 SQLITE_ERROR): , while compiling: CREATE TABLE users (_id INTEGER PRIMARY KEY,username TEXT,username TEXT)
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:903)
        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:514)
        at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
        at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
        at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
        at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1769)
        at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1698)
        at com.example.databasetutorial.Database.DBHandler.onCreate(DBHandler.java:27)
        at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:393)
        at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:298)
        at com.example.databasetutorial.Database.DBHandler.addInfo(DBHandler.java:37)
        at com.example.databasetutorial.MainActivity.addUser(MainActivity.java:43)
        at java.lang.reflect.Method.invoke(Native Method) 
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385) 
        at android.view.View.performClick(View.java:6597) 
        at android.view.View.performClickInternal(View.java:6574) 
        at android.view.View.access$3100(View.java:778) 
        at android.view.View$PerformClick.run(View.java:25885) 
        at android.os.Handler.handleCallback(Handler.java:873) 
        at android.os.Handler.dispatchMessage(Handler.java:99) 
        at android.os.Looper.loop(Looper.java:193) 
        at android.app.ActivityThread.main(ActivityThread.java:6669) 
        at java.lang.reflect.Method.invoke(Native Method) 
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 
I/Process: Sending signal. PID:

1 个答案:

答案 0 :(得分:2)

这里:

  

由以下原因引起:android.database.sqlite.SQLiteException:重复的列名称:用户名(代码1 SQLITE_ERROR):,而在编译时:CREATE TABLE用户(_id INTEGER PRIMARY KEY,用户名TEXT,用户名TEXT)

当您仔细查看时:... 键,用户名TEXT,用户名TEXT)

因此,只需删除重复的username TEXT

,即可删除发生UserMaster.Users.COLUMN_NAME_PASSWORD + " TEXT) ";

真实答案:仔细阅读这些异常堆栈跟踪。尤其是以引起的开头。因为最有可能找到问题的原因

相关问题