Android ActivityForResultからParcelableクラスを送信してNULLを受け取ります -- java フィールド と android フィールド と android-intent フィールド と android-activity フィールド と parcelable フィールド 関連 問題

I send an parcelable class from Android ActivityForResult and receive null












0
vote

問題

日本語

一般的な質問をごめんなさい。しかし、私はすべてをチェックしてエラーを見つけることができません。アクティビティからクラスを送信してNULLを受け取ります。インストールを作成した後の確認は正しいです(私のコードのReadbackci)。解決策を見つけてください。

私のクラスのティーンティム

<事前> <コード> import android.os.Parcel; import android.os.Parcelable; public class CityItem implements Parcelable { public static final String ITEM_SEP = System.getProperty("line.separator"); public static final String NAME = "City"; public static final String REGNAME = "Region"; public static final String CODE = "Code"; public static final String SEARCH = "Search"; private String mName; private String mRegName; private String mSearch; private String mCode; public CityItem(String name, String regname, String code, String search) { mName = name; mRegName = regname; mSearch = search; mCode = code; } private CityItem(Parcel in) { in.readParcelable(CityItem.class.getClassLoader()); setName(in.readString()); setRegName(in.readString()); setCode(in.readString()); setSearch(in.readString()); } public String getName() { return mName; } public void setName(String name) { mName = name; } public String getRegName() { return mRegName; } public void setRegName(String regname) { mRegName = regname; } public String getCode() { return mCode; } public void setCode(String code) { mRegName = code; } public String getSearch() { return mSearch; } public void setSearch(String search) { mRegName = search; } public String toString() { return mName + ITEM_SEP + mRegName + ITEM_SEP + mCode + ITEM_SEP + mSearch; } public String toLog() { return "Name:" + mName + ITEM_SEP + "Region:" + mRegName + ITEM_SEP + "Code:" + mCode + ITEM_SEP + "Search:" + mSearch + " "; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeStringArray(new String[] { mName, mRegName, mCode, mSearch }); } public static final Parcelable.Creator<CityItem> CREATOR = new Parcelable.Creator<CityItem>() { @Override public CityItem createFromParcel(Parcel source) { return new CityItem(source); } @Override public CityItem[] newArray(int size) { return new CityItem[size]; } };

}

2回目の活動

<事前> <コード> public void enterClicked(CityItem str) { Log.i(TAG,"Entered enterClicked()"); Intent result = new Intent(); result.putExtra("TAG", str); CityItem readbackCi = result.getParcelableExtra("TAG"); Log.d(TAG, " " + readbackCi.NAME); setResult(this.RESULT_OK, result); finish(); }

主な活動

<事前> <コード> import React from 'react'; const userInput = () => { return <input type="text" />; }; export default userInput; 0
英語

Sorry for common question, but I check all and can't find error. I send class from Activity and receive NULL. Checking after creating Intent is correct (readbackCi in my code). Could you please help me find solution?

My class CityItem

import android.os.Parcel; import android.os.Parcelable;  public class CityItem implements Parcelable { public static final String ITEM_SEP = System.getProperty("line.separator"); public static final String NAME = "City"; public static final String REGNAME = "Region"; public static final String CODE = "Code"; public static final String SEARCH = "Search";  private String mName; private String mRegName; private String mSearch; private String mCode;  public CityItem(String name, String regname, String code, String search) {     mName = name;     mRegName = regname;     mSearch = search;     mCode = code; }  private CityItem(Parcel in) {     in.readParcelable(CityItem.class.getClassLoader());     setName(in.readString());     setRegName(in.readString());     setCode(in.readString());     setSearch(in.readString()); }  public String getName() {     return mName; }  public void setName(String name) {     mName = name; }  public String getRegName() {     return mRegName; }  public void setRegName(String regname) {     mRegName = regname; }  public String getCode() {     return mCode; }  public void setCode(String code) {     mRegName = code; }  public String getSearch() {     return mSearch; }  public void setSearch(String search) {     mRegName = search; }  public String toString() {     return mName + ITEM_SEP + mRegName + ITEM_SEP + mCode + ITEM_SEP             + mSearch; }  public String toLog() {     return "Name:" + mName + ITEM_SEP + "Region:" + mRegName             + ITEM_SEP + "Code:" + mCode + ITEM_SEP + "Search:"             + mSearch + " "; }  @Override public int describeContents() {     return 0; }  @Override public void writeToParcel(Parcel dest, int flags) {     dest.writeStringArray(new String[] { mName, mRegName, mCode, mSearch }); }  public static final Parcelable.Creator<CityItem> CREATOR = new Parcelable.Creator<CityItem>() {     @Override     public CityItem createFromParcel(Parcel source) {             return new CityItem(source);         }     @Override     public CityItem[] newArray(int size) {         return new CityItem[size];     } }; 

}

