簡體   English   中英

單擊已編碼為保存,刷新和搜索的按鈕時,應用程序停止工作

[英]App stops working when clicked on Button coded to save, refresh and search

我需要3個無法正常使用的按鈕來解決問題,我不確定如何解決。 “保存”按鈕用於保存我的數據庫,“刷新”按鈕用於清除,“搜索”按鈕用於查找現有數據庫。 注冊后,我的TextView顯示現有數據庫。 這些是我要實現的目標。

這是我的代碼文件:

XML文件:activity_main:

        <?xml version="1.0" encoding="utf-8"?>
        <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            xmlns:tools="http://schemas.android.com/tools"
            android:paddingLeft="@dimen/activity_horizontal_margin"
            android:paddingRight="@dimen/activity_horizontal_margin"
            android:paddingTop="@dimen/activity_verticsl_margin"
            android:paddingBottom="@dimen/activity_verticsl_margin"
            tools:context=".MainActivity">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="30dip"
                android:gravity="center"
                android:text="Registration"/>

            <LinearLayout
                android:orientation="vertical"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:weightSum="1">

                <EditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:id="@+id/txtid"
                    android:hint="ID"
                    android:inputType="number"
                    android:layout_marginTop="5dip"
                    />
                <EditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:id="@+id/txtfirstname"
                    android:hint="@string/first_name"
                    android:layout_marginTop="5dip"
                    />
                <EditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:id="@+id/txtlastname"
                    android:hint="@string/last_name"
                    android:layout_marginTop="5dip"
                    />            
                <EditText
                    android:id="@+id/txtmail"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="5dip"
                    android:hint="@string/e_mail" />
                <EditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:id="@+id/txtuser"
                    android:hint="@string/username"
                    android:layout_marginTop="5dip"/>
                <EditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:id="@+id/txtpw"
                    android:hint="@string/password"
                    android:layout_marginTop="5dip"/>

                <LinearLayout
                    android:orientation="horizontal"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">
                    <Button
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:text="save"
                        android:textColor="#fff"
                        android:textSize="15dip"
                        android:id="@+id/btnsave"
                        android:layout_weight="1"
                        android:layout_gravity="center_horizontal"/>

                    <Button
                        android:id="@+id/btnclear"
                        android:layout_width="212dp"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_horizontal"
                        android:layout_weight=".30"
                        android:text="refresh"
                        android:textColor="#fff"
                        android:textSize="15dip"/>

                    <Button
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:text="search"
                        android:textColor="#fff"
                        android:textSize="15dip"
                        android:id="@+id/btnsearch"
                        android:layout_weight="1"
                        android:layout_gravity="center_horizontal"/>                        
                </LinearLayout>

            </LinearLayout>            

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="New Text"
                android:id="@+id/textView"/>

        </TableLayout>

