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

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

ただいまの
回答率

88.58%

Android SQLからデータをとってList で表示できない

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 2,259

uikura

score 37

Android、java初心者です。皆様のお知恵をお貸しください

簡単なメモアプリを作ろうと考えています。メモした内容をデータベースに保存してそのデータをListで表示させたのですがうまくいきません。

・登録ボタンで登録

・検索ボタンを押すと画面遷移(このときintentを渡しています)して一覧表示(List)

のようにしたいと考えています。

SimpleCursorAdapterを使うとは思うのですが使い方がいまいちわかりません。どうか表示の方法を教えてください。よろしくお願いします


MemoSQliteHelperクラス

public class MemoSQLiteHelper extends SQLiteOpenHelper {
    private  static final int version = 1;
    private  static final String name ="reportmemo.db";


    public MemoSQLiteHelper(Context context) {
        super(context, name, null, version);
    }



    @Override
    public void onCreate(SQLiteDatabase db) {

        String sql = "CREATE TABLE IF NOT EXISTS Memo"
                + "(content INTEGER PRIMARY KEY ,memo TEXT);";

        db.execSQL(sql);

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

NewmemoActivityクラス

import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;


public class NewmemoActivity extends Activity implements View.OnClickListener {

    private MemoSQLiteHelper MSSQLhelper = null;
    private EditText txtmemo;

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


        Button enterbtn = (Button) findViewById(R.id.memoEnterBtn);
        enterbtn.setOnClickListener(this);

        Button search = (Button) findViewById(R.id.memoSearchBtn);
        search.setOnClickListener(this);

        txtmemo = (EditText) findViewById(R.id.memoEntryEdit);

        MSSQLhelper = new MemoSQLiteHelper(NewmemoActivity.this);


    }


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.memoEnterBtn://登録
                enter();
                break;

            case R.id.memoSearchBtn://検索
                Intent intent = new Intent(getApplicationContext(), MemosearchActivity.class);//検索画面に遷移します。
                intent.putExtra("検索","1");
                startActivity(intent);
                break;

        }

    }

    //登録
    private void enter() {
        ContentValues cv = new ContentValues();

        SQLiteDatabase db = MSSQLhelper.getWritableDatabase();

        cv.put("memo", txtmemo.getText().toString());

        long rt = db.insert("Memo", null, cv);

        db.close();

        if (0 < rt) {
            Toast.makeText(this, "追加できました", Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(this, "追加できませんでした", Toast.LENGTH_LONG).show();

        }

    }
}

MemosearchActivityクラス

public class MemosearchActivity extends Activity implements View.OnClickListener {

    private MemoSQLiteHelper MSSQLhelper = null;
    private ListView memolist;
    private int Search;
    private SimpleCursorAdapter adapter;


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

        Intent intent = getIntent();//intetnを受け取る
        Search = Integer.parseInt(intent.getStringExtra("検索"));

        switch (Search) {
            case 1://このときlistloadメソッドを作ります。
                listload();
                break;

        }


    }


    private void listload() {
        String tablename = "Memo";
        String[] cols = null;
        String selection = null;
        String[] selectionArgs = null;
        String groupBy = null;
        String having = null;
        String orderBy = null;

        memolist = (ListView) findViewById(R.id.memoList);

        MSSQLhelper = new MemoSQLiteHelper(MemosearchActivity.this);

        SQLiteDatabase sdb = MSSQLhelper.getReadableDatabase();

        Cursor cursor = sdb.query("reportmemo", null, null, null, null, null, null);


        /*String[] columns = new String[]{"_content", "memo" };

        String[] headers = new String[]{"content", "memo"};
        int[] layouts = new int[]{android.R.id.text1, android.R.id.text2};
        adapter = new SimpleCursorAdapter(this, android.R.layout.two_line_list_item, cursor, headers, layouts);
        memolist.setAdapter(adapter);*/




        /*memolist.setAdapter(new SimpleCursorAdapter(this,
                android.R.layout.simple_list_item_1, cursor,
                new String[],
                new int[]{R.id.id, R.id.date, R.id.weight}, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER));
        sdb.close();*/

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                this,
                android.R.layout.simple_list_item_1
        );


        while (cursor.moveToNext()) {
            adapter.add(String.valueOf(cursor.getInt(0)));
            adapter.add(cursor.getString(1));


            memolist.setAdapter(adapter);


            //終了処理
            cursor.close();
            sdb.close();


        }
    }

    @Override
    public void onClick(View v) {

    }
}

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

uikuraさんのソースを元に表示させるには
こんな感じでいけるかと思います

// DBから取得部分
Cursor cursor = sdb.query("reportmemo", null, null, null, null, null, null); 

 Cursor cursor = sdb.query("Memo",
                new String[]{"content","memo"},
                null,
                null,
                null,
                null,
                "content ASC");

// adapterへの追加部分
    while (cursor.moveToNext()) { 
            adapter.add(String.valueOf(cursor.getInt(0))); 
            adapter.add(cursor.getString(1)); 
            memolist.setAdapter(adapter); 
            //終了処理 
            cursor.close(); 
            sdb.close(); 
        } 

        if(cursor.moveToFirst()){
            do{
                adapter.add(String.valueOf(cursor.getInt(0)) + ":" +cursor.getString(1));
            }while(cursor.moveToNext());
        }
        memolist.setAdapter(adapter);
        cursor.close();
        sdb.close();

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/07/08 15:07

    回答ありがとうございます!実行したところ memolist.setAdapter(adapter); のところでNullPointerExceptionが出ました。データが登録できていないのでしょうか?

    キャンセル

  • 2015/07/08 15:33

    申し訳ありません。できました!ありがとうございました

    キャンセル

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

  • ただいまの回答率 88.58%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る