将数据从数据库检索到ArrayList中

时间:2015-08-21 10:02:18

标签: android

我正在尝试将数据存储到arraylist中并在另一个活动中检索它。我能够从数据库中获取数据,但无法检索它。我得到路径名而不是结果我已经发布了我的logcat,请给我任何关于如何完成它的建议

DBhelper类:

public ArrayList<LocationHelper> getAlllocations()
{
    ArrayList<LocationHelper> array_list = new ArrayList<LocationHelper>();

    //hp = new HashMap();
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor c =  db.rawQuery( "select * from "+ TABLE_LOCATION, null );
    c.moveToFirst();

    while(c.isAfterLast() == false){
        LocationHelper locationHelper = new LocationHelper();
        locationHelper.setNum(c.getString(1));

        locationHelper.setPresent_lat(c.getString(4));
        Log.e("Database lat: ", locationHelper.getPresent_lat());

        locationHelper.setPresent_lon(c.getString(5));
        Log.e("Database lon: ", locationHelper.getPresent_lon());

        array_list.add(locationHelper);
        Log.e("Database Data: ", String.valueOf(array_list.get(i)));

        c.moveToNext();
        i++;
    }
    return array_list;
}

LocationHelper:

public class LocationHelper {
String num;

public String getNative_lat() {
    return native_lat;
}

public void setNative_lat(String native_lat) {
    this.native_lat = native_lat;
}

public String getNative_lon() {
    return native_lon;
}

public void setNative_lon(String native_lon) {
    this.native_lon = native_lon;
}

public String getPresent_lat() {
    return present_lat;
}

public void setPresent_lat(String present_lat) {
    this.present_lat = present_lat;
}

public String getPresent_lon() {
    return Present_lon;
}

public void setPresent_lon(String present_lon) {
    Present_lon = present_lon;
}

public String getNum() {
    return num;
}

public void setNum(String num) {
    this.num = num;
}

String native_lat;
String  native_lon;
String present_lat;
String Present_lon;
}

logcat的:

08-21 15:28:51.364  25317-25317/? E/dalvikvm﹕ >>>>>  
com.example.xxx.xxx[ userId:0 | appId:10309 ]
08-21 15:28:51.684  25317-25317/? E/Database lat:﹕ 9.08613
08-21 15:28:51.684  25317-25317/? E/Database lon:﹕ 76.4888
08-21 15:28:51.684  25317-25317/? E/Database Data:﹕ 
com.example.xxx.xxx.LocationHelper@4215d348
08-21 15:28:51.684  25317-25317/? E/Database lat:﹕ 9.08613
08-21 15:28:51.684  25317-25317/? E/Database lon:﹕ 76.9888
08-21 15:28:51.684  25317-25317/? E/Database Data:﹕ 
com.example.xxx.xxx.LocationHelper@4215d868
08-21 15:28:51.684  25317-25317/? E/Database lat:﹕ 9.58613
08-21 15:28:51.684  25317-25317/? E/Database lon:﹕ 76.4888
08-21 15:28:51.684  25317-25317/? E/Database Data:﹕  
com.example.xxx.xxx.LocationHelper@4215db50
08-21 15:28:51.684  25317-25317/? E/Database lat:﹕ 9.58613
08-21 15:28:51.684  25317-25317/? E/Database lon:﹕ 76.9888
08-21 15:28:51.684  25317-25317/? E/Database Data:﹕   
com.example.xxx.xxx.LocationHelper@4215de38

4 个答案:

答案 0 :(得分:1)

尝试

Log.e("Database Data: ", String.valueOf(array_list.get(i).getPresent_lat())); 

Log.e("Database Data: ", String.valueOf(array_list.get(i).getPresent_lon()));

而不是

Log.e("Database Data: ", String.valueOf(array_list.get(i)));

您正在尝试打印arraylist对象而不是值。

修改

在第一个活动中通过意图传递arraylist

intent.putExtra("array_list", array_list);

然后在第二个活动中获得这样的arraylist。

ArrayList<LocationHelper> myList = (ArrayList<LocationHelper>) getIntent().getSerializableExtra("array_list");

希望这有帮助!

答案 1 :(得分:1)

正如@gmetax所说,正在打印的哈希码。您的ArrayList完全按照您的意愿填充。您需要使用Intent(例如:intent.addExtras(list))将该列表传递给另一个活动,并在另一个活动中迭代该列表。

答案 2 :(得分:1)

在您的活动中尝试此操作

ArrayList<LocationHelper> locatioHelper = new ArrayList<LocationHelper>();
LocationHelper locHelper = new LocationHelper();
DBHelper db = new DBHelper();
locationHelper=db.getAlllocations();
for(int i=0;i<locationHelper.size();i++)
{
  Log.i("latvalue",locHelper.get(i).getPresent_lat());
  Log.i("lonvalue",locHelper.get(i).getgetPresent_lon());
}

答案 3 :(得分:0)

你的问题是你没有覆盖toString方法,你正在从db中检索内容。

对象类的默认toString方法返回

  

package.Class@Hashcode

添加代码

的LocationHelper类
@Override
public String toString() {
    return "lat : " + getPresent_lat() + ", lon : " + getPresent_lon();
}