llf2580 2023-03-20 17:49 采纳率: 66.7%
浏览 21
已结题

Android Studio:SQLite数据库使用出错

我在MainActivity里放置了一个ViewPager,对应四个不同的Fragment.
创建了数据库DBHelper继承SQLiteOpenHelper。
现在我在一个fragment界面取出数据库内容时出现了错误,这是怎么回事呢?

// fragme代码, 构造方法和onCreateView()方法没动,只写了onActivityCreated()方法

public class CommunityFragment extends Fragment {
    DBHelper dbHelper = new DBHelper(getContext());
    public CommunityFragment() {
        // Required empty public constructor
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_community, container, false);
        // Inflate the layout for this fragment
        return view;
    }
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
      
        // 取出用户账号
        SharedPreferences sp = getActivity().getSharedPreferences("LoginSp", Context.MODE_PRIVATE);
        String account = sp.getString("account",null);
        SQLiteDatabase dbread = dbHelper.getReadableDatabase();
        String sql = "select * from "+DBHelper.table_AccountTags+" where account='"+account+"'";
        Cursor cursor = dbread.rawQuery(sql,null);
        int flag = cursor.getCount();
        if(flag == 0) {// 没有标签的用户
        }
        else {// 有标签的用户
        }
        cursor.close();
        dbread.close();
   }
}

DBhelper创建了数据表

String sql = "CREATE TABLE IF NOT EXISTS "+DBHelper.table_AccountTags+"(_id INTEGER PRIMARY KEY AUTOINCREMENT,account VARCHAR(20),tag1 VARCHAR(20),tag2 VARCHAR(20),tag3 VARCHAR(20))";
db.execSQL(sql);

运行后app强制关闭,提示一下错误:

img


(CommunityFragment.java:68)这句是:SQLiteDatabase dbread = dbHelper.getReadableDatabase();

  • 写回答

3条回答 默认 最新

  • threenewbee 2023-03-20 18:23
    关注

    数据库打开没有成功,看看是不是数据库文件的问题

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • CSDN-Ada助手 CSDN-AI 官方账号 2023-03-20 20:09
    关注
    评论
  • 立青_ 2023-03-21 13:42
    关注

    你不能在外面就实例化DBHelper,这个时候getContext()得到的还是空的。可以在onViewCreated里实例化DBHelper

     
    public class CommunityFragment extends Fragment {
        private DBHelper dbHelper;
        
       @Override
        public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
            super.onViewCreated(view, savedInstanceState);
            dbHelper = new DBHelper(getContext());
        }
    }
     
    
    
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月10日
  • 已采纳回答 4月2日
  • 创建了问题 3月20日

悬赏问题

  • ¥15 Java环境配了,但启用不成功。
  • ¥15 求一个智能家居控制的代码
  • ¥15 ad软件 pcb布线pcb规则约束编辑器where the object matpcb布线pcb规则约束编辑器where the object matchs怎么没有+15v只有no net
  • ¥15 虚拟机vmnet8 nat模式可以ping通主机,主机也能ping通虚拟机,但是vmnet8一直未识别怎么解决,其次诊断结果就是默认网关不可用
  • ¥20 求各位能用我能理解的话回答超级简单的一些问题
  • ¥15 yolov5双目识别输出坐标代码报错
  • ¥15 这个代码有什么语法错误
  • ¥15 给予STM32按键中断与串口通信
  • ¥15 使用QT实现can通信
  • ¥15 关于sp验证的一些东西,求告知如何解决,