我正在尝试将数据库游标从服务(An IntentService)发送到我的Activity(它实现了一个Receiver以捕获来自服务的任何响应)。一旦我从查询cursor = db.query(DBHelper.DB_BOOKS_TABLE, columns, where, whereArgs, groupBy, having, orderBy);
获得数据,我想通过接收器将光标从服务发回给他的呼叫者。但捆绑结构只是让我发送tical数据(字符串,整数,这样思考)。我知道捆绑包还允许发送可分配对象和可序列化对象。但我如何将典型的光标转换为parcelable或可序列化的游标。 THKS。
答案 0 :(得分:1)
您实际上不需要使用Bundle
从Service
发送任何内容到Activity
。你可以在Service
中这样做。我在这里严格谈论Service
,而不是IntentService
,因为我之前没有使用它们。使用绑定的Service
是相同的,但只要在完成后调用unbindService()
:
private Cursor cursor;
public void initializeCursor() {
cursor = Cursor();
//Now the cursor is created. Send a broadcast to the activity that it's done.
broadcastManager.sendBroadcast("your.package.CURSOR_FINISHED");
}
并为getCursor()
提供Activity
方法:
public Cursor getCursor() {
return this.cursor;
}
在BroadcastReceiver
的{{1}}中,抓住此事件:
Activity
由于您的活动与您的服务绑定,您的活动中将有一个服务对象。一旦你完成光标完成的广播,就可以杀死服务。
答案 1 :(得分:0)
我选择制作自己的自定义类,实现 Parcelable Interface 。因为CrossProcessCursor之类的可分辨游标对我来说是个未知数。
在我自己的ParcelableRow中,我只是实现 HashMap 对象。为了不再担心行数或列数,我只是将光标映射到我自己的自己的ParcelableRow对象。这是mi代码:
public class ParcelableRow implements Parcelable {
private HashMap<String, String> colsMap;
public static final Parcelable.Creator<ParcelableRow> CREATOR
= new Parcelable.Creator<ParcelableRow>() {
@Override
public ParcelableRow createFromParcel(Parcel source) {
return new ParcelableRow(source);
}
@Override
public ParcelableRow[] newArray(int size) {
return new ParcelableRow[size];
}
};
public ParcelableRow(Parcel in) {
colsMap = new HashMap<String, String>();
readFromParcel(in);
}
public ParcelableRow() {
colsMap = new HashMap<String, String>();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
for(String key: colsMap.keySet()){
dest.writeString(key);
dest.writeString(colsMap.get(key));
}
}
public void readFromParcel(Parcel parcel) {
int limit = parcel.dataSize();
parcel.setDataPosition(0);
for(int i = 0; i < limit; i++){
colsMap.put(parcel.readString(), parcel.readString());
}
}
public void addNewCol(String colName, String colValue){
colsMap.put(colName, colValue);
}
public String getColumnValue(String colName){
return colsMap.get(colName);
}
} 感谢@CommonsWare给了我一个线索。竖起大拇指!。
我希望这对某些人有用,我只是花了几天时间试图寻找能够满足我需求的东西。 here是我使用过的一些代码示例。建议是受欢迎的。
警告它只让我满意,因为我不喜欢这个时间。
继续编码!