現在、ただのLinearLayout上にsqlite内のデータを表示させることは
できたのですが
それをlistview上に表示させようとするとうまくいきません。
実行すると
R.layout.activity_main3に移る瞬間で
問題が発生したため(アプリ名)を終了します。
となります。
Main3Activity.java↓
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
public class Main3Activity extends AppCompatActivity {
ListView myListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);// setContentViewでlayout(show_database)を置く
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
setContentView(layout); *ここの部分を削除すると正常に動くようになりました。
myListView = (ListView)findViewById(R.id.itemListView);
MyOpenHelper helper = new MyOpenHelper(this);
SQLiteDatabase db = helper.getReadableDatabase();
Cursor c = db.rawQuery
//表示するカラム名
String[] from = {"Shopname","_id"};
//バインドするViewリソース
int[] to = {android.R.id.text1,android.R.id.text2};
//adapter生成
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,android.R.layout.simple_list_item_2,c,from,to,0);
//bindして表示
myListView.setAdapter(adapter);
//クリックしたとき各行のデータ(特に_id)を取得
myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
//各要素を取得
String s1 = ((TextView) view.findViewById(android.R.id.text1)).getText().toString();
String s2 = ((TextView) view.findViewById(android.R.id.text2)).getText().toString();
Log.v("tama", "position=" + s1);
Log.v("tama", "position=" + s2);
}
});
//loop(いらない)
while(c.moveToNext()){
Log.v("tama", c.getString(c.getColumnIndex("Shopname")));
}
}
}
activity_main3に移る際の
logcat↓
04-22 14:52:09.370 28578-28578/com.example.sample.liflogaplicationtukurinaosi W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x41fc7ba8)
04-22 14:52:09.370 28578-28578/com.example.sample.liflogaplicationtukurinaosi E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.sample.liflogaplicationtukurinaosi, PID: 28578
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.sample.liflogaplicationtukurinaosi/com.example.sample.liflogaplicationtukurinaosi.Main3Activity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.example.sample.liflogaplicationtukurinaosi.Main3Activity.onCreate(Main3Activity.java:82)
at android.app.Activity.performCreate(Activity.java:5231)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
activity_main3.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ListView
android:layout_height="wrap_content"
android:id="@+id/itemListView"
android:layout_width="match_parent"
android:layout_weight="1"/>
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="match_parent">
</LinearLayout>
<Button
android:id="@+id/deleteAll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="全削除"
></Button>
</LinearLayout>
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+1
ログを読みましょう。
このMain3Activityの、82行目でNullPointerExceptionが発生しています。
そこには何が記述されていますか?
また、コードは専用の記述方法があるのでそちらに修正してください。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
adapterのソースがないのでわかりませんが、adapterの中身が怪しい気がします。おそらくadapter内でCursor.getString()で取得した文字列をtextviewにセットしているのだと思いますが、このとき取得した文字列がnullなのではないでしょうか?
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.35%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2016/04/22 15:45
コード変更いたしました!
82行目には
myListView.setAdapter(adapter);
が記述されています。
引き続きよろしくお願いします。
2016/04/22 16:03
どちらがnullなのかで対応が変わります。
あと、ログも同様にコード用の記述法でいいと思いますよ。
2016/04/22 16:59
デバッグを実行して
Debuggerのスクショを追加しました!
よろしくお願いします。
2016/04/22 17:07
ListViewがnullになっているので考えられるのはfindViewByIdに使ったidが他のレイアウトに記載されている可能性があります。
レイアウトファイルを確認してください。
2016/04/22 18:49
以後気を付けます。
それで
レイアウトファイルを
確認したところ記載は見当たりませんでした。
上の回答者様の意見は何か参考になりますでしょうか?
2016/04/22 19:21 編集
レイアウトファイルの追記をお願いします。
2016/04/22 19:32 編集
?書いてなかったってこと?
hamusuke1さん
そんな会社に送るメールみたいな文言使わずに、
誰でもわかるような言葉で書いたほうがいいと思いますよ・・・
2016/04/22 19:49
activity_main3.xmlにはid属性がitemListViewのViewが間違いなく存在していますか?
2016/04/22 22:12
itemListViewは存在しています。
文字数の関係で上には追記しきれなかった残りのレイアウトファイルをここに書きます。
```
activity_main2.xml↓
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:text="店舗名" />
<EditText
android:id="@+id/editShopName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/textView1"
android:ems="10"
android:inputType="textPersonName" >
</EditText>
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/editShopName"
android:text="料理名" />
<EditText
android:id="@+id/editFood"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/textView4"
android:ems="10"
android:inputType="textPersonName" >
</EditText>
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/editComment"
android:text="5つ星評価"></TextView>
<RatingBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ratingBar"
android:layout_below="@+id/textView2"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<TextView
android:text="0"
android:id="@+id/ratingText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/ratingBar"
android:layout_above="@+id/insert"
/>
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/editFood"
android:text="コメント"/>
<EditText
android:id="@+id/editComment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/textView3"
android:ems="10"
android:inputType="textPersonName" />
<Button
android:id="@+id/insert"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_below="@+id/ratingBar"
android:text="登録"
android:layout_marginTop="10dp"
/>
<Button
android:id="@+id/btn_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ホームに戻る"
android:onClick="onClick"
android:layout_above="@+id/deleteAll"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"></Button>
<Button
android:id="@+id/dataBase"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="外食リストを閲覧"
android:onClick="onClick"
android:layout_above="@+id/deleteAll"
android:layout_toRightOf="@+id/btn_back"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"></Button>
<Button
android:id="@+id/deleteAll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="全削除"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"></Button>
</RelativeLayout>
```
```
activity_main.xml↓
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:layout_width="250dp"
android:layout_height="100dp"
android:text="店舗登録"
android:id="@+id/button1"
android:textSize="30dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="60dp"
android:onClick="onClick"/>
<Button
android:layout_width="250dp"
android:layout_height="100dp"
android:text="外食リスト"
android:textSize="30dp"
android:id="@+id/button2"
android:layout_gravity="center_horizontal"
android:layout_marginTop="60dp"
android:onClick="onClick"/>
</LinearLayout>
</RelativeLayout>
```
2016/04/22 22:58
コードは間違いなく最新なんですよね?途中で別のレイアウトファイルをsetContentViewしていたりしないですよね?
2016/04/24 09:36
全く同じプロジェクトをコピペで作り直して実行してみても同じ状況になりました。
2016/04/24 09:48
いまMainActivity3.javaのソースを再確認したところ
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
の下にご指摘のあった
setContentView(layout);
という記述がありました。
こちらのソースでたまたまその部分が抜けていたという致命的なミスを犯してしまいました。
その部分をコメントアウトして実行してみたところ、無事リスト表示が実現できました。
ご協力、ありがとうございました!
2016/04/24 10:27
良かったです( ̄^ ̄)ゞ