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

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

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

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

Android

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

3回答

2547閲覧

if(ca.moveToFirst){ でfalseが返されます。アドバイスをいただけないでしょうか?

edoooooo

総合スコア476

Java

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

Android

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2017/04/23 23:41

編集2017/04/24 08:07

boolean isEof = ca.moveToFirst();
while(isEof) {
doge = ca.getString(ca.getColumnIndex(Usersdata.Users.DOGE));
Log.v("whileでfalseが返されます。"doge);
}
なぜだかわかりません。アドバイスをいただけないでしょうか?

MainActivityで、if文でデータベースから取得した値がtrueであれば、今日の残りHPを100とリセットし、データベースのtrueをfalseにupdateし、24時になると、AlarmManagerの起動によって移動先のServiceで、trueにアップデートする。
そうすることで、onStart()のなかでありながら、24時になった時の、AlarmManagerによって、Serviceと行き来する時だけ、MainActivityのbuttonのonClickListenerの中の100-(i++)によって小さくなった残り体力:iを100に初期化するということを実現したいです。

//MainActivity

java

1/** 2se=select 、up=update 、in=insert、bd=body(体力)、cobo=countbody 、stcobo=string count body、hp=100-body 、stringbody=string.valueOf(hp) 3**/ 4 5import static com.example.android.sample.physicalstrength.Databaseset.CREATE_TABLE; 6 7import static com.example.android.sample.physicalstrength.Databaseset.CREATE_TABLE1; 8 9 10public class MainActivity extends AppCompatActivity { 11 12 int body = 2; 13 int cobo=0; 14 boolean zzz=false; 15 16 @Override 17 protected void onCreate(Bundle savedInstanceState) { 18 super.onCreate(savedInstanceState); 19 setContentView(R.layout.activity_main); 20 21 22 TextView textView = (TextView) findViewById(R.id.body); 23 String nokko="残りは100です。"; 24 textView.setText(noko); 25 26 SQLiteDatabase db = null; 27 Databaseset databaseset = new Databaseset(MainActivity.this); 28 db = databaseset.getWritableDatabase(); 29 30 31 //コメントアウトしてる 32 // db.execSQL(CREATE_TABLE); 33 // db.execSQL(CREATE_TABLE1); 34 35 findViewById(R.id.hp).setOnClickListener(new View.OnClickListener() { 36 37 38 @Override 39 public void onClick(View v) { 40 41 SQLiteDatabase db = null; 42 Databaseset databaseset = new Databaseset(MainActivity.this); 43 db = databaseset.getWritableDatabase(); 44 45 String table = Usersdata.Users.TABLE_NAME; 46 47 java.util.Calendar calendar = java.util.Calendar.getInstance(); 48 int month = calendar.get(java.util.Calendar.MONTH) + 1; 49 int day = calendar.get(java.util.Calendar.DATE); 50 int hour = calendar.get(java.util.Calendar.HOUR); 51 int minute = calendar.get(java.util.Calendar.MINUTE); 52 int second = calendar.get(java.util.Calendar.SECOND); 53 String data = month + "/ " + day + " " + hour + ":" + minute + ":" + second; 54 55 56 cobo =body++; 57 String stcobo = String.valueOf(cobo); 58 59 String sql = "INSERT INTO " + table + "(hp,data) " + "VALUES('" + stcobo + "','" + data + "')"; 60 61 62 ///Serviceで、update文で、id 1の、データのdataをStringがたのoldにして、 63 //Activityで、データベースから取得した値がnew ならばoldにする、そして、データベースに集計を入れる。 64 String stringhp=null; 65 Log.v("insertしてるやつ",stcobo+" : "+data); 66 int hp = 100 - cobo; 67 68 if(hp > 0) { 69 stringhp = "残りは" + hp + "です。"; 70 }else if(hp==0){ 71 stringhp = "もう" + hp + "です。"; 72 }else { 73 stringhp = hp + "になっています。"; 74 } 75 76 TextView textView = (TextView) findViewById(R.id.body); 77 textView.setText(stringhp); 78 79 Cursor c = db.rawQuery(sql, null); 80 c.close(); 81 } 82 }); 83 84 85 } 86 87 88 @Override 89 public void onStart(){ 90 super.onStart(); 91 92 String x="まじで";Log.v("ここに一点の?",x); 93 94 SQLiteDatabase db = null; 95 Databaseset databaseset = new Databaseset(MainActivity.this); 96 db = databaseset.getWritableDatabase(); 97 98 String table1 = Usersdata.Users.TABLE_NAME1; 99 100 //////// 101 // String insert="insert into "+table1+" (doge) values('true')"; 102 // Log.v("insert////",insert); 103 104 105 String select = "select * from "+table1; 106 Log.v("select////",select); 107 108 ////////// 109 // Cursor in=db.rawQuery(insert,null); 110 //このinを何かに使わなきゃいけないんじゃなかったっけ? 111 112 113 Cursor se = db.rawQuery(select, null); 114 115 116 String doge="false"; 117 118 119 //ここではいれてない 120 boolean isEof = se.moveToFirst(); 121 Log.d("Before Cursor Position/","" + se.getPosition()); 122 se.moveToNext(); 123 Log.d("Before Cursor Position/","" + se.getPosition()); 124 // / データを取得していく 125 while(isEof) { 126 doge = se.getString(se.getColumnIndex(Usersdata.Users.DOGE)); 127 Log.v("if入る前Acti:",doge); 128 } 129 130 if(doge=="true"){ 131 //trueになってたら、Serviceでtrueにしたってこと 132 133 body=0; 134 Log.v("Maでtrueだったため、if文に入る :",doge); 135 String update="update "+table1+" set doge='false'"; 136 Cursor up=db.rawQuery(update,null); 137 138 //trueってことは、24時間たったってことだからbzを0にして体力回復させる 139 body=0; 140 141 String bd=String.valueOf(body); 142 Log.v("bodyは0になるはずなのに",bd); 143 144 } 145 se.close(); 146 db.close(); 147 148 149 // 150 int aaa=10; 151 int bbb=39; 152 addReset(aaa,bbb); 153 getPendingIntent(); 154 155 } 156 157 158 159 160 private static final String TAG = MainActivity.class.getSimpleName(); 161 162 //Resetのコード 163 public void addReset(int resetHour, int resetMinute) { 164 165 // Reset(リセット)を設定する 166 PendingIntent mResetSender = this.getPendingIntent(); 167 168 // リセットするメソッドを呼ぶ時間の設定 169 java.util.Calendar cal = java.util.Calendar.getInstance(); 170 cal.setTimeInMillis(System.currentTimeMillis()); 171 // 設定した時刻をカレンダーに設定 172 cal.set(cal.HOUR_OF_DAY, resetHour); 173 cal.set(cal.MINUTE, resetMinute); 174 cal.set(cal.SECOND, 0); 175 cal.set(cal.MILLISECOND, 0); 176 177 Toast.makeText(this, String.format("%d時%d分にtoast表示のメソッドを呼びます", resetHour, resetMinute), Toast.LENGTH_LONG).show(); 178 179 // AlramManager取得 180 AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 181 // AlarmManagerにPendingIntentを登録 182 am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), mResetSender); 183 184 185 Log.v(TAG, cal.getTimeInMillis() + "ms"); 186 Log.v(TAG, "2:30に表示するメソッドを呼ぶ、セット完了"); 187 } 188 private PendingIntent getPendingIntent() { 189 Intent intent = new Intent(this, MyResetService.class); 190 191 //このintentにクラス変数の値をsetし、Serviceでデータベースにセットする。 192 193 String stcobo=String.valueOf(cobo); 194 195 Log.v("xxxxxxxxxx",stcobo); 196 197 PendingIntent pendingIntent = PendingIntent.getService(this, PendingIntent.FLAG_ONE_SHOT, intent, PendingIntent.FLAG_UPDATE_CURRENT); 198 return pendingIntent; 199 200 } 201 202} 203 204

//Usersdata

java

1package com.example.android.sample.physicalstrength; 2 3 4 5 import android.provider.BaseColumns; 6 7/** 8 * Created by endoutaichi on 2017/04/22. 9 */ 10 11public class Usersdata { 12 13 public Usersdata(){} 14 15 public static abstract class Users implements BaseColumns { 16 17 18 19 public static final String _ID="id"; 20 public static final String TABLE_NAME="body"; 21 public static final String TABLE_NAME1="doge"; 22 public static final String COL_HP="hp"; 23 public static final String COL_DATA="data"; 24 25 public static final String DOGE="doge"; 26 27 28 } 29}

//Databaseset

java

1 2public class Databaseset extends SQLiteOpenHelper { 3 4 5 public static final String DB_NAME="bodyhp.db"; 6 public static final int DB_VERSION=2; 7 8 public static final String CREATE_TABLE= 9 "create table " + Usersdata.Users.TABLE_NAME + "(" + 10 Usersdata.Users._ID + " integer primary key autoincrement, " + 11 Usersdata.Users.COL_HP + " text, " + 12 Usersdata.Users.COL_DATA + " text)"; 13 14 public static final String CREATE_TABLE1= 15 "create table "+Usersdata.Users.TABLE_NAME1+"("+ 16 Usersdata.Users.DOGE+" text )"; 17 18 19 20 21 } 22

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

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

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

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

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

guest

回答3

0

たとえば

//適当です。 a=kan1(ii); b=kan2(a,"aa"); if(c.kan3){ }

これのifが通らないとしましょう。
まず、c.kan3がどのような返り値を返してるか調べます。
これがtrueでなければ通らないわけですから。
この関数が何を返すかは、Logを確認するのとリファレンスを見ます。
ここでfalseを返してるなら使い方を間違ってるか、その前の部分がおかしいです。
ここでいったんあきらめてb=kan2(a,"aa")を見ます。
ここもkan2がどんな関数でどんな値を返してるか、使い方に間違いはないか見ます。
確認方法は先ほどと一緒です。
ここでも想定してない値が出たのならば、さらに戻ります。
kan1(ii)の中身を調べます。
やることは変わらないです。
ここでもだめなのであればiiの中身がどうなってるか見ます。
このiiの部分がデータベースになってるパターンもあるでしょう。
そうしますと第三者から見ると、iiの元となっているデータをすべて見せてくれとしかいえないです。
そして、サンプルでもない限りそれは見せれないでしょう。
なので想像で補うのですが、それも確かではありません。
つまりこれを作った本人しかどうしようもないのです。
解答としては、
関数の使い方間違ってませんか?ちゃんと意図した数値を返してますか?リファレンス読んであってますか?
などとしかいえなくなります。
きちんと関数は整備されてるので、きちんと使えばきちんといい値を返してくれます。
想定しなかった場合の値は、ほぼ使い方が間違ってるといっていいでしょう。
こういうのを自分で確かめるのがデバックといいます。
自分で確かめて修正するまでが、デバックです。

第三者にこんなの返ってきたけどというのはデバックではありません。ただの報告です。

また、毎回こういうやり取りをしてますが、それだと開発は無理です。
100%質問に答えてくれるわけでもないし、たしょうなりとも自分で出来るようにならないと
今後答えが帰ってこなかった場合そこで開発は中止になります。
一生完成しません。

投稿2017/04/24 03:10

toutou

総合スコア2050

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

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

edoooooo

2017/04/24 05:03 編集

ありがとうございます。データベースにどのような値がinsertされているのがが、AndriodStudioの接続ができないために確認できない状況でした。関数の使い方をリファレンスをみて確認します。
toutou

2017/04/24 06:38

内容を確認しないと、問題がデータベースにあるのか、SQL文に問題があるのか特定出来ないからです。 全くこの通りと考えていました。と言ってますがそれで何かしました?確認はとりましたか?
edoooooo

2017/04/24 07:46

確認とは、insertした文字を書き出すということですか? ターミナルで、select とかができるようになることではないのでしょうか?
edoooooo

2017/04/24 07:59 編集

//データベースの中身をコマンドラインから操作するSDKで用意されているツール //ターミナルで打ち込む //実機を使っています。 cd /Users/tatata/Library/Android/sdk cd platform-tools/ ./adb shell cd /data/data/com.example.android.sample.mydbapp/databases ls //ここで、myapp.db というファイルがあるはずなのに、 opendir failed, Permission denied の2つしかなくこれ以上先に進めませんでした。 ・・・myapp.dbにcdしてからやるコマンド・・・ sqlite3 myapp.db .tables .schema users select* from user exit
toutou

2017/04/24 07:55

/ここで、myapp.db というファイルがあるはずなのに、 opendir failed, Permission denied の2つしかなくこれ以上先に進めませんでした。 ということなんですが、ない理由の心当たりはありますか?
edoooooo

2017/04/24 08:10 編集

ドットインストールというサイトを利用して、サンプルコードを写経して、作成しました。 ファイル名も、database名も、table名も同じで作成して、作ったアプリを実行すると、サンプルと同じ結果が出ていました。その点では、あるはずのファイルがない理由は見当たりませんが、 実行環境の違いとしては、私は、エミュレーターでなく、実機を使っていることでしょうか?
toutou

2017/04/24 08:06

どこの何のことを言ってるかわかりません。話がごちゃ混ぜです。
swordone

2017/04/24 08:07

その「2つ」はファイルじゃない、メッセージだ
edoooooo

2017/04/24 08:11

ありがとうございます。opendirが失敗し、権限が拒否されましたとのことでした。 調べてみます。
toutou

2017/04/24 08:14

そもそもDBがあるのかどうか、まずそこから疑いたくなるな。よく見たらmyapp.db も新しく出てきた単語なのか。
edoooooo

2017/04/24 08:28

cd /data/data/com.example.android.sample.mydbapp/databases これの代わりに これでした。 run-as com.example.android.sample.mydbapp cd databases myapp.db が見つかったので、 sqlite3 myapp.db ← としたのですが、 sh: sqlite3:not fount とでました。
edoooooo

2017/04/24 08:30

myapp.dbが出てきた理由は、ターミナルでselectをできるようにするために、ドットインストールという動画教材で、新しいデータベースアプリを作って、動画の一連の流れにそって作ってたからです。
toutou

2017/04/24 08:32

参照したいデータはどれなの?
edoooooo

2017/04/24 08:33

myapp.dbです。
toutou

2017/04/24 08:34

それを取得してるコードはどれになるの?
edoooooo

2017/04/24 08:43

どう答えればいいのかがわからないです。すみません shell@android:/data/data/com.example.android.sample.mydbapp/databases $ ls myapp.db myapp.db-journal myappp.db myappp.db-journal ite3 myapp.db このような状況で、本来は、sqlite3 myapp.db として、 その後は、select* from user;ができるバズだったのですが、 sh:sqlite3:not fount というエラーを調べたら sqlite3は全ての端末に入っていないらしくて、sqlite3を入れるために、Android向けのsqlite3をまず入手する必要があるとのことでした。
toutou

2017/04/24 08:53

結論から言うとそちらの準備不足が原因っぽいのでこの質問は解決できません。この質問はクローズして準備期間を設けて質問したほうがいいと思います。自分でやれるべきことをすべてやってから質問はしてください。
edoooooo

2017/04/24 08:56

わかりました。ありがとうございました。
guest

0

ベストアンサー

検索結果が空だからです。

投稿2017/04/24 00:21

yona

総合スコア18155

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

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

edoooooo

2017/04/24 00:24

ありがとうございます。 ca.moveToFirst(); Log.d("Before Cursor Position/","" + ca.getPosition()); ca.moveToNext(); Log.d("Before Cursor Position/","" + ca.getPosition()); をしたのですが、どちらのログも0でした。
yona

2017/04/24 00:34

moveToNextをリファレンスで調べましたか?
edoooooo

2017/04/24 00:42 編集

はい、しらべました。次の値の中身がないとfalseを返すでした。 moveToFirst()をしても、ca.getPositionで0だったので、 moveToNext()をしたら、それでも0だったので、 中身がないことに気づきました。
yona

2017/04/24 00:42

では、プログラムの中で返却値を調べましたか?
edoooooo

2017/04/24 00:51 編集

String sql1="insert into "+table1+" (doge) values('true')"; Log.v("sql1////",sql1); String sql = "select * from "+table1; Log.v("sql////",sql); insert into new11 (doge) values('true') select * from new11 このことでしょうか?
yona

2017/04/24 01:12

moveToFirstの返却値です。 検索結果が空なのでどうやってもmoveToFirstはfalseになります。
edoooooo

2017/04/24 01:15

boolean isEof = ca.moveToFirst(); で、行いました。
yona

2017/04/24 01:17

私の回答は「検索結果が空」です。 データを入れている部分を自分でデバッグして、なぜ空なのかを調べてください。
edoooooo

2017/04/24 01:45

だいぶ前から調べているのですが、 わかりませんでした。create table, insert ,select のどれかに問題があると考えているのですが、 難度読み返してもわかりません。 コードの変数名をわかりやすい者にし、読みやすくしたのですが、わかりませんでした。
yona

2017/04/24 01:50 編集

コードは読みやすくなっていないですよ。 aaaとca等の変数名がわかりやすい変数名だと言っている時点でもうダメですね。
edoooooo

2017/04/24 02:08

se=select 、up=update 、in=insert、bd=body(体力)、cobo=countbody 、stcobo=string count body、hp=100-body 、stringbody=string.valueOf(hp) 全ての変数に一通り意味のある名前をつけました。
yona

2017/04/24 02:35

まだcccとかあるじゃ無いですか。 アドバイスはデータの挿入部分をデバッグしてください。デバッグとはコードを読むことではありません。 これ以上この質問にはコメントはしません。
edoooooo

2017/04/24 02:45

ありがとうございました。
guest

0

データベースの内容そのものを確認せよと以前に回答しましたよね?
「結果が空」なら、このチェックは絶対必要ですし、むしろ必要と感じないのがおかしい。

投稿2017/04/24 02:35

swordone

総合スコア20649

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

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

edoooooo

2017/04/24 05:02 編集

すみません。必要と感じていたのですが、AndridStudioから、ターミナルで作ったデータベースtable(todo)を指定して、アプリを実行してもandroid.database.sqlite.SQLiteException: no such table: todo (code 1):となってしまいます。
swordone

2017/04/24 03:41

好き勝手名前を変えないでください。 あなたSQL文でテーブルの名前何と指定していますか?
edoooooo

2017/04/24 05:01 編集

todo です。ターミナルで作りました。 create table todo (id integer primary key autoincrement,title text,content text,data text);
swordone

2017/04/24 04:54

コード上のどこにもtodoなんて使ってないですよね??
edoooooo

2017/04/24 05:01 編集

ターミナルから操作しようとして作ったものかと勘違いしました。ずっと使ってる者は、bodyと、dogeです。
swordone

2017/04/24 05:06

私が何のために「データベースの内容そのものを確認せよ」と言っているのか理解されていなかったと言うことでしょうか。
edoooooo

2017/04/24 05:09

データベースの中身を出力しないとでバックができないということですよね? 以前eclipseでjavaでwebアプリを作っていた時には、h2dabaseというものでターミナルから操作していたので、AndroidStudioでターミナルを使えないのは、大変でした。
swordone

2017/04/24 05:13

出力することそのものが目的ではありません。内容を確認しないと、問題がデータベースにあるのか、SQL文に問題があるのか特定出来ないからです。 やはり現段階のあなたにこのような開発は無理です。ここでの質問も効率が悪すぎます。今すぐ開発をやめて、JavaやSQLの基礎からの勉強をやり直してください。
edoooooo

2017/04/24 05:16

内容を確認しないと、問題がデータベースにあるのか、SQL文に問題があるのか特定出来ないからです。 全くこの通りと考えていました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問