我在我的活动中使用了一个自定义列表视图,并试图用值填充它。但是,我得到这个“staledataexception”,这我不undersdtand为什么....android.database.staledataexception:访问已关闭的光标
下面是代码,在标记为“错误在这里”
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.upadtemailservr);
headText = (TextView)findViewById(R.id.TextView01);
prefsPrivate = getSharedPreferences(PREFS_PRIVATE,Context.MODE_PRIVATE);
Heading = prefsPrivate.getString(KEY_PRIVATE, "the string not found");
headText.setText("Update Mail Server - "+Heading);
AddNew = (Button)findViewById(R.id.Button01);
AddNew.setOnClickListener(this);
m_orders = new ArrayList<Order>();
//the first tried one... this was not working... so i tried the one writtten next to it.
/*
m_orders = new ArrayList<Order>();
this.m_adapter = new OrderAdapter(this, R.layout.row, m_orders);
this.setListAdapter(this.m_adapter);
*/
//new list adapter
MainList = (ListView)findViewById(R.id.mainlist1);
viewOrders = new Runnable()
{
@Override
public void run() {
// TODO Auto-generated method stub
getOrders();
}
};
Thread thread = new Thread(null, viewOrders, "MagentoBackground");
thread.start();
m_ProgressDialog = ProgressDialog.show(UpdateMailServr.this,
"Please wait...", "Retrieving data ...", true);
m_adapter = new OrderAdapter(this,R.layout.row,m_orders);
MainList.setAdapter(m_adapter);
MainList.setOnItemClickListener(this);
}
private Runnable returnRes = new Runnable(){
@Override
public void run() {
if(m_orders != null && m_orders.size() > 0){
m_adapter.notifyDataSetChanged();
for(int i=0;i<m_orders.size();i++)
m_adapter.add(m_orders.get(i));
}
m_ProgressDialog.dismiss();
m_adapter.notifyDataSetChanged();
}
};
public void getOrders() {
m_orders = new ArrayList<Order>();
adapter1 = new DBAdaptertrial2(this);
adapter1.open();
Cursor cur1 = adapter1.fetchAllMeetings();
cur1.moveToFirst();
for(int i=0;i<cur1.getCount();i++)
{
//******Error here**************
if(Heading.equalsIgnoreCase(cur1.getString(1)))
{
try
{
if(!cur1.getString(5).equals(""))
{
Order o1 = new Order();
o1.setMailserver(cur1.getString(5));
o1.setPriority(cur1.getInt(8));
o1.setIpaddr(cur1.getString(2));
m_orders.add(o1);
}
if(!cur1.getString(6).equals(""))
{
Order o2 = new Order();
o2.setMailserver(cur1.getString(6));
o2.setPriority(cur1.getInt(8));
o2.setIpaddr(cur1.getString(2));
m_orders.add(o2);
}
if(!cur1.getString(7).equals(""))
{
Order o3 = new Order();
o3.setMailserver(cur1.getString(6));
o3.setPriority(cur1.getInt(8));
o3.setIpaddr(cur1.getString(2));
m_orders.add(o3);
}
Thread.sleep(3000);
Log.i("ARRAY", ""+ m_orders.size());
}
catch (Exception e) {
Log.e("BACKGROUND_PROC", e.getMessage());
}
runOnUiThread(returnRes);
}
else
{
cur1.moveToNext();
}
cur1.close();
adapter1.close();
}
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
viewOrders = new Runnable()
{
@Override
public void run() {
// TODO Auto-generated method stub
getOrders();
}
};
Thread thread = new Thread(null, viewOrders, "MagentoBackground");
thread.start();
m_ProgressDialog = ProgressDialog.show(UpdateMailServr.this,
"Please wait...", "Retrieving data ...", true);
}
// End of all the list stuff
您应该使用CursorAdapter,并避免在活动中启动线程。 – njzk2
好..让我试试看..我会再次回来 – Amar
嗨,你可以请指导我如何使用CursorAdapter这个,我怀疑是我从数据库中分配光标的一些值,然后我如何使用它将数据放入ArrayList中,然后在Listadapter中使用它。 – Amar