【问题标题】:How to pass NameValuePair to another activity in android?如何将 NameValuePair 传递给 android 中的另一个活动?
【发布时间】:2017-11-24 01:47:52
【问题描述】:

我的应用程序中有三个活动。 A->B->C

Activity A:我从用户那里获取一些数据并添加这些数据NameValuePair。 我在Activity B 做了一些其他的操作。在Activity C 之后,我想http 发布NameValuePair。但是,我不能将 NameValuePair 一个类传递给另一个类。

我试过这个解决方案:solution

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: 出现错误

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

如何将 NameValuePair 传递给另一个活动?

【问题讨论】:

  • ArrayList&lt;NameValuePair&gt;更改为ArrayList&lt;BasicNameValuePair&gt;
  • 我收到一个错误:Wrong 2nd argument type. Found: 'java.util.ArrayList&lt;org.apache.http.message.BasicNameValuePair&gt;', required: 'java.util.ArrayList&lt;? extends android.os.Parcelable&gt; @Enzokie
  • @user8654574 使用您的 BasicNameValueP‌​air 类的完全限定名,即类名及其包名。
  • 对不起,我听不懂你。 @Waqas
  • ArrayList&lt;BasicNameValuePair&gt;更改为ArrayList&lt;package-name.BasicNameValuePair&gt;

标签: java android basicnamevaluepair


【解决方案1】:

对于这个问题, 你必须做单例类

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

我希望这会奏效

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 1970-01-01
    相关资源
    最近更新 更多