如何将整个 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();
并且有效。有知识的人会让我知道我是否用这种方法射击我的脚?
谢谢
我有这个 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 或 Serializedstatic 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();
并且有效。有知识的人会让我知道我是否用这种方法射击我的脚? 谢谢