Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android.database.staledataexception:访问关闭的游标_Android_Eclipse_Sqlite - Fatal编程技术网

android.database.staledataexception:访问关闭的游标

android.database.staledataexception:访问关闭的游标,android,eclipse,sqlite,Android,Eclipse,Sqlite,我在活动中使用自定义listview,并尝试用值填充它。但是,我得到了这个staledataexception,我不明白为什么 这是代码,错误发生在这里标记为error的行上 protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView

我在活动中使用自定义listview,并尝试用值填充它。但是,我得到了这个staledataexception,我不明白为什么

这是代码,错误发生在这里标记为error的行上

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

您似乎正在使用managedQuery获取游标

我在恢复应用程序时遇到了问题,由于某种原因,在Icecream Sandwich中没有正确关闭游标。修复方法是在使用所有游标后立即对其执行此操作:

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

您似乎正在使用managedQuery获取游标

我在恢复应用程序时遇到了问题,由于某种原因,在Icecream Sandwich中没有正确关闭游标。修复方法是在使用所有游标后立即对其执行此操作:

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

您应该使用游标适配器,并避免在活动中启动线程。好的。。让我试试看。。我会再回来的我。。。请您指导我如何使用CursorAdapter,我的疑问是我从数据库中为光标分配了一些值,然后如何使用它将数据放入ArrayList,然后在Listadapter中使用它。使用CursorAdapter的目的是避免使用arrayadapter。游标适配器功能更强大,因为它们不需要同时提供所有数据。请参阅此处的示例,您应该使用游标适配器,并避免在活动中启动线程。确定。。让我试试看。。我会再回来的我。。。请您指导我如何使用CursorAdapter,我的疑问是我从数据库中为光标分配了一些值,然后如何使用它将数据放入ArrayList,然后在Listadapter中使用它。使用CursorAdapter的目的是避免使用arrayadapter。游标适配器功能更强大,因为它们不需要同时提供所有数据。请参阅此处的示例,ICS没有为您管理游标,因为API 11中不推荐使用start/stopManagingCursor。更好的策略是使用LoaderManager。它还具有将光标加载到后台线程的好处,使您的应用程序更具响应性。ICS不会为您管理光标,因为API 11中不推荐使用start/stopManagingCursor。更好的策略是使用LoaderManager。它还具有将光标加载到后台线程上的好处,使您的应用程序更具响应性。