android.database.staledataexception:访问关闭游标 [英] android.database.staledataexception : Access closed cursor

查看:390
本文介绍了android.database.staledataexception:访问关闭游标的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的是自定义列表视图中我的活动,并与trrying值来填充它。但是,我得到这个staledataexception,这我不undersdtand为什么....

下面是code,对标记为错误在这里行发生错误

 保护无效的onCreate(捆绑savedInstanceState){
        // TODO自动生成方法存根
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.upadtemailservr);        headText =(的TextView)findViewById(R.id.TextView01);
        prefsPrivate = getShared preferences(preFS_PRIVATE,Context.MODE_PRIVATE);
        标题= prefsPrivate.getString(KEY_PRIVATE,未找到字符串);
        headText.setText(更新邮件服务器 - +标题);        的AddNew =(按钮)findViewById(R.id.Button01);
        AddNew.setOnClickListener(本);
         m_orders =新的ArrayList<排序>();        //第一试过一次......这是不工作...所以我想一个writtten旁边。
        / *
         m_orders =新的ArrayList<排序>();
         this.m_adapter =新OrderAdapter(这一点,R.layout.row,m_orders);
         this.setListAdapter(this.m_adapter);
            * /        //新的列表适配器        MainList =(ListView控件)findViewById(R.id.mainlist1);
           viewOrders =新的Runnable()
           {            @覆盖
            公共无效的run(){
                // TODO自动生成方法存根
                getOrders();
            }
           };
             线程线程=新主题(NULL,viewOrders,MagentoBackground);
                thread.start();
                m_ProgressDialog = ProgressDialog.show(UpdateMailServr.this,
                      请稍候...,检索数据...,真正的);                m_adapter =新OrderAdapter(这一点,R.layout.row,m_orders);
               MainList.setAdapter(m_adapter);
               MainList.setOnItemClickListener(本);    }    私人Runnable接口returnRes =新的Runnable(){         @覆盖
            公共无效的run(){
                如果(m_orders =空&放大器;!&放大器; m_orders.size()大于0){
                    m_adapter.notifyDataSetChanged();
                    的for(int i = 0; I< m_orders.size();我++)
                    m_adapter.add(m_orders.get(I));
                }
                m_ProgressDialog.dismiss();
                m_adapter.notifyDataSetChanged();
            }
    };           公共无效getOrders(){
               m_orders =新的ArrayList<排序>();               适配器1 =新DBAdaptertrial2(本);
            adapter1.open();
            光标CUR1 = adapter1.fetchAllMeetings();            cur1.moveToFirst();
            的for(int i = 0; I< cur1.getCount();我++)
            {
                         // ******错误这里**************
                如果(Heading.equalsIgnoreCase(cur1.getString(1)))
                {
                    尝试
                    {
                        如果(!cur1.getString(5).equals())
                        {
                            为了O1 =新订单();
                            o1.setMailserver(cur1.getString(5));
                            o1.setPriority(cur1.getInt(8));
                            o1.setIpaddr(cur1.getString(2));
                            m_orders.add(01);
                        }
                        如果(!cur1.getString(6).equals())
                        {
                            为了O2 =新订单();
                            o2.setMailserver(cur1.getString(6));
                            o2.setPriority(cur1.getInt(8));
                            o2.setIpaddr(cur1.getString(2));
                            m_orders.add(02);
                        }
                        如果(!cur1.getString(7).equals())
                        {
                            为了O3 =新订单();
                            o3.setMailserver(cur1.getString(6));
                            o3.setPriority(cur1.getInt(8));
                            o3.setIpaddr(cur1.getString(2));
                            m_orders.add(03);
                        }
                        视频下载(3000);
                        Log.i(阵列,+ m_orders.size());                    }
                    赶上(例外五){
                        Log.e(BACKGROUND_PROC,e.getMessage());
                    }
                  runOnUiThread(returnRes);                }
                其他
                {
                    cur1.moveToNext();
                }
                cur1.close();
            adapter1.close();
            }    }           @覆盖
        保护无效onResume(){
            // TODO自动生成方法存根
            super.onResume();               viewOrders =新的Runnable()
               {                @覆盖
                公共无效的run(){
                    // TODO自动生成方法存根
                    getOrders();
                }
               };
                 线程线程=新主题(NULL,viewOrders,MagentoBackground);
                    thread.start();
                    m_ProgressDialog = ProgressDialog.show(UpdateMailServr.this,
                          请稍候...,检索数据...,真正的);           }        //所有列表的东西结束


解决方案

您似乎越来越使用managedQuery光标。

我曾与恢复应用程序,由于某种原因在冰淇淋三明治没有正确关闭游标问题。此修复程序是为所有的游标做到这一点使用它们之后:

 如果(光标= NULL&放大器;!&安培;!cursor.isClosed()){
  myActivity.stopManagingCursor(光标);
  cursor.close();
}

I am using a custom listview in my activity and trrying to populate it with values. But, I am getting this "staledataexception", which i dont undersdtand why....

Here is the code, the error occurs on the line tagged as "error here"

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

解决方案

You seem to be getting the cursors using managedQuery.

I had problems with restoring an application, which for some reason in Icecream Sandwich did not close the cursors properly. The fix was to do this for all cursors right after using them:

if (cursor != null && !cursor.isClosed()) {
  myActivity.stopManagingCursor( cursor );
  cursor.close();
}

这篇关于android.database.staledataexception:访问关闭游标的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