Second activity

public void enterClicked(CityItem str) {       Log.i(TAG,"Entered enterClicked()");     Intent result = new Intent();     result.putExtra("TAG", str);     CityItem readbackCi = result.getParcelableExtra("TAG");     Log.d(TAG, "   " + readbackCi.NAME);     setResult(this.RESULT_OK, result);      finish(); } 

Main activity

    @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {     Log.i(TAG, "Entered onActivityResult()");     if(ADD_DERIVAL_REQUEST == requestCode && this.RESULT_OK == resultCode)     {         CityItem ci = (CityItem) getIntent().getParcelableExtra("TAG");         if (null != ci) {             EditText1.setText(ci.getName());                         }         return;     } else if (ADD_DERIVAL_REQUEST == requestCode && RESULT_CANCELED == resultCode)     {         return;     } } 
</div
              

回答リスト

1
 
vote
vote
ベストアンサー
 

結果を取得するには、 Intent data を使用する必要があります。

<コード> CityItem ci = (CityItem) data.getParcelableExtra("TAG");

<コード> class App extends Component(){}0 は、主な活動の開始に使用された意図を返し、それはあなたが興味のあるものではありません。

 

You need to use Intent data to get result back.

CityItem ci = (CityItem) data.getParcelableExtra("TAG");

getIntent() will return intent that was used for main activity start and it is not the one you are interested in.

</div
 
 
 
 
1
 
vote

あなたの居住活動の実装は正しくありません。これを確認してください:

<事前> <コード> class App extends Component(){}1

それ以外に、このアクティビティを開始するために使用されたものである @Table(name = "Customer", catalog = "")13 の代わりに「データ」<コード> class App extends Component(){}2 を使用する必要があります。

 

The implementation for your parcelable class CityItem is not correct. Check this:

package com.mobgen.halo.android.sdk.generalcontent.business.parser;  import android.os.Parcel; import android.os.Parcelable;  public class CityItem implements Parcelable {     public static final String ITEM_SEP = System.getProperty("line.separator");     public static final String NAME = "City";     public static final String REGNAME = "Region";     public static final String CODE = "Code";     public static final String SEARCH = "Search";      private String mName;     private String mRegName;     private String mSearch;     private String mCode;      public CityItem(String name, String regname, String code, String search) {         mName = name;         mRegName = regname;         mSearch = search;         mCode = code;     }      public String getName() {         return mName;     }      public void setName(String name) {         mName = name;     }      public String getRegName() {         return mRegName;     }      public void setRegName(String regname) {         mRegName = regname;     }      public String getCode() {         return mCode;     }      public void setCode(String code) {         mRegName = code;     }      public String getSearch() {         return mSearch;     }      public void setSearch(String search) {         mRegName = search;     }      public String toString() {         return mName + ITEM_SEP + mRegName + ITEM_SEP + mCode + ITEM_SEP + mSearch;     }      public String toLog() {         return "Name:" + mName + ITEM_SEP + "Region:" + mRegName                 + ITEM_SEP + "Code:" + mCode + ITEM_SEP + "Search:"                 + mSearch + " ";     }      @Override     public int describeContents() {         return 0;     }      @Override     public void writeToParcel(Parcel dest, int flags) {         dest.writeString(this.mName);         dest.writeString(this.mRegName);         dest.writeString(this.mSearch);         dest.writeString(this.mCode);     }      protected CityItem(Parcel in) {         this.mName = in.readString();         this.mRegName = in.readString();         this.mSearch = in.readString();         this.mCode = in.readString();     }      public static final Creator<CityItem> CREATOR = new Creator<CityItem>() {         public CityItem createFromParcel(Parcel source) {             return new CityItem(source);         }          public CityItem[] newArray(int size) {             return new CityItem[size];         }     }; } 

