【问题标题】:What is wrong with my Sqlite To Listview that it is not displaying desired results [duplicate]我的 Sqlite To Listview 有什么问题,它没有显示所需的结果 [重复]
【发布时间】:2021-05-12 16:51:45
【问题描述】:

我正在尝试从 DB 中获取所有 ID 和 IncomeCategoryName 并将它们放入列表视图中。

问题是显示的是Package Name. ClassName@hexcode,而不是ID 和IncomeCategory Name。

类文件

public class IncomeCategoriesClass {
    private Integer CATEGORY_ID;
    private String CATEGORY_NAME;

    public IncomeCategoriesClass(Integer CATEGORY_ID, String CATEGORY_NAME) {
        this.CATEGORY_ID = CATEGORY_ID;
        this.CATEGORY_NAME = CATEGORY_NAME;
    }

    public IncomeCategoriesClass() {
        this.CATEGORY_NAME = CATEGORY_NAME;
    }

    public Integer getCATEGORY_ID() {
        return CATEGORY_ID;
    }

    public void setCATEGORY_ID(Integer CATEGORY_ID) {
        this.CATEGORY_ID = CATEGORY_ID;
    }

    public String getCATEGORY_NAME() {
        return CATEGORY_NAME;
    }

    public void setCATEGORY_NAME(String CATEGORY_NAME) {
        this.CATEGORY_NAME = CATEGORY_NAME;
    }
}

数据库助手 sn-p

公共列表 get_AllIncomeCategories(){ 列出所有收入类别 = 新的 LinkedList(); 字符串 queryString = "选择 * FROM " + INCOME_CATEGORIES_TABLE; SQLiteDatabase db = this.getReadableDatabase(); 光标 cursor = db.rawQuery(queryString,null);

    IncomeCategoriesClass incomeCategoriesClass;
    if(cursor.moveToFirst()){
        do {
            incomeCategoriesClass = new IncomeCategoriesClass();
            incomeCategoriesClass.setCATEGORY_ID(Integer.parseInt(cursor.getString(0)));
            incomeCategoriesClass.setCATEGORY_NAME(cursor.getString(1));
            AllIncomeCategories.add(incomeCategoriesClass);
        }while (cursor.moveToNext());
        }
    cursor.close();
    db.close();
    return AllIncomeCategories;
}

AddEditincomeCategoriesActivity

public class AddEditIncomeCategoriesActivity extends AppCompatActivity {

    //Define Screen Fields And Variables
    ListView listviewAllIncomeCategories;


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

        //Initialize Screen Field Variables
        btn_ViewAllIncomeCategory = findViewById(R.id.btn_ViewAllIncomeCategory);
        listviewAllIncomeCategories = findViewById(R.id.listviewAllIncomeCategories);


        //View All Income Categories on Button Click
        btn_ViewAllIncomeCategory.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                DataBaseHelper dataBaseHelper = new DataBaseHelper(AddEditIncomeCategoriesActivity.this);
                List<IncomeCategoriesClass> AllIncomeCategories;
                AllIncomeCategories = dataBaseHelper.get_AllIncomeCategories();
                ArrayAdapter adapter = new ArrayAdapter(AddEditIncomeCategoriesActivity.this,android.R.layout.simple_list_item_1,AllIncomeCategories);
                listviewAllIncomeCategories.setAdapter(adapter);
            }
        });

        //Add Income Category on Button Click
    }
}

它正在输出数据但不是我要查找的数据,它是 Packagename.Class@HexCode 而不是 1 个现金、2 个信用卡等。

我做错了什么,我该如何正确地做到这一点?

【问题讨论】:

  • 所以我在这里看到了 2 个解决方案。如果我使用您的解决方案,它将获得我想要的输出,但是我可以引用 ID 吗?最终在列表视图中,我希望能够操纵数据。不只是看到结果,虽然现在看到结果是主要目标。

标签: android android-studio android-layout android-sqlite


【解决方案1】:

Simple ArrayAdapter 只能膨胀平面值,如字符串或整数。对于对象列表,您需要一个自定义适配器来呈现您的视图。

有关实施细节,请参阅ListView Android

【讨论】:

  • 这里有一些examples
  • 我将研究您的指导,因为您所说的 100% 有道理。通过这条路线,我将能够访问数据以便以后进行操作。最终结果将能够从列表视图中编辑列表视图中的数据。
  • 只是出于好奇。执行以下操作是否有意义:通过覆盖 toString 并创建一个新数组然后从新数组填充列表视图来使用上面的建议?
  • 覆盖 toString 可以肯定地做到这一点。但是您的数据将被展平为单个字符串。您必须将字符串拆分为多个部分才能解析数据,具体取决于您如何实现 toString
  • 因此列表视图仅用于向用户显示所有类别,然后如果他们单击一个,他们将能够编辑和或从数据库中删除它。所以我不确定是要创建一个数组并解析它还是要创建一个自定义适配器。创建自定义适配器就像我进入无人区,在那里创建一个数组并解析它似乎最容易。这只是一个更合适的问题。使用该应用程序的用户真的不会在意,因为他们没有区别。
【解决方案2】:

您看到的是Object#toString() 的输出。

您可以覆盖 IncomeCategoriesClass 中的 toString() 以生成您希望为该项目显示的字符串输出。

【讨论】:

  • 如果我覆盖它,我将获得字符串输出并查看我想要的结果,但最后我需要能够使用列表视图中的结果来编辑数据。我不确定走这条路线是否是长途旅行的最佳路线。在短期内它会起作用,因为这样我就可以直观地看到结果。
猜你喜欢
  • 2023-04-11
  • 2021-02-15
  • 1970-01-01
  • 1970-01-01
  • 2021-07-28
  • 1970-01-01
  • 1970-01-01
  • 2012-09-26
  • 2019-06-22
相关资源
最近更新 更多