Java 如何将整个类传递到活动中

Java 如何将整个类传递到活动中,java,android,android-intent,bundle,android-fragmentactivity,Java,Android,Android Intent,Bundle,Android Fragmentactivity,我有这门课: 公共天气{ 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; priv

我有这门课:

公共天气{

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


}
public Today=new Today(){};
公共明天=新的明天(){};
public DayAfter DayAfter=新的DayAfter(){};
public dayAfter dayAfter=新的dayAfter(){};
今天的公开课{
私人字符串mToday;
私人内特姆托代小时;
private final ArrayList arrTime1=新的ArrayList();
私有最终ArrayList arrWind_Speed1=新ArrayList();
私有最终ArrayList arrCloud_Amount1=新ArrayList();
private final ArrayList arrPop1=新的ArrayList();
私有最终ArrayList arrWind_Gust1=新ArrayList();
私有最终ArrayList arrTemperature1=新ArrayList();
私有最终ArrayList arrWind_方向1=新ArrayList();
private final ArrayList arrWeather1=新ArrayList();
public void putTodayHours(int值){mTodayHours=value;}
public int getTodayHours(){return mTodayHours;}
公共字符串getToday(){return mToday;}
公共void putToday(字符串键、字符串值){
开关(钥匙){
案例“今天”:mToday=值;中断;
案例“时间”:arrTime1.增加(值);中断;
案例“风速”:arrvind_speed 1.增加(值);中断;
案例“云量”:arrCloud\u Amount1.增加(值);中断;
案例“pop”:arrPop1.添加(值);中断;
案例“阵风”:arrWind\u gust 1.增加(值);中断;
案例“温度”:arrTemperature1.添加(值);中断;
案例“风向”:风向1.增加(值);中断;
案例“天气”:arrWeather1.增加(值);中断;
}
}
公共ArrayList getToday(字符串键){
开关(钥匙){
案例“时间”:返回arrTime1;
案例“风速”:返回风速1;
案例“云金额”:返回云金额1;
案例“pop”:返回arrPop1;
案例“阵风”:返回阵风1;
案例“温度”:返回温度1;
案例“风向”:返回风向1;
案例“天气”:返回arrWeather1;
}
返回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);
公共类JSONWeatherTask扩展了AsyncTask{
@凌驾
受保护的天气背景(字符串…参数){
字符串数据=((新的WeatherHttpClient()).getWeatherData(参数[0],参数[1]);
天气预报=新天气();
试一试{
forecast=JSONWeatherParser.getWeather(数据);
}捕获(JSONException e){
e、 printStackTrace();
}
收益预测;
}
@凌驾
执行后受保护的空(天气){
super.onPostExecute(天气);
Intent Intent=新的Intent(getApplicationContext(),FragmentStatePagerSupportActivity.class);
星触觉(意向);
在PostExecute上调用另一个活动类(FragmentPagerSupportActivity)。 问题是:如何将已经存在的“天气”传递给活动?
谢谢。

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

 String serializedObject = new Gson().toJson(forecast);
并带着额外的意图通过它:

intent.putExtra("weatherObject", serializedObject);
然后在接收活动中反序列化对象:

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

        forecast = new Gson().fromJson(serializedObject , typeOfT);
typeOfT=newtypetoken(){
}.getType();
forecast=new Gson().fromJson(serializedObject,typeOfT);

您想要的是将天气对象传输到活动。您可以使用它。

尝试上述建议后,我遇到了几个问题,代码扩展超出了我的能力。我决定在原始活动中放置以下内部类,而不是可包裹或序列化的:

static public class ManageData {
    static Weather weather;
    static public Weather getData(){
        return weather;
    }
    static public void putData(Weather forecast) {
        weather = forecast;

    }
}
Weather forecast = splash_activity.ManageData.getData();
然后在接收活动中:

static public class ManageData {
    static Weather weather;
    static public Weather getData(){
        return weather;
    }
    static public void putData(Weather forecast) {
        weather = forecast;

    }
}
Weather forecast = splash_activity.ManageData.getData();
如果我用这种方法射中了我的脚,会有人告诉我吗? 谢谢