我在Main Activity中,单击一个ListItem后进行查询,将结果显示在下面这段代码表示的ListActivity中,如果返回到Main Activity中重复查询,两次之后,就会出现异常提示
Finalizing a Cursor that has not been deactivated or closed. database=/mnt/sdcard/businfo.db table=null ,query=select ID as _id, BUSNUM,TIME,PRICE,FORWARDLINE from businfo where BUSNUM like ?"
我知道这是提示我Cursor没有关闭,但是当我用close()关闭后,问题还是依旧,我应该如何改才能不影响反复使用这个cursor进行查询呢?问题代码如下:
public class BusNumInfo extends ListActivity
{
private TextView tvBusNumber,tvBusTime,tvTicketPrice,tvBusLine,tvNoResult;
private String queryValue;
private final String DATABASE_PATH = android.os.Environment
.getExternalStorageDirectory().getAbsolutePath();
private final String DATABASE_FILENAME = "businfo.db";
private SQLiteDatabase database;
private String databaseFilename; private SQLiteDatabase openDatabase()
{
try
{
databaseFilename = DATABASE_PATH+"/"+DATABASE_FILENAME;
if(!(new File(databaseFilename).exists()))
{
InputStream is = getResources().openRawResource(R.raw.businfo);
FileOutputStream fos = new FileOutputStream(databaseFilename);
byte[] buffer = new byte[8192];
int count = 0;
while((count=is.read(buffer))>0)
{
fos.write(buffer, 0, count);
}
fos.close();
is.close();
}
SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFilename, null);
return database;
}
catch(Exception e)
{
}
return null;
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
tvBusNumber = (TextView)findViewById(R.id.tvBusNumber);
tvBusTime = (TextView)findViewById(R.id.tvBusTime);
tvTicketPrice = (TextView)findViewById(R.id.tvTicketPrice);
tvBusLine = (TextView)findViewById(R.id.tvBusLine);
Bundle bundle = getIntent().getExtras();
queryValue = bundle.getString("busnumber");
queryValue = queryValue+"%";
database = openDatabase();
String sql = "select ID as _id, BUSNUM,TIME,PRICE,FORWARDLINE from businfo where BUSNUM like ?";
Cursor cursor = database.rawQuery(sql, new String[]{queryValue});
if(cursor.getCount()>0)
{
String sum = String.valueOf(cursor.getCount());
setTitle("共查询到"+sum+"条记录");
SimpleCursorAdapter simpleCursorAdapter = new SimpleCursorAdapter(this,
R.layout.busnumresult,cursor,
new String[]
{"BUSNUM","TIME","PRICE","FORWARDLINE"},
new int[]
{R.id.tvBusNumber,R.id.tvBusTime,R.id.tvTicketPrice,R.id.tvBusLine});
setListAdapter(simpleCursorAdapter);
}
else
{
setTitle("无查询记录");
List<Map<String,String>> noResultList = new ArrayList<Map<String,String>>();
Map<String,String> noResultMap = new HashMap<String,String>();
noResultMap.put("Message", "无相关车次信息,请核对后再查");
noResultList.add(noResultMap);
SimpleAdapter simpleAdapter = new SimpleAdapter(this,noResultList,
R.layout.noresult,new String[]{"Message"},new int[]{R.id.tvNoResult});
setListAdapter(simpleAdapter);
}
}
}
本人新手,求指点!!
Finalizing a Cursor that has not been deactivated or closed. database=/mnt/sdcard/businfo.db table=null ,query=select ID as _id, BUSNUM,TIME,PRICE,FORWARDLINE from businfo where BUSNUM like ?"
我知道这是提示我Cursor没有关闭,但是当我用close()关闭后,问题还是依旧,我应该如何改才能不影响反复使用这个cursor进行查询呢?问题代码如下:
public class BusNumInfo extends ListActivity
{
private TextView tvBusNumber,tvBusTime,tvTicketPrice,tvBusLine,tvNoResult;
private String queryValue;
private final String DATABASE_PATH = android.os.Environment
.getExternalStorageDirectory().getAbsolutePath();
private final String DATABASE_FILENAME = "businfo.db";
private SQLiteDatabase database;
private String databaseFilename; private SQLiteDatabase openDatabase()
{
try
{
databaseFilename = DATABASE_PATH+"/"+DATABASE_FILENAME;
if(!(new File(databaseFilename).exists()))
{
InputStream is = getResources().openRawResource(R.raw.businfo);
FileOutputStream fos = new FileOutputStream(databaseFilename);
byte[] buffer = new byte[8192];
int count = 0;
while((count=is.read(buffer))>0)
{
fos.write(buffer, 0, count);
}
fos.close();
is.close();
}
SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFilename, null);
return database;
}
catch(Exception e)
{
}
return null;
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
tvBusNumber = (TextView)findViewById(R.id.tvBusNumber);
tvBusTime = (TextView)findViewById(R.id.tvBusTime);
tvTicketPrice = (TextView)findViewById(R.id.tvTicketPrice);
tvBusLine = (TextView)findViewById(R.id.tvBusLine);
Bundle bundle = getIntent().getExtras();
queryValue = bundle.getString("busnumber");
queryValue = queryValue+"%";
database = openDatabase();
String sql = "select ID as _id, BUSNUM,TIME,PRICE,FORWARDLINE from businfo where BUSNUM like ?";
Cursor cursor = database.rawQuery(sql, new String[]{queryValue});
if(cursor.getCount()>0)
{
String sum = String.valueOf(cursor.getCount());
setTitle("共查询到"+sum+"条记录");
SimpleCursorAdapter simpleCursorAdapter = new SimpleCursorAdapter(this,
R.layout.busnumresult,cursor,
new String[]
{"BUSNUM","TIME","PRICE","FORWARDLINE"},
new int[]
{R.id.tvBusNumber,R.id.tvBusTime,R.id.tvTicketPrice,R.id.tvBusLine});
setListAdapter(simpleCursorAdapter);
}
else
{
setTitle("无查询记录");
List<Map<String,String>> noResultList = new ArrayList<Map<String,String>>();
Map<String,String> noResultMap = new HashMap<String,String>();
noResultMap.put("Message", "无相关车次信息,请核对后再查");
noResultList.add(noResultMap);
SimpleAdapter simpleAdapter = new SimpleAdapter(this,noResultList,
R.layout.noresult,new String[]{"Message"},new int[]{R.id.tvNoResult});
setListAdapter(simpleAdapter);
}
}
}
本人新手,求指点!!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货