使用putExtra传递多个变量

时间:2014-04-07 16:45:41

标签: android variables android-activity

我有一些变量要传递给我的下一个活动,但我无法想办法。

我的变数是:

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

有人可以帮我这个吗?

5 个答案:

答案 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)

请改用ParcelablesHere你有一个例子。

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"),您可以获得一个可以投射到最初使用的类的对象。