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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Android Studio

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

Q&A

3回答

2451閲覧

Android Studio ImageViewの型

boc20

総合スコア26

Android Studio

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

0グッド

0クリップ

投稿2017/02/10 01:25

編集2017/02/13 00:48

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

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

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

###該当のソースコード

Java

1public class MainActivity extends AppCompatActivity { 2 3 private EditText editText1, editText2; 4 private Button buttonSave, buttonRead, buttonClear; 5 private TextView textView; 6 7 private Bitmap bitmap; 8 private ImageView imageView; 9 private Canvas canvas; 10 private int viewWidth, viewHeight; 11 12 13 14 @Override 15 protected void onCreate(Bundle savedInstanceState) { 16 super.onCreate(savedInstanceState); 17 setContentView(R.layout.activity_main); 18 19 20 21 // ウィンドウマネージャのインスタンス取得 22 WindowManager manager = (WindowManager) getSystemService(WINDOW_SERVICE); 23 // ディスプレイのインスタンスを生成 24 Display display = manager.getDefaultDisplay(); 25 Point point = new Point(); 26 // 画像サイズの取得 27 display.getSize(point); 28 viewWidth = point.x; 29 viewHeight = point.y; 30 31 32 Button button = (Button) findViewById(R.id.gazoo); 33 button.setOnClickListener(new View.OnClickListener() { 34 @Override 35 public void onClick(View v) { 36 // 画像が保存されてるフォルダにアクセス 37 Intent intent = new Intent(); 38 intent.setType("image/*"); 39 intent.setAction(Intent.ACTION_PICK); 40 // 起動先アクティビティからデータを返してもらいたい場合 41 startActivityForResult(intent, 0); 42 } 43 }); 44 45 46 editText1 = (EditText) findViewById(R.id.edit_text1); 47 editText2 = (EditText) findViewById(R.id.edit_text2); 48 49 buttonSave = (Button) findViewById(R.id.save_button); 50 buttonSave.setOnClickListener(new View.OnClickListener() { 51 @Override 52 public void onClick(View v) { 53 String text1 = editText1.getText().toString(); 54 String text2 = editText2.getText().toString(); 55 56 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ 57 String backData = imageView.getDrawable().toString(); 58 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ 59 60 if (text1 != null && text2 != null && backData !=null) { 61 saveData(text1, text2,backData); 62 // 次の入力のため空白とする 63 editText1.setText(""); 64 editText2.setText(""); 65 66 // ボタンがタップでkeyboard を閉じる 67 InputMethodManager inputMethodManager = 68 (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 69 inputMethodManager.hideSoftInputFromWindow(v.getWindowToken(), 0); 70 } 71 } 72 }); 73 74 textView = (TextView) findViewById(R.id.text_view); 75 imageView=(ImageView)findViewById(R.id.imageView); 76 77 buttonRead = (Button) findViewById(R.id.read_button); 78 buttonRead.setOnClickListener(new View.OnClickListener() { 79 @Override 80 public void onClick(View v) { 81 readData(); 82 } 83 }); 84 85 86 buttonClear = (Button) findViewById(R.id.clear_button); 87 buttonClear.setOnClickListener(new View.OnClickListener() { 88 @Override 89 public void onClick(View v) { 90 clearData(); 91 92 93 } 94 }); 95 96 } 97 98 @Override 99 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 100 super.onActivityResult(requestCode, resultCode, data); 101 // 画像を選択した時のみ実行 102 if (data != null) { 103 Uri uri = data.getData(); 104 try { 105 bitmap = loadImage(uri, viewWidth, viewHeight); 106 } catch (Exception e) { 107 e.printStackTrace(); 108 } 109 canvas = new Canvas(bitmap); 110 imageView.setImageBitmap(bitmap); 111 } 112 } 113 // 取得したURIを用いて画像を読み込む 114 private Bitmap loadImage(Uri uri, int viewWidth, int viewHeight) { 115 // Uriから画像を読み込みBitmapを作成 116 Bitmap originalBitmap = null; 117 try { 118 originalBitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri); 119 } catch (FileNotFoundException e) { 120 e.printStackTrace(); 121 } catch (IOException e) { 122 e.printStackTrace(); 123 } 124 125 // MediaStoreから回転情報を取得 126 final int orientation; 127 Cursor cursor = MediaStore.Images.Media.query(getContentResolver(), uri, new String[]{ 128 MediaStore.Images.ImageColumns.ORIENTATION 129 }); 130 if (cursor != null) { 131 cursor.moveToFirst(); 132 orientation = cursor.getInt(0); 133 } else { 134 orientation = 0; 135 } 136 137 int originalWidth = originalBitmap.getWidth(); 138 int originalHeight = originalBitmap.getHeight(); 139 140 // 縮小割合を計算 141 final float scale; 142 if (orientation == 90 || orientation == 270) { 143 // 縦向きの画像は半分のサイズに変更 144 scale = Math.min(((float) viewWidth / originalHeight) / 2, ((float) viewHeight / originalWidth) / 2); 145 } else { 146 // 横向きの画像 147 scale = Math.min((float) viewWidth / originalWidth, (float) viewHeight / originalHeight); 148 } 149 150 // 変換行列の作成 151 final Matrix matrix = new Matrix(); 152 if (orientation != 0) { 153 //画像を回転させる 154 matrix.postRotate(orientation); 155 } 156 if (scale < 1.0f) { 157 // Bitmapを拡大縮小する 158 matrix.postScale(scale, scale); 159 } 160 161 // 行列によって変換されたBitmapを返す 162 return Bitmap.createBitmap(originalBitmap, 0, 0, originalWidth, originalHeight, matrix, 163 true); 164 } 165 private void saveData(String text1, String text2,String backeData) { 166 // 登録 167 Item item = new Item(); 168 item.keyData = text1; 169 item.valueData = text2; 170 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ 171 item.backData = imageView; 172 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ 173 item.save(); 174 175 // 読出し 176 readData(); 177 } 178 179 180 private void readData() { 181 String resText = ""; 182 183 // 全て取リだし 184 List<Item> list = new Select().from(Item.class).execute(); 185 for (Item i : list) { ★★★★★★ 186 resText += String.valueOf(i) + ": " + i.keyData + ", " + i.valueData + ","+ i.backData + "\n"; 187 } ★★★★★★ 188 189 textView.setText(resText); 190 } 191 192 private void clearData() { 193 List<String> tables = new ArrayList<>(); 194 195 SQLiteDatabase database = ActiveAndroid.getDatabase(); 196 Cursor cursor = database.rawQuery("SELECT * FROM sqlite_master WHERE type='table';", null); 197 cursor.moveToFirst(); 198 199 while (!cursor.isAfterLast()) { 200 String tableName = cursor.getString(1); 201 if (!tableName.equals("android_metadata") && 202 !tableName.equals("sqlite_sequence")) { 203 tables.add(tableName); 204 } 205 cursor.moveToNext(); 206 } 207 cursor.close(); 208 for (String tableName : tables) { 209 database.execSQL("DELETE FROM " + tableName); 210 } 211 212 } 213} 214

###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/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

swordone

2017/02/10 03:12

そもそもエラーが出ているのはどこですか?
boc20

2017/02/10 04:06

★で囲んだ部分です。
swordone

2017/02/11 01:19 編集

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

2017/02/11 01:20

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

2017/02/13 00:52

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

回答3

0

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

Java

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

投稿2017/02/10 03:09

yona

総合スコア18155

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

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

boc20

2017/02/10 04:09

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

0

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

java

1 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ 2 item.backData = imageView; 3 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

投稿2017/02/13 01:34

swordone

総合スコア20651

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

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

boc20

2017/02/13 02:45

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

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 04:12

aja

総合スコア3733

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

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

boc20

2017/02/10 04:27

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問