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

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

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

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

Android

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

Q&A

解決済

1回答

530閲覧

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

syosinsya109

総合スコア41

Java

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

Android

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

0グッド

0クリップ

投稿2022/11/17 10:59

編集2022/11/17 23:40

前提

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}

試したこと

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

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

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

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

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

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

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 を指定してプレースフォルダを使ってドライバにエスケープ・クォート処理をさせてください。
guest

回答1

0

ベストアンサー

エラーメッセージの通り、 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

総合スコア12543

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

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

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 のクラス定義を修正してください。 新たなメッセージでは何が原因と言われているのかもスタックトレースから調べてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問