我在我的活動中使用了一個自定義列表視圖,並試圖用值填充它。但是,我得到這個「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