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

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

新規登録して質問してみよう
ただいま回答率
85.51%
Java

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

Android

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

1回答

1070閲覧

javaクラスでgetSharedPreferencesを使用することができない

m-mega

総合スコア56

Java

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

Android

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2022/06/29 06:57

実現したいこと

「MainActivity.kt」にてプリファレンスに保存した値を、「TrimView.java」という自作のクラスの中で読み込んで使用したいです。

わからないこと

「MainActivity.kt」では「getSharedPreferences」を使って、問題なくプリファレンスに値を保存して読み込むことができているのですが、同じことを「TrimView.java」で行うとエラーが出てしまいビルドができません。
javaクラスではこのメソッドは使用できないのでしょうか。

エラー内容

エラー: シンボルを見つけられません
シンボル: メソッド getSharedPreferences(String,int)
場所: クラス TrimView

MainActivity.kt

kotlin

1... 2class MainActivity : AppCompatActivity(), CvCameraViewListener2, SensorEventListener { 3 ... 4 lateinit var HSVsharedPref : SharedPreferences 5 lateinit var TrimsharedPref : SharedPreferences 6 ... 7 override fun onCreate(savedInstanceState: Bundle?) { 8 ... 9 // プリファレンスの設定 10 HSVsharedPref = getSharedPreferences(getString(R.string.preferences_key), Context.MODE_PRIVATE) // HSV保存用 11 TrimsharedPref = getSharedPreferences(getString(R.string.preferences_key), Context.MODE_PRIVATE) // 矩形保存用 12 ... 13 // 非同期でプリファレンスに値を保存 14 HSVsharedPref.edit().putString("value_hue_low", lower_hue.toString()).apply() 15 HSVsharedPref.edit().putString("value_hue_high", higher_hue.toString()).apply() 16 ... 17 // HSVプリファレンスに保存されているデータを取得 18 val savedHueLow = HSVsharedPref.getString("value_hue_low", "100") 19 val savedHueHigh = HSVsharedPref.getString("value_hue_high", "155") 20 } 21 ... 22}
TrimView.java

java

1package jp.gr.java_conf.coskx.fishinggame; 2import ... 3 4public class TrimView extends AppCompatImageView { 5 TextView rectLeft = (TextView) this.findViewById(R.id.txtRectLeft); 6 TextView rectTop = (TextView) this.findViewById(R.id.txtRectTop); 7 TextView rectRight = (TextView) this.findViewById(R.id.txtRectRight); 8 TextView rectBottom = (TextView) this.findViewById(R.id.txtRectBottom); 9 ... 10 11 // インタフェースの作成 12 interface OnActionUpListener { 13 void onActionUp(Rect rect); 14 } 15 16 // リスナーを定義 17 void setOnActionUpListener(OnActionUpListener listener) { 18 this.onActionUpListener = listener; 19 } 20 21 // 矩形の設定 22 public TrimView(Context context, AttributeSet attrs) { 23 super(context, attrs); 24 rect = new Rect(); 25 paint = new Paint(); 26 paint.setColor(0xFFFF0000); // 線の色 27 paint.setStyle(Paint.Style.STROKE); 28 paint.setStrokeJoin(Paint.Join.ROUND); 29 paint.setStrokeCap(Paint.Cap.ROUND); 30 paint.setStrokeWidth(strokeWidth); // 線の太さ 31 32 // プリファレンスから値を読み込んで矩形のサイズを更新 33 dataStore = getSharedPreferences("prefHSV", MODE_PRIVATE); 34 // String str = dataStore.getString("key", "Nothing"); 35 36 // 矩形のサイズ設定 37 rect.set(firstX, firstY, rect.left + rectW, rect.top + rectH); 38 } 39 40 @Override 41 protected void onDraw(@NonNull Canvas canvas) { 42 canvas.drawRect(rect, paint); // 矩形を描画 43 // キャンバスのサイズ取得 44 canvasW = getWidth(); 45 canvasH = getHeight(); 46 } 47 48 @Override 49 public boolean performClick() { 50 super.performClick(); 51 return true; 52 } 53 54 @Override 55 @SuppressLint("ClickableViewAccessibility") 56 public boolean onTouchEvent(@NonNull MotionEvent event) { 57 // 矩形を操作した際の処理 58 ... 59 } 60 return true; 61 } 62}
該当箇所
// プリファレンスから値を読み込んで矩形のサイズを更新 dataStore = getSharedPreferences("prefHSV", MODE_PRIVATE); // String str = dataStore.getString("key", "Nothing");

参考サイト1
参考サイト2

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

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

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

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

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

guest

回答1

0

getSharedPreference は Context のメソッドです。
AppCompatActivity は Context ですが AppCompatImageView は Context ではありません。

投稿2022/06/29 14:29

編集2022/06/29 16:47
jimbe

総合スコア12512

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

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

m-mega

2022/06/29 14:42

ご回答いただきありがとうございます。 なるほど、仕様をしっかり把握できておりませんでした。 つまり、AppCompatImageViewからプリファレンスを参照する場合は、何か別の方法があるということですね。
jimbe

2022/06/29 16:53 編集

AppCompatImageViewから…というよりは、TrimView からですね。 (SharedPreference を必要としているのは AppCompatImageView クラスでは無くお作りになっている TrimView クラスですので。 ) ご自身のコードを視点を変えて見てみてください。 getSharedPreference している TrimView のコンストラクタには、パラメータとして Context が来ています。 これが MainActivity であれば context.getSharedPreference(~) と書けるのではないでしょうか。
jimbe

2022/06/29 18:45

個人的には、 View が具体的なクラスを使って直接データの読み込み(保存もあるのでしょうか)を行うのは、やり過ぎと思います。 このような場合は Preference とのやり取りは View を管理する側 (Activity か Fragment) が行い、 View はセッターで受け取ったり、 View の任意のタイミングでプロパティチェンジリスナーを実行(管理側が予め"保存するコード"を登録)、もしくは管理側が任意のタイミングでゲッターで取り出して保存したりといった形にするでしょう。
m-mega

2022/06/30 04:09 編集

ご回答いただきありがとうございます。 ご指摘の通り、context.getSharedPreferenceによって、プリファレンスに保存された値を参照することができました。 2つ目のコメントでご指摘いただいておりますViewでの処理の変更は引き続き検討いたします。 このような処理をViewで行わせることのデメリットとしては、記述が煩雑になり管理がしづらくなるということでしょうか。
jimbe

2022/06/30 05:35

例えば、何方かのライブラリを使うとして「このビューは『j:/jimbe/abc.data』というファイルに設定を書き込み、起動時に読み込みます。それが出来なかったらエラーとなります。」というモノだったら、使い易いと思われるでしょうか。データの設定や取り出しが出来るとしても、それを何処にどの様な形で保存するかは、ビューの機能自体とはほぼ関係無いのではないでしょうか。(勿論例外はあります。)
m-mega

2022/06/30 06:54

なるほど。理解しました。丁寧にご回答いただきありがとうございます。 できるかぎり分かりやすいコードにできるように努力します!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問