###前提・実現したいこと
AndroidStudioで、EditTextに入力された文字をSQLiteに保存し、それを表示するということをしたいのですが、数値が正しく表示されてくれません。
一つ目の入力欄に10桁、二つ目に20桁を入力します。(以下の画像参照)
SENDボタン押下でこれをSQLiteに保存し、SQLiteの中身を表示する画面に遷移するのですが、20桁の数字が変換されて表示されてしまいます。(以下の画像参照)
###該当のソースコード
MainActivity
java
1public class MainActivity extends AppCompatActivity { 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.activity_main); 7 8 final EditText editText1 = (EditText)findViewById(R.id.editText1); 9 final EditText editText2 = (EditText)findViewById(R.id.editText2); 10 11 Button btn = (Button)findViewById(R.id.button); 12 btn.setOnClickListener(new View.OnClickListener() { 13 @Override 14 public void onClick(View v) { 15 MyOpenHelper helper = new MyOpenHelper(MainActivity.this); 16 SQLiteDatabase db = helper.getWritableDatabase(); 17 18 ContentValues values = new ContentValues(); 19 values.put("String_1", editText1.getText().toString()); 20 values.put("String_2", editText2.getText().toString()); 21 22 try { 23 db.insert("Test", null, values); 24 } finally { 25 db.close(); 26 } 27 28 Intent intent = new Intent(MainActivity.this, ResultActivity.class); 29 startActivity(intent); 30 finish(); 31 } 32 }); 33 34 Button btn1 = (Button)findViewById(R.id.button1); 35 btn1.setOnClickListener(new View.OnClickListener() { 36 @Override 37 public void onClick(View v) { 38 MyOpenHelper helper = new MyOpenHelper(MainActivity.this); 39 SQLiteDatabase db = helper.getWritableDatabase(); 40 helper.ResetButton(db); 41 } 42 }); 43 } 44} 45
ResultActivity(SQLiteの中身を表示する画面のアクティビティ)
java
1public class ResultActivity extends AppCompatActivity { 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.activity_result); 7 8 LinearLayout linearLayout = (LinearLayout)findViewById(R.id.Linear); 9 10 String[] string_1 = new String[10]; 11 String[] string_2 = new String[10]; 12 13 MyOpenHelper helper = new MyOpenHelper(this); 14 SQLiteDatabase db = helper.getReadableDatabase(); 15 16 Cursor c = db.query("Test", 17 new String[]{"String_1", "String_2"}, 18 null, null, null, null, null); 19 20 boolean mov = c.moveToFirst(); 21 int i = 0; 22 while (mov) { 23 string_1[i] = c.getString(0); 24 string_2[i] = c.getString(1); 25 mov = c.moveToNext(); 26 i++; 27 } 28 c.close(); 29 db.close(); 30 31 TextView[] textViews = new TextView[i]; 32 String string_3; 33 for(int j = 0; j < i; j++) { 34 if (j >= 10) { 35 break; 36 } 37 string_3 = string_1[j] + " : " + string_2[j]; 38 textViews[j] = new TextView(this); 39 textViews[j].setText(string_3); 40 linearLayout.addView(textViews[j]); 41 } 42 } 43}
MyOpenHelper
java
1public class MyOpenHelper extends SQLiteOpenHelper { 2 public MyOpenHelper(Context context) { 3 super(context, "TestDB", null, 1); 4 } 5 6 @Override 7 public void onCreate(SQLiteDatabase db) { 8 9 db.execSQL("create table Test(" + "_id integer primary key autoincrement not null, " 10 + " String_1 String not null," + "String_2 String not null" + ");"); 11 } 12 13 @Override 14 public void onUpgrade(SQLiteDatabase db, int i, int i1) { 15 16 } 17 18 public void ResetButton (SQLiteDatabase db) { 19 db.execSQL("delete from Test"); 20 } 21}
###試したこと
Logで確認したところ、SQLiteに保存する前のEditTextに入力された値は正しく表示されましたが、SQLiteから取得した値は変換されて表示されました。
この原因は文字列の取得の仕方やSQLiteへの保存の仕方でしょうか?
わかる方がいらっしゃいましたら回答をお願いいたします。
###追記
数値として認識されているとのことなので、苦肉の策として記号をくっつけることで文字列として認識させる手段を取りました。
一応表面上は解決していますが、もっといい方法はないでしょうか。
格納部分
java
1String str = editText2.getText().toString() + "-"; //ハイフンをくっつけて文字列として認識させる 2ContentValues values = new ContentValues(); 3values.put("String_1", editText1.getText().toString()); 4values.put("String_2", str); 5
取り出し部分
java
1string_1[i] = c.getString(0); 2string_2[i] = c.getString(1); 3string_2[i] = string_2[i].substring(0, 20); //20字目までで切り取る
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/26 08:08