簡體   English   中英

如何將NameValuePair傳遞給android中的另一個活動?

[英]How to pass NameValuePair to another activity in android?

我的申請中有三個活動。 A -> B -> C

Activity A :我從用戶那里獲取了一些數據,並添加了這些數據NameValuePair。 我將在Activity B執行其他一些操作。 之后,在Activity C ,我要http發布NameValuePair。 但是,我不能將NameValuePair傳遞給另一個類。

我嘗試了以下解決方案: 解決方案

Activity A

 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:出現錯誤Activity A:

Error:(57, 94) error: incompatible types: ArrayList<NameValuePair> cannot be converted to ArrayList<? extends Parcelable>

如何通過NameValuePair進行其他活動?

對於此問題,您必須進行單例課程

那是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);

並在需要的地方獲取數據

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

我希望這會起作用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM