我有一些变量要传递给我的下一个活动,但我无法想办法。
我的变数是:
JSONObject jsonObj = jsonArray.getJSONObject(i);
String propId = jsonObj.getString("id");
Log.i("Value id", propId);
String propCity = jsonObj.getString("city");
Log.i("Value city", propCity);
String propPlace = jsonObj.getString("place");
Log.i("Value place", propPlace);
String propStation = jsonObj.getString("station");
Log.i("Value station", propStation);
我用来获取它们的代码是:
Bundle extras = new Bundle();
extras.putString("id", propId);
extras.putString("city", propCity);
extras.putString("place", propPlace);
extras.putString("station", propStation);
有人可以帮我这个吗?
答案 0 :(得分:5)
您发布的代码是将它们写入Bundle,在您使用.putExtras()
写入Bundle后将您的包放入Intent
。
intent.putExtras(bundle);
示例:
Intent intent = new Intent(this, YourClass.class);
Bundle extras = new Bundle();
extras.putString("id", propId);
extras.putString("city", propCity);
extras.putString("place", propPlace);
extras.putString("station", propStation);
intent.putExtras(bundle);
startActivity(intent);
要在您的活动中阅读,请使用getExtras()
获取您传递给它的Bundle
,然后使用getString
/ getXXX
。
无论如何,您可以避免创建Bundle
并直接使用Intent
的set方法,它们的工作方式相同。
所以它会是:
Intent intent = new Intent(this, YourClass.class);
intent.putExtra("id", propId);
intent.putExtra("city", propCity);
intent.putExtra("place", propPlace);
intent.putExtra("station", propStation);
startActivity(intent);
答案 1 :(得分:2)
请改用Parcelables。 Here你有一个例子。
Parcelable是Android用于在活动之间进行通信的方式。要使用它,您必须创建一个实现Parcelable的类:
import android.
public class MyClass implements Parcelable
{
private string userName;
private int userAge;
public void SetUserName(string name) { userName = name; }
public string GetUserName() { return userName; }
public void SetUserAge(int age) { userAge = age; }
public int GetUserAge() { return age; }
// Some inner stuff
}
这个类需要实现WriteToParcel
方法,该方法将所有需要的信息写入包中:
@Override
public void WriteToParcel(Parcel dest, int flags)
{
dest.writeString(userName);
dest.writeInt(userAge);
// Since here you wrote into dest Parcel your string and int
}
为了能够从该包中读取,您需要执行以下操作:
public static final Parcelable.Creator<ExtractionConfig> CREATOR = new Creator<ExtractionConfig>() {
{
@Override
public MyClass [] newArray(int size) {
return new MyClass [size];
}
@Override
public MyClass createFromParcel(Parcel source) {
MyClass toReturn = new MyClass ();
toReturn.setUserName(source.readString());
toReturn.setUserAge(source.readInt());
return toReturn;
}
};
重要提示:writeToParcel订单必须与createFromParcel订单相同!!
如何在活动之间传递Parcel:
当您从另一个活动中启动活动时,您会拨打Intent
。您可以通过创建Parcelable类的对象并填充它来添加额外信息:
MyClass myclass = new MyClass();
myclass.setUserName("first user");
myclass.setUserAge(20);
然后将额外的信息放入你的意图:
在您的主要活动中:
Intent intent = new Intent(this, ActivityToBeCalled.class);
intent.putExtra(myclass, "extraclass"); // look at this string, this one will be your identifier to receive the extra information
startActivity(intent);
从被调用类中的intent读取信息:
在您的第二项活动中:
Intent intent = getIntent();
MyClass myReceivedClass = intent.getParcelableExtra("extraclass"); // here you use your string identifier defined in putExtra(...);
现在,在myReceivedClass
中,您应该拥有所有MyClass
信息。
答案 2 :(得分:1)
您不需要使用Bundle
。您可以使用putExtra()
类Intent
将数据传递到下一个Activity
,如下所示...
Intent intent = new Intent(CurrentActivity.this, NextActivity.class);
intent.putExtra("id", propId);
intent.putExtra("city", propCity);
intent.putExtra("place", propPlace);
intent.putExtra("place", propPlace);
startActivity(intent);
答案 3 :(得分:0)
使用意图。
Intent intent = new Intent(context,target_activity.class);
intent.putExtra("name",bundle);
startActivity(intent);
对于小型和典型数据,它足够好。对于发送对象,请使用parcelable。
答案 4 :(得分:0)
不知道之前是如何处理的,但现在你可以使用intent.putExtra("extra id", obj)
其中obj是任何Serializable实现对象。使用intent.getSerializableExtra("extra id")
,您可以获得一个可以投射到最初使用的类的对象。