如何将整个 class 传递到 Activity

How to pass an entire class into an Activity

我有这个 class:

public class天气{

public Today today = new Today(){};
public Tomorrow tomorrow = new Tomorrow(){};
public DayAfter dayafter = new DayAfter(){};
public DayDayAfter daydayafter = new DayDayAfter(){};

public class Today {
    private String mToday;
    private int mTodayHours;
    private final ArrayList<String> arrTime1 = new ArrayList<String>();
    private final ArrayList<String> arrWind_Speed1 = new ArrayList<String>();
    private final ArrayList<String> arrCloud_Amount1 = new ArrayList<String>();
    private final ArrayList<String> arrPop1 = new ArrayList<String>();
    private final ArrayList<String> arrWind_Gust1 = new ArrayList<String>();
    private final ArrayList<String> arrTemperature1 = new ArrayList<String>();
    private final ArrayList<String> arrWind_Direction1 = new ArrayList<String>();
    private final ArrayList<String> arrWeather1 = new ArrayList<String>();

    public void putTodayHours(int value){ mTodayHours = value; }
    public int getTodayHours() {return mTodayHours;}
    public String getToday(){ return mToday;}

    public void putToday(String key, String value){
        switch (key) {
            case "today": mToday = value;break;
            case "time":arrTime1.add(value);break;
            case "wind_speed":arrWind_Speed1.add(value);break;
            case "cloud_amount":arrCloud_Amount1.add(value);break;
            case "pop":arrPop1.add(value);break;
            case "wind_gust":arrWind_Gust1.add(value);break;
            case "temperature":arrTemperature1.add(value);break;
            case "wind_direction":arrWind_Direction1.add(value);break;
            case "weather":arrWeather1.add(value);break;
        }
    }
    public ArrayList getToday(String key){
        switch (key){
            case "time": return arrTime1;
            case "wind_speed": return arrWind_Speed1;
            case "cloud_amount": return arrCloud_Amount1;
            case "pop": return arrPop1;
            case "wind_gust": return arrWind_Gust1;
            case "temperature": return arrTemperature1;
            case "wind_direction": return arrWind_Direction1;
            case "weather": return arrWeather1;
        }
        return null;
    }


}

等等... 通过此 AsyncTask 解析并填充:

public class JSONWeatherTask extends AsyncTask<String, Void, Weather> {

    @Override
    protected Weather doInBackground(String... params) {
        String data = ((new WeatherHttpClient()).getWeatherData(params[0], params[1]));
        Weather forecast = new Weather();
        try {
            forecast = JSONWeatherParser.getWeather(data);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return forecast;
    }
    @Override
    protected void onPostExecute(Weather weather){
        super.onPostExecute(weather);
        Intent intent = new Intent(getApplicationContext(),FragmentStatePagerSupportActivity.class);
        startActivity(intent);

在 PostExecute 上调用另一个 activity class (FragmentPagerSupportActivity)。 问题是:如何将已经填充的 "Weather weather" 传递给 activity? 谢谢

一个简单的方法是序列化对象,例如使用 Gson:

 String serializedObject = new Gson().toJson(forecast);

并附加意图传递它:

intent.putExtra("weatherObject", serializedObject);

然后在接收activity反序列化你的对象:

Type typeOfT = new TypeToken<forecast>() {
        }.getType();

        forecast = new Gson().fromJson(serializedObject , typeOfT);

您想要的是将天气对象传输到 activity。您可以为此使用 parcelable

在尝试了上述建议后,我遇到了几个问题,而且代码的扩展超出了我的能力范围。我决定将以下内部 class 放在原始 activity:

中,而不是 Parcelable 或 Serialized
static public class ManageData {
    static Weather weather;
    static public Weather getData(){
        return weather;
    }
    static public void putData(Weather forecast) {
        weather = forecast;

    }
}

然后在接收activity:

Weather forecast = splash_activity.ManageData.getData();

并且有效。有知识的人会让我知道我是否用这种方法射击我的脚? 谢谢