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

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

ただいまの
回答率

90.40%

  • Java

    16452questions

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

  • Android

    7499questions

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

  • SQLite

    816questions

    SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

SQLiteを使っての登録処理が上手く行きません

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 383

yuutarou22

score 9

前提・実現したいこと

AndroidStudioで位置情報を使った観光地登録のアプリを開発しています。
そこで、最初は「観光地名」と「観光地概要」の登録を実装しようと考えております。
動きとしては下記のとおりです。
①MySpotAddActivityで入力
②下方にある登録ボタンでDBに挿入
②’下方にある見るボタンでDBに挿入されたものを見る(ShowDataActivityに画面遷移)

該当のソースコード

MySpotAddHereActivity.java

package com.example.yutaro0224.spot;

//文字数制限のためimport文省略

public class MySpotAddHereActivity extends Activity {
    Global globals;
    private final static int RESULT_CAMERA = 1001;
    private final static int REQUEST_PERMISSION = 1002;

    private Uri cameraUri;
    private File cameraFile;
    private String filePath;
    private ImageView imageView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_myspot_add_here);
        final EditText spotName, spotOverview;

        //グローバル変数
        globals = (Global) this.getApplication();

        if (savedInstanceState != null) {cameraUri = savedInstanceState.getParcelable("CaptureUri");}

        final MyDbHelper helper = new MyDbHelper(this);
        final SQLiteDatabase db = helper.getWritableDatabase();

        Button returnButton = (Button) findViewById(R.id.return_button);
        returnButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        TextView spotNameLabel = (TextView) findViewById(R.id.spot_name_label);
        spotName = (EditText) findViewById(R.id.spot_name);

        TextView spotOverviewLabel = (TextView) findViewById(R.id.spot_overview_label);
        spotOverview = (EditText) findViewById(R.id.spot_overview);

        Button cameraButton = (Button) findViewById(R.id.camera_button);
        cameraButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Android6,API23以上でパーミッションの確認
                if (Build.VERSION.SDK_INT >= 23) {
                    checkPermission();
                } else {
                    cameraIntent();
                }
            }
        });

        imageView = (ImageView) findViewById(R.id.image_view);

        Button addButton = (Button) findViewById(R.id.AddButton);
        addButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String spotNameStock = spotName.getText().toString();
                String spotOverviewStock = spotOverview.getText().toString();

                if (spotNameStock != null && spotOverviewStock != null) {
                    if (!spotNameStock.equals("") && !spotOverviewStock.equals("")) {
                        ContentValues Data = new ContentValues();
                        Data.put("spotName",spotNameStock);
                        Data.put("spotOverview",spotOverviewStock);
                        long data = db.insert("spotTable", spotNameStock, Data);
                    }
                }
            }
        });
        Button viewButton = (Button)findViewById(R.id.viewButton);
        viewButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getApplication(), ShowDataActivity.class);
                startActivity(intent);
            }
        });
    }

    //////////////////////カメラ処理////////////////////////
    private void cameraIntent() {
        //保存先フォルダ作成
        File cameraFolder = new File(
                Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "IMG"
        );
        cameraFolder.mkdirs();

        //保存フォルダ名
        String fileName = new SimpleDateFormat("ddHHmmss").format(new Date());
        filePath = cameraFolder.getPath() + "/" + fileName + ".jpg";
        Log.d("debug", "filePath:" + filePath);

        //capture画像のファイルパス
        cameraFile = new File(filePath);
        cameraUri = Uri.fromFile(cameraFile);

        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, cameraUri);
        startActivityForResult(intent, RESULT_CAMERA);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == RESULT_CAMERA) {
            if (cameraUri != null) {
                imageView.setImageURI(cameraUri);
            } else {
                Log.d("debug", "cameraUri == null");
            }
        }
    }

    //Runtime Permission check
    private void checkPermission() {
        //すでに許可している
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
            cameraIntent();
        }//拒否していた場合
        else {
            requestLocationPermission();
        }
    }

    //許可を求める
    private void requestLocationPermission() {
        if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
            ActivityCompat.requestPermissions(MySpotAddHereActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_PERMISSION);
        } else {
            Toast toast = Toast.makeText(this, "許可されないとアプリが実行できません", Toast.LENGTH_SHORT);
            toast.show();

            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_PERMISSION);
        }
    }

    //結果の受取
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        if (requestCode == REQUEST_PERMISSION) {
            //使用が許可された
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                cameraIntent();
                return;
            } else {
                //それでも拒否
                Toast toast = Toast.makeText(this, "これ以上何も出来ません", Toast.LENGTH_SHORT);
                toast.show();
            }
        }
    }
}

ShowDataActivity.java

package com.example.yutaro0224.spot;

import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.TextView;

public class ShowDataActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_show_data);

        LinearLayout layout = new LinearLayout(this);
        layout.setOrientation(LinearLayout.VERTICAL);
        setContentView(layout);

        MyDbHelper helper = new MyDbHelper(this);
        SQLiteDatabase db = helper.getReadableDatabase();

        Cursor cursor = db.query("spotTable",new String[]{"name", "Over"}, null,null,null,null,null);
        boolean mov = cursor.moveToFirst();
        while(mov){
            TextView textView = new TextView(this);
            textView.setText(String.format("%s:%s", cursor.getString(0),cursor.getString(1)));
            mov = cursor.moveToNext();
            layout.addView(textView);
        }

        cursor.close();
        db.close();
    }
}

MyDbHelper.java

package com.example.yutaro0224.spot;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class MyDbHelper extends SQLiteOpenHelper {
    static final String DB_NAME = "spot.db";
    static final int VERSION = 1;
    public static final String TABLE_NAME = "spotTable";
    protected SQLiteDatabase db;

    public MyDbHelper(Context context) {
        super(context, DB_NAME, null, VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(
                "CREATE TABLE " + TABLE_NAME + "(" +
                        " name TEXT NOT NULL, " +
                        " over TEXT NOT NULL " +
                ");"
        );
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME + ";");
//        onCreate(db);
    }
}

ShowDataActivityへの画面遷移はするのですが、何も表示されません。
また、具体的なSQLiteの実装の流れを教えて頂けると幸いです。
(例えば、①SQLiteOpenHelperを継承したクラスを作って②それを……のようにです)
宜しくお願い致します。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

+1

カラム名が全てバラバラですね。カラム名は定数にして、ハードコーディングはやめましょう。

参考

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/08/15 11:16

    回答ありがとうございます。
    yonaさんのサイトの説明とてもわかり易いですね。
    データベースファイル
     →テーブル①、テーブル②…
      →テーブル①の【名前】、【商品名】、【価格】というカラム名
      →テーブル②の【名前】、【商品名】、【価格】というカラム名
    ということだったんですね。構造が把握できていませんでした。
    定数にしてみます。

    キャンセル

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

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

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

  • Java

    16452questions

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

  • Android

    7499questions

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

  • SQLite

    816questions

    SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。