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

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

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

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

Android

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

Q&A

解決済

オブジェクトを次の画面に渡したい

syosinsya109
syosinsya109

総合スコア36

Java

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

Android

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

1回答

0グッド

0クリップ

277閲覧

投稿2022/11/17 10:59

編集2022/11/17 13:19

前提

android studioについて質問します。
intentを使用してアクセサメソッドで格納しているデータ(オブジェクト)を次の画面に渡したいと思っています。ですが、ネットで調べて同じやり方をしているにもかかわらずエラーが出てきます。どのようにしたらエラーがなく次の画面に送ることができますか

実現したいこと

オブジェクトを次の画面に渡したい

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

Cannot resolve method 'putExtra(java.lang.String, android.sample.User)'

該当のソースコード

java(Activity)

1 _helper = new DatabaseHelper(LoginActivity.this); 2 SQLiteDatabase db = _helper.getWritableDatabase(); 3 4 EditText etUserId = findViewById(R.id.etUserId); 5 String strUserId = etUserId.getText().toString(); 6 User result = DAO.findByPK(db, strUserId); 7 8 Intent intent = new Intent(LoginActivity.this, MainActivity.class); 9 intent.putExtra("resule", result); //ここでエラーが出てきた 10 startActivity(intent);

java(findByPK)

1 String sql = "SELECT * FROM user WHERE Id = '" + id + "'; 2 Cursor cursor = db.rawQuery(sql, null); 3 User result = null; 4 if(cursor.moveToFirst()){ 5 int name = cursor.getColumnIndex("name"); 6 String strName = cursor.getString(name); 7 int id = cursor.getColumnIndex("id"); 8 String strId = cursor.getString(id); 9 10 result = new User(); 11 result.setId(strId); 12 result.setName(strName); 13 }

java(User)

