无法恢复活动:尝试重新查询已关闭的游标

时间:2015-01-08 07:44:04

标签: android android-sqlite android-cursor android-contentresolver android-cursorloader

我正在开发一个项目,我正在做的是检查阅读RSS源并将它们保存到我的数据库并通过在列表视图中选择特定的故事来显示它们。当我显示我正在使用Webview的故事时,如果它存在于webview中的故事内容中,我也可以打开一个URL。一切正常。

现在我只想检查在我的数据库中是否存在webview中的故事内容中点击的url,然后该数据库应该在我的活动中打开一些HTML标记和WebView。如果我的数据库中没有url,那么该URL应该在我的webview中作为链接打开。仍然一切都很好。

问题是,如果网址匹配,它会按照我的要求打开但是当我按下后退按钮时。它崩溃了,然后在强制关闭时回到后面的活动。而如果我点击我的数据库中没有的网址,它可以正常工作。

任何帮助都会有用,我在这里附上我的代码。

content = (WebView) findViewById(R.id.content);

            if(getStoryFromDB()!=null){
                Uri uri = Story.buildStoryUri(getStoryFromDB());
                Intent intent = new Intent("com.india.ui.StoryDetailIntent2.LAUNCH",uri );
                Log.d("uri passed:", uri.toString());
                startActivity(intent);
                //Toast.makeText(this, "Story URL Matched", Toast.LENGTH_LONG).show();
            }
            else{

            content.getSettings().setPluginState(PluginState.ON_DEMAND);
            content.getSettings().setJavaScriptEnabled(true);
            content.getSettings().setAllowFileAccess(true);
            content.setWebChromeClient(new WebChromeClient());
            content.setWebViewClient(new WebViewClient());

            content.loadUrl(surl);
            }

private String getStoryFromDB() {
        // TODO Auto-generated method stub
         StoryDatabase storiesdb = new StoryDatabase(this);
         SQLiteDatabase sqldb = storiesdb.getReadableDatabase();
         String sStoryGuid=null;
         String selection =  StoryColumns.LINK+"=?" ;
         String[] selectionArgs = new String[1];
         selectionArgs[0] = surl;
         try{
         Cursor cursor = sqldb.query(StoryDatabase.Tables.STORIES, null, selection, selectionArgs, null, null, null);
         startManagingCursor(cursor);
            while (cursor.moveToNext()) {
                sStoryGuid = cursor.getString(cursor.getColumnIndex(StoryColumns.GUID));
                StoriesBean objSb = new StoriesBean();
                objSb.setGuid(sStoryGuid);
                }
         }catch(Exception e){
             e.printStackTrace();
         }finally{
                sqldb.close();   
         }
         return sStoryGuid;
    }

我搜索了它,认为我找到了原因,因为我正在使用startManagingCursor()。现在它已被弃用,我应该使用contentResolver或loader。但我无法将其放入代码中,我也没有任何想法如何实现它。我搜索但找不到任何方法来解决它。

任何帮助将不胜感激。提前谢谢。

1 个答案:

答案 0 :(得分:2)

我的猜测:

sqldb.close(); - your cursor closes with it at the same time

但是startManagingCursor需要它来进行处理。此光标将在活动onDestroy()

中关闭

关于装载机,我建议Vogella's tutorial来理解它