2017-11-24 7 views
1

私のアプリケーションには3つのアクティビティがあります。 A->B->CNameValuePairをandroidの別のアクティビティに渡すにはどうすればいいですか?

Activity Aでは:私は、ユーザーからいくつかのデータを取得し、それらのデータのNameValuePairを追加しています。 Activity Bでいくつかの操作を行います。その後、Activity Cで、httpをNameValuePairに投稿します。しかし、NameValuePairクラスを別のクラスに渡すことはできません。

私は、このソリューションを試してみました:Activity Asolution

ArrayList<NameValuePair> nameValuePairs = new ArrayList<>(); 
nameValuePairs.add(new BasicNameValuePair("username", username)); 
nameValuePairs.add(new BasicNameValuePair("name", name)); 

Button button = (Button) findViewById(R.id.button); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent intent = new Intent(MainActivity.this,Main2Activity.class); 
       intent.putParcelableArrayListExtra ("nvp", (ArrayList<? extends Parcelable>) nameValuePairs); 
       startActivity(intent); 
      } 
    }); 

BasicNameValuePair.java

public class BasicNameValuePair implements Parcelable { 
    private int mData; 

    public int describeContents() { 
     return 0; 
    } 

    public void writeToParcel(Parcel out, int flags) { 
     out.writeInt(mData); 
    } 

    public static final Parcelable.Creator<BasicNameValuePair> CREATOR 
      = new Parcelable.Creator<BasicNameValuePair>() { 
     public BasicNameValuePair createFromParcel(Parcel in) { 
      return new BasicNameValuePair(in); 
     } 

     public BasicNameValuePair[] newArray(int size) { 
      return new BasicNameValuePair[size]; 
     } 
    }; 

    private BasicNameValuePair(Parcel in) { 
     mData = in.readInt(); 
    } 
} 

私は私のActivity A:

Error:(57, 94) error: incompatible types: ArrayList<NameValuePair> cannot be converted to ArrayList<? extends Parcelable> 
でエラーが出ます210

別のアクティビティをNameValuePairに渡すにはどうすればよいですか?この問題については

+0

変更 'のArrayList <のNameValuePair>'に 'のArrayList ' – Enzokie

+0

を働くことを願っています: '間違った第二引数の型を。見つかった: 'java.util.ArrayList '、必須: 'java.util.ArrayList <? android.os.Parcelable> '@Enzokie – user8654574

+0

@ user8654574クラス名である' BasicNameValueP air'クラスの完全修飾名をパッケージ名とともに使用します。 – Waqas

答えて

0

、 あなたは DataHolderクラスであるシングルトンクラス

public class DataHolder { 

    public static final String TAG = "DataHolder"; 

    private static DataHolder mDataHolder; 

    private ArrayList<NameValuePair> nameValuePairs; 


    private DataHolder() { 

    } 

    /** 
    * @return the DataHolder object. (This method returns always same object because of DataHolder is a Singleton Class.) 
    */ 
    public static synchronized DataHolder getInstance() { 
     if (null == mDataHolder) { 
      mDataHolder = new DataHolder(); 
     } 
     return mDataHolder; 
    } 


    public ArrayList<NameValuePair> getNameValuePairs() { 
     return nameValuePairs; 
    } 

    public void setNameValuePairs(ArrayList<NameValuePair> nameValuePairs) { 
     this.nameValuePairs = nameValuePairs; 
    } 
} 

を作成し、その後、セット用のコードの下にデータ

ArrayList<NameValuePair> nameValuePairs = new ArrayList<>(); 
nameValuePairs.add(new BasicNameValuePair("username", username)); 
nameValuePairs.add(new BasicNameValuePair("name", name)); 
DataHolder dataHolder = DataHolder.getInstance(); 
dataHolder.setNameValuePairs(nameValuePairs); 

& GETデータを呼び出す必要がありますあなたが欲しい場所

ArrayList<NameValuePair> nameValuePairs; 
DataHolder dataHolder = DataHolder.getInstance(); 
nameValuePairs = dataHolder.getNameValuePairs(); 

私はエラーが出るこれは

関連する問題