【问题标题】:showing the object instead of string显示对象而不是字符串
【发布时间】:2011-08-06 19:18:56
【问题描述】:

我在这里附上我的问题和代码。 它仅向我显示作为对象的内容,但完美地显示了组名。 这个问题的快照在下面的链接中给出,只是通过这个图像

“http://imageupload.org/?d=4DA941521”(快照)

=> 我想要特定组名的子数据,但我得到的是组名而不是子数据。

代码

package com.bestdambikers;
import android.app.ListActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class SectionedDemo extends ListActivity {


    String strUrl = "http://192.168.5.10/ijoomer_development/index.php?option=com_ijoomer&plg_name=jomsocial&pview=user&ptask=field_list&userid=80&sessionid="+ConstantData.session_id+"&tmpl=component";
      DetailBean dBean;
      XmlParser parser;
      ArrayList<Object>  result;
      List<DetailBean> list;

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.header_main);

        //dBean = new DetailBean();
        parser = new XmlParser(strUrl, new DetailBean());
        result = parser.ParseUrl("data", "group");
        int r = result.size();

        for(int i=0; i<result.size(); i++)
        {

            dBean = (DetailBean)result.get(i);
            list=Arrays.asList(dBean);
            Collections.shuffle(list);
            adapter.addSection(dBean.group_name,
                new ArrayAdapter<DetailBean>(this,
                        android.R.layout.simple_list_item_1,
                        list));
        }
        setListAdapter(adapter);
    }

    SectionedAdapter adapter=new SectionedAdapter() {
        protected View getHeaderView(String caption, int index,
                View convertView,
                ViewGroup parent) {
            TextView result=(TextView)convertView;

            if (convertView==null) {
                result=(TextView)getLayoutInflater()
                .inflate(R.layout.header,
                        null);
            }

            result.setText(caption);

            return(result);
        }
    };
}

DetailBean.java

public class DetailBean
{
    public String data = null;
    public String code = null;
    public String fields = null;
    public String group_name = null;
    public String field = null;
    public String id = null;
    public String name = null;
    public String value = null;
    public String status = null;
    public String required = null;
    public String type = null;

    public DetailBean()
    {
        this("","","","","","","","","","","");
    }

    public DetailBean(String data,String code,String fields, String group_name,String field, String id,String name,String value,String status,String required,String type)
    {
        this.data = data;
        this.code = code;
        this.fields = fields;
        this.group_name = group_name;
        this.field = field;
        this.id = id;
        this.name = name;
        this.value = value;
        this.status = status;
        this.required = required;
        this.type = type;
    }

}

【问题讨论】:

    标签: java android tostring


    【解决方案1】:

    看起来您在 getHeaderView 方法的 caption 参数中获得了 String,该参数由 detailBeanInstance.toString() 生成。

    您应该覆盖 DetailBean 类中的 toString 方法以返回您想要的内容。

    这样的覆盖将是:

    @Override
    public String toString()
    {
        //You should populate this string with the data 
        //you need inside the TextView
        return this.group_name + " " + this.data;
    }
    

    将上面的方法放在 DetailBean 类中,如下所示:

    public class DetailBean
    {
        // You should use private members, and create getters and setters to them
        public String data = null;
        public String code = null;
        public String fields = null;
        public String group_name = null;
        public String field = null;
        public String id = null;
        public String name = null;
        public String value = null;
        public String status = null;
        public String required = null;
        public String type = null;
    
        public DetailBean()
        {
            this("", "", "", "", "", "", "", "", "", "", "");
        }
    
        public DetailBean(String data, String code, String fields, 
                String group_name, String field, String id, String name,
                String value, String status, String required, String type)
        {
            this.data = data;
            this.code = code;
            this.fields = fields;
            this.group_name = group_name;
            this.field = field;
            this.id = id;
            this.name = name;
            this.value = value;
            this.status = status;
            this.required = required;
            this.type = type;
        }
    
        @Override
        public String toString()
        {
            // You should populate this string with the data
            // you need inside the TextView
            return this.group_name + " " + this.data;
        }
    }
    

    【讨论】:

    • 我也在此处添加 Detailbean 类。所以请告诉我在其中做什么。
    • 我已经通过示例 toString() 实现扩展了我的答案。
    • 谢谢..它适用于从对象转换为字符串(获取组名而不是子数据),但我想要组名的子数据。
    • 你是说你有一个平面表示的分层列表吗?所以 group_name 实际上等于另一个 DetailBean 实例的 name 属性,你想显示第二个名字吗?
    • 也许你应该在一个新问题中提出这个问题(因为它不是当前问题的逻辑扩展),并将这个问题链接到它。
    【解决方案2】:

    您的DetailBean 缺少toString() 方法,因此采用父级(即Object)的方法,该方法仅打印类名+其地址。

    【讨论】:

      【解决方案3】:

      一个简单的解决方案可能是更新 DetailBean 以包括覆盖 toString 方法以检索您想要的 DetailBean 对象的任何字符串表示形式。

      (啊。我被打了4分2分。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-24
        • 1970-01-01
        • 1970-01-01
        • 2012-09-12
        • 1970-01-01
        • 2014-02-08
        • 1970-01-01
        • 2015-08-28
        相关资源
        最近更新 更多