【问题标题】:How to pass an entire class into an Activity如何将整个类传递给 Activity
【发布时间】:2015-10-03 17:10:25
【问题描述】:

我有这门课:

公共类天气{

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 上调用另一个活动类 (FragmentPagerSupportActivity)。 问题是:如何将已经填充的“天气天气”传递给活动? 谢谢。

【问题讨论】:

    标签: java android android-intent bundle android-fragmentactivity


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      并以额外的意图传递它:

      intent.putExtra("weatherObject", serializedObject);
      

      然后在接收活动中反序列化您的对象:

      Type typeOfT = new TypeToken<forecast>() {
              }.getType();
      
              forecast = new Gson().fromJson(serializedObject , typeOfT);
      

      【讨论】:

        【解决方案3】:

        在尝试了上述建议后,我遇到了几个问题,并且代码超出了我的能力范围。我决定将以下内部类放在原始活动中,而不是 Parcelable 或 Serialized:

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

        而且它有效。如果我用这种方法射击我的脚,有知识的人会告诉我吗? 谢谢。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-01-25
          • 2017-01-25
          • 1970-01-01
          • 2017-02-23
          • 2011-07-24
          • 1970-01-01
          相关资源
          最近更新 更多