【问题标题】:How to send non-string data across activity如何跨活动发送非字符串数据
【发布时间】:2015-07-15 04:23:09
【问题描述】:

在 twitterfragment 类中我有

List<twitter4j.Status> statuses = twitter.getUserTimeline(user);
Intent intent = new Intent(getActivity(), twitter_timeline.class);
intent.putExtra(twitter_timeline.STATUS_LIST, statuses);// this line giving error if I pass status 

在 twitter_timeline 类中,我想获取我从 twitter 片段中发送的雕像。

public class twitter_timeline extends Activity {
    public static List<twitter4j.Status> STATUS_LIST;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_twitter_timeline);

        setTitle("Timeline");

        List<twitter4j.Status> statuses = (Status) this.getIntent().getStringArrayExtra(STATUS_LIST); // this line not resolving even if I cast it to status type
    }

这里的意图期望在函数 getIntent.getStringArrayExtra(...) 中获取 StringArray,但我已经从我的片段中发送了 Twitter 状态。

【问题讨论】:

  • 使用来自绿色机器人的 EventBus。 github.com/greenrobot/EventBus
  • 明明你的status不是字符串数组,那为什么还要调用getStringArray呢?
  • 显示我希望语句的工作方式

标签: java android android-fragments android-activity twitter4j


【解决方案1】:

因为twitter4j.Status 类实现了Serializable,您应该能够创建一个Serializable 包装类并通过Intent Extras 发送它。

在 MyStatuses.java 中创建一个 MyStatuses 类:

import java.io.Serializable;

public class MyStatuses implements Serializable {
    List<twitter4j.Status> statuses;
}

然后在 Intent Extras 中发送一个包装类的实例:

    List<twitter4j.Status> statuses = twitter.getUserTimeline(user);
    MyStatuses myStatuses = new MyStatuses();
    myStatuses.statuses = statuses;
    Intent intent = new Intent(getActivity(), twitter_timeline.class);
    intent.putExtra("statuses", myStatuses);

然后使用 getSerializable() 来获取 Intent Extra:

public class twitter_timeline extends Activity {
    //public static List<twitter4j.Status> STATUS_LIST; 
    List<twitter4j.Status> statuses;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_twitter_timeline);

        setTitle("Timeline");
        Bundle b = this.getIntent().getExtras();
        if (b != null) {
            MyStatuses myStatuses = (MyStatuses) b.getSerializable("statuses");
            statuses = myStatuses.statuses;
        }
    }

【讨论】:

    猜你喜欢
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    • 2013-08-11
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    相关资源
    最近更新 更多