【问题标题】:Convert Arraylist to Array, data of Arraylist is of custom class type将Arraylist转换为Array,Arraylist的数据是自定义类类型
【发布时间】:2013-06-13 07:18:36
【问题描述】:

我已从数据库中检索数据并使用名为 AddDetails 的类添加到 Arraylist。在 AddDetails 类中,我正在分配所有值。然后我将该 ArrayList 发送到我需要在 ListView 中显示该数据的活动类。现在,在将数据从 ArrayList 复制到 Array 时,我遇到了诸如找不到类之类的错误,或者在列表视图上显示时它只是显示了一些垃圾值。

代码如下:

 private class SearchTask extends AsyncTask<Void, Void, Void>{
@Override
   protected Void doInBackground(Void... arg0) {
    // TODO Auto-generated method stub

     DatabaseHandler db = new DatabaseHandler();          

     String Place = etSearch.getText().toString();
     AddDetails details = new AddDetails(Place);
     alSearchResult = db.searchResultByPlace(details);
     arrStr = new String[alSearchResult.size()];

     try
     {
    arrStr = (String[]) alSearchResult.toArray();               
       ArrayAdapter<String> adapter = new ArrayAdapter<String>(SearchActivity.this,           android.R.layout.simple_list_item_multiple_choice, arrStr);

    lsSearchResult.setAdapter(adapter);
      }

      catch(Exception e)
      {
        Log.e("Error:" + e.toString());
      }


    return null;
}





 protected ArrayList<AddDetails> searchResultByPlace(AddDetails details)
{
ArrayList<AddDetails> alSearchData = null;
try
{
     String place = details.getPlace();

      Cursor c = mDataBase.rawQuery("SELECT * FROM " + ESTATE_DETAILS + " WHERE " +           strSearchType + " =  " + "'" + place + "'", null);
    c.moveToFirst();
    if(c.getCount() > 0)
    {
     alSearchData = new ArrayList<AddDetails>();
    if (c.moveToFirst()) 
    {
    do {
        details = new AddDetails();  
                    details.setID(Integer.parseInt(c.getString(0)));
            details.setPlace(c.getString(1));                        
                    details.setArea(c.getString(2));
            details.setType(c.getString(3));
            details.setPhoneNumber(c.getString(4));                                                                                                                                 

         // Adding contact to list
        alSearchData.add(details);
    } while (c.moveToNext());
   }

}

c.close();
}
catch(SQLException e)
{
Log.e("Error:", e.toString());
}

return alSearchData;

}

【问题讨论】:

  • 可以使用arraylist在listview中显示数据,为什么需要将arraylist转为array?
  • 你将什么转换成数组..??只需将该数组列表用于列表视图..
  • “它只是显示了一些垃圾值。” 您是否覆盖了 AddDetails 类中的 toString 方法?
  • 当我尝试直接从 Arraylist 显示(参见我在 Blackbelt 的答案中的代码)时,它显示 com.example.realestate.AddDetails@40e253d8 数据详细信息来自 AddDetails 类。

标签: android arrays arraylist android-arrayadapter


【解决方案1】:

改变

   arrStr = (String[]) alSearchResult.toArray();   

   arrStr = alSearchResult.toArray(new String[0]);

【讨论】:

  • doInbackground 中的这个lsSearchResult.setAdapter(adapter) 应该移动到onpostExecute()
  • 不使用黑带,获取 java.lang.ArrayStoreException:com.example.realestate.AddDetails 类型的源 [0] 无法存储在 java.lang.String[] 类型的目标数组中
  • 在一些例子中我看到了,所以只是尝试转换成字符串数组。现在尝试将 arraylist 分配给列表 ArrayAdapter adapter = new ArrayAdapter(SearchActivity.this, android.R.layout.simple_list_item_1,alSearchResult); lsSearchResult.setAdapter(适配器); ********** 它在列表视图中显示 com.example.realestate.AddDetails@40e253d8
【解决方案2】:

请不要在后台线程中访问您的 listView lsSearchResult。将结果传递给 onPostExecute()。

尝试使用以下代码:

private class SearchTask extends AsyncTask<Void, Void, ArrayList<String>>{
@Override
   protected ArrayList<String> doInBackground(Void... arg0) {

     DatabaseHandler db = new DatabaseHandler();          

     String Place = etSearch.getText().toString();
     AddDetails details = new AddDetails(Place);
     alSearchResult = db.searchResultByPlace(details);

     return alSearchResult;
}

protected void onPostExecute(ArrayList<String> result) {
     ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(SearchActivity.this,android.R.layout.simple_list_item_1, result);
     lsSearchResult.setAdapter(arrayAdapter); 
}

【讨论】:

  • 值来了却无法显示
  • 您是否遇到某种类型的错误,或者只是没有显示任何内容?
【解决方案3】:
ArrayList<String> stock_list = new ArrayList<String>();
    stock_list.add("stock1");
    stock_list.add("stock2");
    String[] stockArr = new String[stock_list.size()];
    stockArr = stock_list.toArray(stockArr);
    for(String s : stockArr)
        System.out.println(s);

这对于arraylist到array的转换很有帮助,你也可以直接使用arraylist和arrayadapter,不需要将它转换为array

【讨论】:

    猜你喜欢
    • 2014-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 2016-06-12
    相关资源
    最近更新 更多