Beside that, you have to use the "data" Intent instead of the one from getIntent() which is the one that was used to start this activity.

</div
 
 

関連する質問

-1  入れ子のクラスの区画化可能な[重複]  ( Nested class parcelable ) 
この質問はすでにここで回答を持っています どのようにJavaクラスにはarg constructorが含まれていない可能性がありますか? (8回答) ...

0  Androidの小包からカスタムデータ型を開梱するエラー  ( Error with unpacking a custom data type from a parcel in android ) 
小包に書かれた後のカスタムデータ型の配列を再現するというこの問題はあります。 Parayerwearはそのようなものとして宣言されています: <事前> <コード> private Wearable playerWear[] = new Wearable[5]...

1  パーセル可能な実装が機能していません。アプリはまだデバイスの回転にネットワーク呼び出しを行います  ( Parcelable implementation not working app still makes network calls on device r ) 
私はネットワークをAPIに呼び出すフラグメントを持っています。私のモデルは、デバイスの回転時に状態を保存するために Parcelable を実装します。メソッドを実装しましたが、デバイスが回転するとネットワーク要求が発生します。どういうわけか区画の実装は機能し...

34  classNotFoundException unmarshallingのとき:Android.Support.v4.View.ViewPager $ SAVEDSTATE  ( Classnotfoundexception when unmarshalling android support v4 view viewpagersav ) 
私のAndroidクラッシュレポートの次のエラーを見ています: <事前> <コード> android.os.BadParcelableException: ClassNotFoundException when unmarshalling: android.s...

0  ArrayAdapter上のフィルタを使用して複数のTextViewを使用したカスタムListViewのフィルタリング<T Tを実装する>  ( Filtering custom listview with multiple textviews using a filter on an arrayadap ) 
クラス<コード> class CustomAdapter extends ArrayAdapter<CustomListItem> は、 CustomListItem implements Parcelable 、3つの文字列変数(<コード> String a...

1  ArrayList <文字列>アクティビティからフラグメントへの値を渡す  ( Parcelable with arrayliststring passing value from activity to fragment androi ) 
フラグメントからアクティビティにArrayList値を送信する必要があります。私はいくつかのコードで試しましたが、戻り値はnullです。 ArrayListを渡すための私のコード: <事前> <コード> Intent intent = getIntent()...

36  Androidユニットテスト:バンドル/ Pargelable  ( Android unit testing bundle parcelable ) 
どのように単位を区画しますか。私はParcelableクラスを作成し、このユニットテストを書きました <事前> <コード> TestClass test = new TestClass(); Bundle bundle = new Bundle(); bund...

69  Android:Pargelableオブジェクトを意図に合格し、BundleのGetParulElableメソッドを使用する方法は?  ( Android how to pass parcelable object to intent and use getparcelable method of ) 
バンドルに function getSelectedLayersIdx(){ var selectedLayers = new Array; var ref = new ActionReference(); ref.putEnumer...

0  アクティビティの起動時にウィジェットクラッシュからの区画的な追加の追加のエクストメントを送信する  ( Sending intent with a parcelable extra from widget crashes on activity startup ) 
ボタンが少ないウィジェットがあります。 押すと、各ボタンがマイメインアプリを開き、別のオブジェクトを送信します。 オブジェクトは、区画内のエクストラーとして渡されます。 しかし、アクティビティがエクストラにアクセスしようとするメソッドを起動した場合(この場合は...

1  ArrayListの<ArrayListを<Integer型>> parcelableを作ります  ( Make arraylistarraylistinteger parcelable ) 
私は、次のクラスparcelableを作成しようとしています。通常、私はparcelablerのウェブサイトを使用することにより、これを行います。しかし、ウェブサイトは、ArrayListの&GTに問題があるようです。部。誰もがそれを正しく行う方法を知っていま...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有