2017-12-15 1 views
0

私は連絡先アプリを作成する必要があります。それはデータベース接続を持つ私の最初のアプリです。 読んでみるとたくさん試してみると、読み込みと保存に成功しましたが、データが正しく保存されません。データベースに保存されているデータ形式が正しくありません

私のデータベースビュー: android_db_view

あなたが見ることができるように、フィールドは、Androidのテキストビューの説明のように見えるが。

マイMainActivityクラス:

package com.example.joaoliveira.formdb; 

import android.content.DialogInterface; 
import android.support.v7.app.AlertDialog; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 

import java.util.List; 

public class MainActivity extends AppCompatActivity 
{ 
    private DBHelper dbh; 
    EditText etName, etAdress, etFirm; 
    Button btnSave, btnDisplay; 

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

     this.dbh = new DBHelper(this); 
     etName = findViewById(R.id.etName); 
     etAdress = findViewById(R.id.etAdress); 
     etFirm = findViewById(R.id.etFirm); 

     btnSave = findViewById(R.id.btnSave); 
     btnDisplay = findViewById(R.id.btnDisplay); 

     btnSave.setOnClickListener(new View.OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       if(etName.length() > 0 && etAdress.length() > 0 && etFirm.length() > 0){ 
        dbh.insert(etName.toString(), etAdress.toString(), etFirm.toString()); 
        AlertDialog.Builder adb = new AlertDialog.Builder(MainActivity.this); 
        adb.setTitle("Success"); 
        adb.setMessage("Accomplished register!"); 
        adb.show(); 

        etName.setText(""); 
        etAdress.setText(""); 
        etFirm.setText(""); 
       } 

       else{ 
        AlertDialog.Builder adb = new AlertDialog.Builder(MainActivity.this); 
        adb.setTitle("You have failed!"); 
        adb.setMessage("All the fields must be filled"); 
        adb.show(); 

        etName.setText(""); 
        etAdress.setText(""); 
        etFirm.setText(""); 
       } 
      } 
     }); 

     btnDisplay.setOnClickListener(new View.OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       List<Contact> contacts = dbh.queryGetAll(); 
       AlertDialog.Builder adb = new AlertDialog.Builder(MainActivity.this); 

       try { 
        for (int i = 0; i < contacts.size(); i++) { 
         Contact c = contacts.get(i); 

         adb.setTitle("Contact " + (i+1)); 
         adb.setMessage(c.toString()); 
         adb.show(); 

         adb.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface di, int which) { 
           di.dismiss(); 
          } 
         }); 
        } 
       } 
       catch (Exception e){ 
        adb.setTitle("Oops!"); 
        adb.setMessage("There are no saved contacts to display."); 
        adb.show(); 
       } 
      } 
     }); 

     //dbh.deleteAll(); 
    } 
} 

マイDBHelperクラス:

package com.example.joaoliveira.formdb; 

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

import java.util.ArrayList; 
import java.util.List; 

public class DBHelper 
{ 
    private static final String DATABASE_NAME = "android_db"; 
    private static final String TABLE_NAME = "Contact"; 
    private static final int DATABASE_VERSION = 1; 

    private Context context; 
    private SQLiteDatabase db; 

    private SQLiteStatement insertStmt; 
    private static final String INSERT = "insert into " + TABLE_NAME + "(name, adress, firm) values (?, ?, ?)"; 

    public DBHelper (Context context) 
    { 
     this.context = context; 
     OpenHelper openHelper = new OpenHelper(this.context); 
     this.db = openHelper.getWritableDatabase(); 
     this.insertStmt = this.db.compileStatement(INSERT); 
    } 

    public long insert(String name, String adress, String firm) 
    { 
     this.insertStmt.bindString(1, name); 
     this.insertStmt.bindString(2, adress); 
     this.insertStmt.bindString(3, firm); 

     return this.insertStmt.executeInsert(); 
    } 

    public void deleteAll() 
    { 
     this.db.delete(TABLE_NAME, null, null); 
    } 

    public List<Contact> queryGetAll() 
    { 
     List<Contact> list = new ArrayList<>(); 

     try { 
      Cursor cursor = this.db.query(TABLE_NAME, new String[]{"name", "adress", "firm"}, null, null, null, null, null, null); 
      int nRecords = cursor.getCount(); //getCursor 

      if(nRecords != 0) { 
       cursor.moveToFirst(); 
       do { 
        Contact contact = new Contact(cursor.getString(0), cursor.getString(1), cursor.getString(2)); 
        list.add(contact); 
       } while (cursor.moveToNext()); 

       if(cursor != null && !cursor.isClosed()){ 
        cursor.close(); 
        return list; 
       } 
      } 

      else 
       return null; 
     } 

     catch(Exception e) { 
      return null; 
     } 

     return list; 
    } 

    private static class OpenHelper extends SQLiteOpenHelper 
    { 
     OpenHelper(Context context) 
     { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     } 

     public void onCreate(SQLiteDatabase db) 
     { 
      String sql = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, adress TEXT, firm TEXT);"; 
      db.execSQL(sql); 
     } 

     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
     { 
      db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); 
      onCreate(db); 
     } 
    } 
} 

Contactクラスあなたは私があなたの注意を感謝し、すべての私のコード

package com.example.joaoliveira.formdb; 

public class Contact 
{ 
    private String name; 
    private String adress; 
    private String firm; 

    public Contact(String name, String adress, String firm) 
    { 
     this.name = name; 
     this.adress = adress; 
     this.firm = firm; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public void setAdress(String adress) { 
     this.adress = adress; 
    } 

    public void setFirm(String firm) { 
     this.firm = firm; 
    } 

    public String getName() { 

     return name; 
    } 

    public String getAdress() { 
     return adress; 
    } 

    public String getFirm() { 
     return firm; 
    } 

    @Override 
    public String toString() { 
     return "Name: " + name + 
       "Adress: " + adress + 
       "Firm: " + firm; 
    } 

} 

を参照してくださいよ確実にします!

答えて

0

Views(EditTexts)の内容/値ではなく、toStringメソッドごとにViewsオブジェクトを格納しています。 EditTextのgetText()メソッドを使用して値を取得し、それをStringに変換する必要があります。だから、

代わりのdbh.insert(etName.toString(), etAdress.toString(), etFirm.toString());

あなたが使用する必要があります -

dbh.insert(etName.getText().toString(), 
    etAdress.getText().toString(), 
    etFirm.getText().toString() 
); 
関連する問題