1public class User { 2 /** 3 * ユーザー名 4 */ 5 private String _id; 6 private String _name; 7 8 //以下アクセサメソッド 9 10 public String getId(){ 11 return _id; 12 } 13 public void setId(String id){ 14 _id = id; 15 } 16 public String getName(){ 17 return _name; 18 } 19 public void setName(String name){ 20 _name = name; 21 } 22}

試したこと

ネットで調べても同じことしか出てこなかった

以下のような質問にはグッドを送りましょう

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

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

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

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

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

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

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

適切な質問に修正を依頼しましょう。

jimbe

2022/11/17 12:46

>android studioについて質問 良く間違えられますが、質問されているのは android で動作する java コードについてで、 android studio はその作成のための単なる道具です。 ですのでタグも android studio では無く android が適切と思います。
jimbe

2022/11/17 14:40 編集

>String sql = "SELECT * FROM user WHERE Id = '" + id + "'; ユーザの入力から直接 SQL を文字列編集してはいけません。 https://web-scan.jp/article/1868/ rawQuery を用いるなら selectionArgs を指定してプレースフォルダを使ってドライバにエスケープ・クォート処理をさせてください。

回答1

1

ベストアンサー

エラーメッセージの通り、 Intent に putExtra(String, User) というメソッドはありません。
任意のオブジェクトを渡す場合は putExtra(String, Parcelable)putExtra(String, Serializable) を利用することになります。

例えば User クラスに Serializable を implements しては如何でしょうか。


MainActivity.java

java

1import androidx.appcompat.app.AppCompatActivity; 2 3import android.content.Intent; 4import android.os.Bundle; 5import android.widget.Button; 6 7import java.io.Serializable; 8 9public class MainActivity extends AppCompatActivity { 10 public static final String EXTRA_USER = "user"; 11 12 @Override 13 protected void onCreate(Bundle savedInstanceState) { 14 super.onCreate(savedInstanceState); 15 setContentView(R.layout.activity_main); 16 17 Button button = findViewById(R.id.button); 18 button.setOnClickListener(v -> { 19 User user = new User("id1", "name2"); 20 Intent intent = new Intent(this, SubActivity.class); 21 intent.putExtra(EXTRA_USER, user); 22 startActivity(intent); 23 }); 24 } 25} 26 27class User implements Serializable { 28 final String id, name; 29 User(String id, String name) { 30 this.id = id; 31 this.name = name; 32 } 33 @Override 34 public String toString() { 35 return getClass().getSimpleName()+"[id="+id+", name="+name+"]"; 36 } 37}

res/layout/activity_main.xml

xml

1<?xml version="1.0" encoding="utf-8"?> 2<androidx.constraintlayout.widget.ConstraintLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 xmlns:app="http://schemas.android.com/apk/res-auto" 5 xmlns:tools="http://schemas.android.com/tools" 6 android:layout_width="match_parent" 7 android:layout_height="match_parent" 8 tools:context=".MainActivity"> 9 10 <Button 11 android:id="@+id/button" 12 android:layout_width="wrap_content" 13 android:layout_height="wrap_content" 14 android:text="Hello World!" 15 app:layout_constraintBottom_toBottomOf="parent" 16 app:layout_constraintEnd_toEndOf="parent" 17 app:layout_constraintStart_toStartOf="parent" 18 app:layout_constraintTop_toTopOf="parent" /> 19 20</androidx.constraintlayout.widget.ConstraintLayout>

SubActivity.java

java

1import androidx.appcompat.app.AppCompatActivity; 2 3import android.content.Intent; 4import android.os.Bundle; 5import android.widget.TextView; 6 7public class SubActivity extends AppCompatActivity { 8 @Override 9 protected void onCreate(Bundle savedInstanceState) { 10 super.onCreate(savedInstanceState); 11 setContentView(R.layout.activity_sub); 12 13 Intent intent = getIntent(); 14 User user = (User)intent.getSerializableExtra(MainActivity.EXTRA_USER); 15 16 TextView textView = findViewById(R.id.text); 17 textView.setText("" + user); 18 } 19}

res/layout/activity_sub.xml

xml

1<?xml version="1.0" encoding="utf-8"?> 2<androidx.constraintlayout.widget.ConstraintLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 xmlns:app="http://schemas.android.com/apk/res-auto" 5 xmlns:tools="http://schemas.android.com/tools" 6 android:layout_width="match_parent" 7 android:layout_height="match_parent" 8 android:background="#f0f000" 9 tools:context=".SubActivity"> 10 11 <TextView 12 android:id="@+id/text" 13 android:layout_width="wrap_content" 14 android:layout_height="wrap_content" 15 android:text="Sub World!" 16 app:layout_constraintBottom_toBottomOf="parent" 17 app:layout_constraintEnd_toEndOf="parent" 18 app:layout_constraintStart_toStartOf="parent" 19 app:layout_constraintTop_toTopOf="parent" /> 20 21</androidx.constraintlayout.widget.ConstraintLayout>

AndroidManifest.xml: Application タグ内アクティビティ定義

xml

1 <activity 2 android:name=".MainActivity" 3 android:exported="true"> 4 <intent-filter> 5 <action android:name="android.intent.action.MAIN" /> 6 7 <category android:name="android.intent.category.LAUNCHER" /> 8 </intent-filter> 9 </activity> 10 <activity 11 android:name=".SubActivity" 12 android:exported="false" 13 android:parentActivityName=".MainActivity"> 14 <meta-data 15 android:name="android.support.PARENT_ACTIVITY" 16 android:value=".MainActivity" /> 17 </activity>

実行時スクリーンショット ボタン押下時スクリーンショット

投稿2022/11/17 12:39

編集2022/11/17 14:13
jimbe

総合スコア10817

spoofy_dragon👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

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

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

このような回答には修正を依頼しましょう。

回答へのコメント

syosinsya109

2022/11/17 13:18

回答ありがとうございます。 修正したら今度は以下のようなエラーが出てきました。エラーカ所は質問内容と同じところです。 intent.putExtra("resule", (Parcelable) result);にしてもintent.putExtra("resule", (Serializable) result);にしても変わりませんでした。 E/AndroidRuntime: FATAL EXCEPTION: main Process: android.sampleapplication, PID: 2907 java.lang.IllegalStateException: Could not execute method for android:onClick
jimbe

2022/11/17 14:10 編集

put 側で細工したところで、get 側で User がただの Object だとバレますので意味がありません。 User のクラス定義を修正してください。 新たなメッセージでは何が原因と言われているのかもスタックトレースから調べてください。

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

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

Java

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

Android

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