Java文件StudentRegistration.java

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

        public class StudentRegistration {

            public static final String KEY_ROWID ="_id";
            public static final String KEY_FNAME = "fname";
            public static final String KEY_LNAME = "lname";
            public static final String KEY_EMAIL = "email";
            public static final String KEY_USER ="user";
            public static final String KEY_PASS ="pass";

            private static final String DATABASE_NAME = "StudentDB";
            private static final String DATABASE_TABLE = "StudentTbl";
            private static final int DATABASE_VERSION = 1;

            private DBHelper ourHelper;
            private final Context ourContext;
            private SQLiteDatabase ourDatabase;

            private static class DBHelper extends SQLiteOpenHelper {

                public DBHelper(Context context) {
                    super(context, DATABASE_NAME,
                            null, DATABASE_VERSION);
                }
                @Override
                public void onCreate(SQLiteDatabase db) {
                    db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
                            KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
                            KEY_FNAME + " TEXT NOT NULL, " +
                            KEY_LNAME + " TEXT NOT NULL, " +
                            KEY_EMAIL + " TEXT NOT NULL, " +
                            KEY_USER + " TEXT NOT NULL, " +
                            KEY_PASS + " TEXT NOT NULL);");
                }

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

                    db.execSQL("DROP TABLE IF EXISTS " + DATABASE_NAME);
                    onCreate(db);

                }
            }
            public StudentRegistration(Context c) {
                ourContext = c;
            }
            public StudentRegistration open() {
                ourHelper = new DBHelper(ourContext);
                ourDatabase = ourHelper.getWritableDatabase();
                return this;
            }
            public void close() {
                ourHelper.close();
            }
            public long savedata(String fname, String lname, String email, String user, String pass) {
                ContentValues cv = new ContentValues();
                cv.put(KEY_FNAME, fname);
                cv.put(KEY_LNAME, lname);
                cv.put(KEY_EMAIL, email);
                cv.put(KEY_USER, user);
                cv.put(KEY_PASS, pass);
                return ourDatabase.insert(DATABASE_TABLE, null, cv);            
            }

            public String getData(){
                String[] refresh = new String[] {KEY_ROWID, KEY_FNAME, KEY_LNAME, KEY_EMAIL, KEY_USER, KEY_PASS};
                Cursor c = ourDatabase.query(DATABASE_TABLE, refresh, null, null, null, null, null);
                String result = "";

                int iRow = c.getColumnIndex(KEY_ROWID);
                int iFName = c.getColumnIndex(KEY_FNAME);
                int iLName = c.getColumnIndex(KEY_LNAME);
                int iEmail = c.getColumnIndex(KEY_EMAIL);
                int iUser = c.getColumnIndex(KEY_USER);
                int iPass = c.getColumnIndex(KEY_PASS);

                for(c.moveToFirst(); !c.isAfterLast();c.moveToNext()){
                    result = result + c.getString(iRow)
                            + " " + c.getString(iFName)
                            + " " + c.getString(iLName)
                            + " " + c.getString(iEmail)
                            + " " + c.getString(iUser)
                            + " " + c.getString(iPass)
                            + "\n\n";            
                }

                return result;            
            }

            public String getFName(long l){
                String[] getfname = new String[] {KEY_ROWID, KEY_FNAME, KEY_LNAME,
                        KEY_EMAIL, KEY_USER, KEY_PASS};
                Cursor c = ourDatabase.query(DATABASE_TABLE, getfname, KEY_ROWID + "="
                        + 1, null, null, null, null);

                if(c != null){
                    c.moveToFirst();
                    String fname = c.getString(1);
                    return fname;
                }

                return null;
            }
            public String getLName(long l){

                String[] getlname = new String[] {KEY_ROWID, KEY_FNAME, KEY_LNAME,
                        KEY_EMAIL, KEY_USER, KEY_PASS};
                Cursor c = ourDatabase.query(DATABASE_TABLE, getlname, KEY_ROWID + "="
                        + 1, null, null, null, null);

                if(c != null){
                    c.moveToFirst();
                    String lname = c.getString(2);
                    return lname;
                }
                return null;
            }
            public String getEmail(long l){
                String[] getemail = new String[] {KEY_ROWID, KEY_FNAME, KEY_LNAME,
                        KEY_EMAIL, KEY_USER, KEY_PASS};
                Cursor c = ourDatabase.query(DATABASE_TABLE, getemail, KEY_ROWID + "="
                        + 1, null, null, null, null);

                if(c != null){
                    c.moveToFirst();
                    String email = c.getString(3);
                    return email;
                }
                return null;
            }
            public String getUser(long l){
                String[] getuser = new String[] {KEY_ROWID, KEY_FNAME, KEY_LNAME,
                        KEY_EMAIL, KEY_USER, KEY_PASS};
                Cursor c = ourDatabase.query(DATABASE_TABLE, getuser, KEY_ROWID + "="
                        + 1, null, null, null, null);

                if(c != null){
                    c.moveToFirst();
                    String user = c.getString(4);
                    return user;
                }
                return null;
            }
            public String getPass(long l){
                String[] getpass = new String[] {KEY_ROWID, KEY_FNAME, KEY_LNAME,
                        KEY_EMAIL, KEY_USER, KEY_PASS};
                Cursor c = ourDatabase.query(DATABASE_TABLE, getpass, KEY_ROWID + "="
                        + 1, null, null, null, null);

                if(c != null){
                    c.moveToFirst();
                    String pass = c.getString(5);
                    return pass;
                }
                return null;
            }

        }

