【问题标题】:Android intent extra populateAndroid 意图额外填充
【发布时间】:2013-11-20 17:43:05
【问题描述】:

首先我必须提到我是 Android 和 Java 的新手。我编写了一个 json http 对象,该对象填充 Serializable 类,并从中填充列表视图,一切正常,但现在我正在尝试使用来自 Serializable 类的一个字符串填充不同 xml 布局上的文本视图。

可序列化类

    public class FeedItem   implements Serializable {

    private static final long serialVersionUID = 1L;
     private int test1;
    private String title;
    private String date;
    private String attachmentUrl;
    private String id;
    private String content;
    private String url;
    private String tiitle = "sfsf";




    public String getUrl() {
            return url;
    }

    public void setUrl(String url) {
            this.url = url;
    }

    public String getContent() {
            return content;
    }

    public void setContent(String content) {
            this.content = content;
    }

    public String getId() {
            return id;
    }

    public void setId(String id) {
            this.id = id;
    }

    public String getTitle() {
            return title;
    }

    public void setTitle(String title) {
            this.title = title;
    }

    public String getDate() {
            return date;
    }

    public void setDate(String date) {
            this.date = date;
    }

    public String getAttachmentUrl() {
            return attachmentUrl;
    }

    public void setAttachmentUrl(String attachmentUrl) {
            this.attachmentUrl = attachmentUrl;
    }

    @Override
    public String toString() {
            return "[ title=" + title + ", date=" + date + "]";



    }


      public void save(){
FeedItem feed = new FeedItem();

 Intent intent =  new Intent();
 Bundle extras = new Bundle();
    intent.putExtra("title", feed);

以及我要填充文本视图的片段类

public void UpdateList(){
  TextView infoz = (TextView) getView().findViewById(R.id.infoz);
      Intent intent = getActivity().getIntent();
        Bundle extras = intent.getExtras();
        String title = (String) getActivity().getIntent().getSerializableExtra("title");
        Toast.makeText(getActivity(), title, Toast.LENGTH_LONG).show(); 

}

吐司是空的。

【问题讨论】:

    标签: java android serialization


    【解决方案1】:

    您正在将一个 Serializable 对象放入您的 Bundle 中(在 Eclipse 中,将鼠标移到方法名称上方应该会显示签名,在您的情况下将是 putExtra(String name, Serializable extra))。要检索标题字符串,您应该首先检索 FeedItem 对象,然后从中获取字符串,如下所示:

    intent.putExtra("title", feed);
    

    String title = ((FeedItem)getActivity().getIntent().getSerializableExtra("title")).getTitle();
    

    或者,如果您只需要这样,您也可以使用

    intent.putExtra("title", feed.getTitle()); 
    

    然后得到这样的标题:

    String title = getActivity().getIntent().getStringExtra("title");
    

    【讨论】:

    • 第一种方法强制关闭,第二种方法仍然是空吐司,我试图解决这个问题 3 天...
    • 如果您不提供堆栈跟踪,或者至少不提供错误名称并指出失败的位置,则强制关闭很难调试。至于空吐司,我猜你的错误在别处。不清楚 save 方法是如何使用的,看起来不完整),但是如果在 FeedItem 类中使用它,则 feed 为空是正常的,因为我猜您没有使用该意图来启动 Activity但是您使用 Activity 的 getIntent 方法在 Fragment 中检索意图 ...
    【解决方案2】:

    这是您用于从意图中获取标题的代码:

    String title = (String) getActivity().getIntent().getSerializableExtra("title");
    

    这将提取带有键“title”的额外内容并反序列化它,但您随后会将其转换为String。您没有将String 放入额外的Bundle,而是将FeedItem 对象放入其中。你需要这样做:

    FeedItem feedItem = (FeedItem)getActivity().getIntent().getSerializableExtra("title");
    String title = feedItem.getTitle();
    

    另外,您发布的这段代码:

    public void save(){
        FeedItem feed = new FeedItem();
        Intent intent =  new Intent();
        Bundle extras = new Bundle();
        intent.putExtra("title", feed);
    

    没有意义。首先,创建FeedItem 的新实例。这个新实例将有一个空的title。其次,您创建了一个名为extrasBundle,但什么也不做。第三,你确定你发送的Intent 确实有你想要的对象吗?使用调试器或调试日志检查这一点。

    【讨论】:

      猜你喜欢
      • 2013-09-05
      • 2018-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-06
      相关资源
      最近更新 更多