質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

1回答

1139閲覧

android sqliteで謎の値が入出力されてしまう

tomoti

総合スコア11

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2019/05/17 07:57

前提・実現したいこと

現在android_studioで英単語帳アプリを作成しています。
英単語とその日本語訳をedit_textに入力したものをsqliteを使って保存し取り出したいです。

発生している問題・エラーメッセージ

edit_textから文字を取得してContent_valueに入れたものをdatabaseに追加していますが、
そのデータを取り出すときには値が変わっていてこのようなオブジェクト自体の情報? (例) android.support.v7.widget.AppCompatEditText{5c04aac VFED..CL. .F...... 0,496-
1032,992 #7f07004d app:id/japaneseword} のようなものになっています。

該当のソースコード

java

1package com.example.englishwordnote; 2 3import android.content.Intent; 4import android.database.sqlite.SQLiteDatabase; 5import android.database.sqlite.SQLiteOpenHelper; 6import android.support.v7.app.AppCompatActivity; 7import android.os.Bundle; 8import android.text.SpannableStringBuilder; 9import android.util.Log; 10import android.view.View; 11import android.widget.EditText; 12import android.widget.TextView; 13 14public class input_new_word extends AppCompatActivity { 15 SQLiteDatabase db; 16 sqlite_db sqlitehelper; 17 @Override 18 protected void onCreate(Bundle savedInstanceState) { 19 super.onCreate(savedInstanceState); 20 setContentView(R.layout.activity_input_new_word); 21 sqlitehelper =new sqlite_db((getApplicationContext())); 22 db= sqlitehelper.getWritableDatabase(); 23 24 findViewById(R.id.enterbutton).setOnClickListener(new View.OnClickListener() { 25 @Override 26 public void onClick(View v) { 27 28 EditText englishword=findViewById(R.id.englishword); 29 SpannableStringBuilder sb1 =(SpannableStringBuilder)englishword.getText(); 30 String str1 =sb1.toString(); 31 EditText japanseword=findViewById(R.id.japaneseword); 32 SpannableStringBuilder sb2 =(SpannableStringBuilder)japanseword.getText(); 33 String str2 =japanseword.getText().toString(); 34 35 36 sqlitehelper.saveDate(str1,str2);//データベースへの入力 37 String s =sqlitehelper.showdata(db); //;データベースからの返答 38 39 Log.v("show","取得した値は"+s+"です"); 40 41 } 42 } ); 43 } 44} 45 46package com.example.englishwordnote; 47 48import android.database.Cursor; 49import android.database.sqlite.SQLiteDatabase; 50import android.database.sqlite.SQLiteOpenHelper; 51import android.content.ContentValues; 52import android.content.Context; 53import android.util.Log; 54 55 56public class sqlite_db extends SQLiteOpenHelper { 57 private static final int DATABASE_VERSION =4; 58 59 private static final String DATABASE_NAME="TestDB.db"; 60 private static final String TABLE_NAME="testtable"; 61 62 private static final String SQL_CREATE_ENTRIES="CREATE TABLE "+TABLE_NAME + "("+"english String"+","+"japanese String"+")"; 63 64 sqlite_db(Context context){ 65 super(context,DATABASE_NAME,null,DATABASE_VERSION); 66 } 67 68 69 public void onCreate(SQLiteDatabase db){ 70 db.execSQL(SQL_CREATE_ENTRIES); // table作成 71 72 73 } 74 public void onUpgrade(SQLiteDatabase db,int oldVersion, int newVersion){ 75 onCreate(db); 76 } 77 78 79 public void saveDate(String english,String japanese){ //データの格納 80 SQLiteDatabase db =this.getWritableDatabase(); 81 ContentValues values =new ContentValues(); 82 83 values.put("english",english); 84 values.put("japanese",japanese); 85 86 Log.d("database", english+"と"+japanese+"を入力しました"); 87 88 db.insert(TABLE_NAME,null,values); 89 } 90 public String showdata(SQLiteDatabase db){//データベースからquery結果をcursorで受け取る 91 92 String[] columns={"english","japanese"}; 93 94 Cursor cursor =db.query(TABLE_NAME,columns,null,null,null,null, 95 null,null); 96 StringBuilder stringBuilder =new StringBuilder(); 97 cursor.moveToFirst(); //先頭の行に移動 98 for(int i=cursor.getCount()-1;i<cursor.getCount();i++){//一番最後に入力した単語を取得 99 stringBuilder.append(cursor.getString(1)); 100 cursor.moveToNext(); 101 } 102 cursor.close(); 103 String s =new String(stringBuilder); 104 return s; 105 106 } 107 108 109}

試したこと

デバッグでデータベースにinsertするときのvalueを確認しましたが、そのときは正常な値で取り出すときには意図しない値になっていました。

補足情報(FW/ツールのバージョンなど)

androidstudio version 3.4
compile sdk version api28

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2019/05/17 08:54

まず確認ですが, データベースには何件入っていますでしょうか? showData 内の for ループは, 「一番最後に入力した単語を取得」とコメントされていますが, コメントと異なり, データベースに何件入っていても最初の 1 件しか読み込みません.
tomoti

2019/05/17 12:21

ご回答ありがとうございます。 問題は解決することができました。 ご指摘の通りforループ条件を間違えていたようで過去に入れた間違った情報を取得していたようです。 現在、ほかのコードは正常に動作していたようで、forループのみを修正して最新のデータを取得したとこ 正しく動作しました。 本当に助かりました。
guest

回答1

0

ベストアンサー

自分の環境では、リード、ライトは正常でした。
以下は意図しない結果になるとおもいます。

for(int i=cursor.getCount()-1;i<cursor.getCount();i++){//一番最後に入力した単語を取得 stringBuilder.append(cursor.getString(1)); cursor.moveToNext(); }

DBの確認は、以下が便利ですよ
https://www.rozkey59.tokyo/entry/2018/06/18/231420

投稿2019/05/17 10:52

kamikaze.cappa

総合スコア558

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tomoti

2019/05/17 12:32

ご回答ありがとうございます。 問題を解決することができました。 stethoについては知らなかったので試してみたいと思います。 情報ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問