和Java文件MainActivity:

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

        public class MainActivity extends AppCompatActivity {

            EditText FirstName, LastName, Email, UserName, Password, ID;
            Button Save, Clear, Search;
            TextView TxtData;

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

                FirstName = (EditText)findViewById(R.id.txtfirstname);
                LastName = (EditText)findViewById(R.id.txtlastname);
                Email = (EditText)findViewById(R.id.txtmail);
                UserName = (EditText)findViewById(R.id.txtuser);
                Password = (EditText)findViewById(R.id.txtpw);
                TxtData =(TextView)findViewById(R.id.textView);

                Save =(Button)findViewById(R.id.btnsave);
                Clear=(Button)findViewById(R.id.btnclear);
                Search=(Button)findViewById(R.id.btnsearch);

                Search.setOnClickListener(new View.OnClickListener(){
                    @Override
                    public void onClick(View v) {
                        String search = ID.getText().toString();
                        Long l= Long.parseLong(search);

                        StudentRegistration mysearch = new
                                StudentRegistration(MainActivity.this);
                        mysearch.open();
                        String returnedFname = mysearch.getFName(l);
                        String returnedLname = mysearch.getLName(l);
                        String returnedEmail = mysearch.getEmail(l);
                        String returnedUser = mysearch.getUser(l);
                        String returnedPass = mysearch.getPass(l);
                        mysearch.close();

                        FirstName.setText(returnedFname);
                        LastName.setText(returnedLname);
                        Email.setText(returnedEmail);
                        UserName.setText(returnedUser);
                        Password.setText(returnedPass);            
                    }
                });

                Save.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {            

                            String fname = FirstName.getText().toString();
                            String lname = LastName.getText().toString();
                            String email = Email.getText().toString();
                            String user = UserName.getText().toString();
                            String pass = Password.getText().toString();

                            StudentRegistration save = new StudentRegistration(MainActivity.this);
                            save.open();
                           save.savedata(fname, lname, email, user, pass);

                        FirstName.setText("");
                        LastName.setText("");
                        Email.setText("");
                        UserName.setText("");
                        Password.setText("");
                        ID.setText("");
                        }            
                });

                Clear.setOnClickListener(new View.OnClickListener(){
                    @Override
                    public void onClick(View v){
                        StudentRegistration refresh = new StudentRegistration(MainActivity.this);
                        refresh.open();

                        String data = refresh.getData();
                        refresh.close();
                        TxtData.setText(data);

                        FirstName.setText("");
                        LastName.setText("");
                        Email.setText("");
                        UserName.setText("");
                        Password.setText("");
                        ID.setText("");

                    }
                });
            }
        }

我的清單文件:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.classifiedinformation">

        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name=".MainActivity">

                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />

                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>

        </application>

我該如何實現目標?

首先,關於發生問題的一些提示會很好。

您需要像使用其他EditText一樣初始化ID。
添加ID = findViewById(R.id.txtid); 到您的onCreate(Bundle savedInstanceState)方法。

單擊“保存”時,我得到的第一件事是:

   java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.EditText.setText(java.lang.CharSequence)' on a null object reference
    at com.citiesapps.myapplication.MainActivity$2.onClick(MainActivity.java:76)
    at android.view.View.performClick(View.java:5610)
    at android.view.View$PerformClick.run(View.java:22265)
    at android.os.Handler.handleCallback(Handler.java:751)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6077)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)

由於堆棧跟蹤狀態,您試圖在這種情況下的“ ID”上對空對象調用方法。

在分析了您的代碼之后,我看到您正在未在Java類中初始化的editText上執行setText

可能的editText代碼是

ID.setText(""); 此處ID未使用xml文件初始化。

使用ID = findViewById(R.id.txtid); 用於初始化ID字段

檢查所有editText初始化。 然后使用該editText。

謝謝 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM