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

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

ただいまの
回答率

90.50%

  • Android Studio

    3703questions

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

Android Studio ImageViewの型

受付中

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 457

boc20

score 13

前提・実現したいこと

ActiveAndroidの保存項目にImageViewを追加したいです。
エラーの部分にカーソルを当てると出てくるIncompatible typeにRequired:Java.long.String  Found:android.widget.ImageViewと出ますがこの意味がわかりません
★で囲んでいる部分が追記したコードです。
よろしくお願いします。
使用したサイト→https://akira-watson.com/android/activeandroid.html

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

不適合な型:ImageViewをStringに変換できません

該当のソースコード

public class MainActivity extends AppCompatActivity {

    private EditText editText1, editText2;
    private Button buttonSave, buttonRead, buttonClear;
    private TextView textView;

    private Bitmap bitmap;
    private ImageView imageView;
    private Canvas canvas;
    private int viewWidth, viewHeight;



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



        // ウィンドウマネージャのインスタンス取得
        WindowManager manager = (WindowManager) getSystemService(WINDOW_SERVICE);
        // ディスプレイのインスタンスを生成
        Display display = manager.getDefaultDisplay();
        Point point = new Point();
        // 画像サイズの取得
        display.getSize(point);
        viewWidth = point.x;
        viewHeight = point.y;


        Button button = (Button) findViewById(R.id.gazoo);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 画像が保存されてるフォルダにアクセス
                Intent intent = new Intent();
                intent.setType("image/*");
                intent.setAction(Intent.ACTION_PICK);
                // 起動先アクティビティからデータを返してもらいたい場合
                startActivityForResult(intent, 0);
            }
        });


                editText1 = (EditText) findViewById(R.id.edit_text1);
                editText2 = (EditText) findViewById(R.id.edit_text2);

                buttonSave = (Button) findViewById(R.id.save_button);
                buttonSave.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        String text1 = editText1.getText().toString();
                        String text2 = editText2.getText().toString();

               ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
                        String backData = imageView.getDrawable().toString();
               ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

                        if (text1 != null && text2 != null && backData !=null) {
                            saveData(text1, text2,backData);
                            // 次の入力のため空白とする
                            editText1.setText("");
                            editText2.setText("");

                            // ボタンがタップでkeyboard を閉じる
                            InputMethodManager inputMethodManager =
                                    (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                            inputMethodManager.hideSoftInputFromWindow(v.getWindowToken(), 0);
                        }
                    }
                });

                textView = (TextView) findViewById(R.id.text_view);
                imageView=(ImageView)findViewById(R.id.imageView);

                buttonRead = (Button) findViewById(R.id.read_button);
                buttonRead.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        readData();
                    }
                });


                buttonClear = (Button) findViewById(R.id.clear_button);
                buttonClear.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        clearData();


                    }
                });

            }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // 画像を選択した時のみ実行
        if (data != null) {
            Uri uri = data.getData();
            try {
                bitmap = loadImage(uri, viewWidth, viewHeight);
            } catch (Exception e) {
                e.printStackTrace();
            }
            canvas = new Canvas(bitmap);
            imageView.setImageBitmap(bitmap);
        }
    }
    // 取得したURIを用いて画像を読み込む
    private Bitmap loadImage(Uri uri, int viewWidth, int viewHeight) {
        // Uriから画像を読み込みBitmapを作成
        Bitmap originalBitmap = null;
        try {
            originalBitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        // MediaStoreから回転情報を取得
        final int orientation;
        Cursor cursor = MediaStore.Images.Media.query(getContentResolver(), uri, new String[]{
                MediaStore.Images.ImageColumns.ORIENTATION
        });
        if (cursor != null) {
            cursor.moveToFirst();
            orientation = cursor.getInt(0);
        } else {
            orientation = 0;
        }

        int originalWidth = originalBitmap.getWidth();
        int originalHeight = originalBitmap.getHeight();

        // 縮小割合を計算
        final float scale;
        if (orientation == 90 || orientation == 270) {
            // 縦向きの画像は半分のサイズに変更
            scale = Math.min(((float) viewWidth / originalHeight) / 2, ((float) viewHeight / originalWidth) / 2);
        } else {
            // 横向きの画像
            scale = Math.min((float) viewWidth / originalWidth, (float) viewHeight / originalHeight);
        }

        // 変換行列の作成
        final Matrix matrix = new Matrix();
        if (orientation != 0) {
            //画像を回転させる
            matrix.postRotate(orientation);
        }
        if (scale < 1.0f) {
            // Bitmapを拡大縮小する
            matrix.postScale(scale, scale);
        }

        // 行列によって変換されたBitmapを返す
        return Bitmap.createBitmap(originalBitmap, 0, 0, originalWidth, originalHeight, matrix,
                true);
    }
            private void saveData(String text1, String text2,String backeData) {
                // 登録
                Item item = new Item();
                item.keyData = text1;
                item.valueData = text2;
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
                item.backData = imageView;
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
                item.save();

                // 読出し
                readData();
            }


            private void readData() {
                String resText = "";

                // 全て取リだし
                List<Item> list = new Select().from(Item.class).execute();
                for (Item i : list) {                                                           ★★★★★★
                    resText += String.valueOf(i) + ":  " + i.keyData + ", " + i.valueData + ","+ i.backData + "\n";                                                   
                }                                                                              ★★★★★★

                textView.setText(resText);
            }

            private void clearData() {
                List<String> tables = new ArrayList<>();

                SQLiteDatabase database = ActiveAndroid.getDatabase();
                Cursor cursor = database.rawQuery("SELECT * FROM sqlite_master WHERE type='table';", null);
                cursor.moveToFirst();

                while (!cursor.isAfterLast()) {
                    String tableName = cursor.getString(1);
                    if (!tableName.equals("android_metadata") &&
                            !tableName.equals("sqlite_sequence")) {
                        tables.add(tableName);
                    }
                    cursor.moveToNext();
                }
                cursor.close();
                for (String tableName : tables) {
                    database.execSQL("DELETE FROM " + tableName);
                }

            }
}

Item.java

@Table(name="testDB")
public class Item extends Model{

@Column(name="data1")
public String keyData;

@Column(name="data2")
public String valueData;

@Column(name="data3")
public String backData;

public Item(){
super();
}
}

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

より詳細な情報

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • swordone

    2017/02/11 10:18 編集

    Itemとはどういうクラスですか?クラスのコードを見せて欲しいです。

    キャンセル

  • swordone

    2017/02/11 10:20

    あと、★で囲った部分が3箇所あるのですが、すべてで同じエラーが出ているのですか?

    キャンセル

  • boc20

    2017/02/13 09:52

    ★の部分が参考サイトに追記したコードです。 エラーは3箇所に出ているのではなく上記の一つしか出ていません

    キャンセル

回答 3

+1

なぜtoString()を使用してString型が返却されないかはわかりませんが、Byte配列で扱い、BLOBで保存した方がいいと思いますよ。

ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(CompressFormat.PNG, 100, baos);
byte[] bytes = baos.toByteArray();

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/02/10 13:09

    試してみたいと思います。

    キャンセル

0

いろいろなことを追加する前に個々の機能を確実にしないと混乱するだけです

  1. 画像を探して表示するまでを確実にしましょう
  2. そのあとその画像を保存してその保存先のパスをActiveAndroidで保存

ACTION_PICKはKitKat以降はACTION_OPEN_DOCUMENTを使った方法に変わっています。Kitkat未満でのテストであればいいですが

bitmap = loadImage(uri, viewWidth, viewHeight);
...
imageView.setImageBitmap(bitmap);


setImageBitmap(bitmap)でimageViewに画像が追加されて表示されていますか?

imageView.getDrawable().toString();
drawableには最初から自分で入れる領域です
後から画像が自動的にdrawableには入りません

おそらく画像をサムネイル化しているのでしょうけれど
それを端末内に保存しないといけません
ActivieAndroidはその保存したpathを記録しておきます

保存先は画像なので外部メモリ領域(端末内)でしょう

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/02/10 13:27

    一応フォルダから画像を選択してimageViewに追加することはできているのですが....

    キャンセル

0

ItemのbackDataがString型なので、ImageView型のオブジェクトは入れられません。

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
                item.backData = imageView;
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/02/13 11:45

    何型ならImageView型を入れることができるのでしょうか?

    キャンセル

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

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

関連した質問

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

  • Android Studio

    3703questions

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