当前位置: 首页 > 知识库问答 >
问题:

如何使用带有片段的数据库

夹谷辰沛
2023-03-14
 SQLiteDatabase db = getWritableDatabase();
package com.example.hismartversearch;

import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class Db extends SQLiteOpenHelper {
    public Db(Context context) {
        super(context, "Db.sqlite", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
    }

    public Cursor getdata(String sql) {
        // error at this line below
        SQLiteDatabase db = getWritableDatabase();
        Cursor c = db.rawQuery(sql, null);
        return c;
    }

    public void querydata(String sql) {
        SQLiteDatabase db = getWritableDatabase();
        db.execSQL(sql);
    }

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }

    public void delete_table(String table_name) {
        SQLiteDatabase db = getWritableDatabase();
        db.execSQL("delete from " + table_name);
    }

    public void delete_row(String tenbang, String tencot, String giatri) {
        SQLiteDatabase db = getWritableDatabase();
        db.delete(tenbang, tencot + "=" + giatri, null);
       }
    }
public class TabOneFragment extends Fragment implements SearchView.OnQueryTextListener {
Db db = new Db(getActivity());
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.tab_one_fragment, container, false);
        recyclerView = (RecyclerView) view.findViewById(R.id.recyclerview);
 final RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(getActivity(), 2);
        recyclerView.setLayoutManager(mLayoutManager);
        recyclerView.addItemDecoration(new GridSpacingItemDecoration(2, dpToPx(5), true));
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        recyclerView.setAdapter(adapter);
   return view;
    }

    @Override
    public boolean onQueryTextSubmit(String query) {
        return false;
    }

    @Override
    public boolean onQueryTextChange(String newText) {
        return false;
    }

// error at line in logcat when I create table. 

 public void LoadDtaWeb() {
      db.querydata("Create table if not exists tbl_mon_app (_ID integer primary key, IDMon integer not null, IDCH integer not null, TenMon text not null, Gia text not null, ImgUrl text not null, ImgLocal text)");
    }
}
//some text hidden to save space display 

下面是logcat:

12-15 13:15:30.763 295 33-29533/com.example.hieul.hismartversearch e/androidruntime:致命html" target="_blank">异常:main process:com.example.hieul.hismartversearch,pid:29533 java.lang.nullpointerexception:试图在Android.database.sqlite.sqlite.sqlite.sqlite.sqlite.sqlite.sqlite.sqlite.sqlite.sqlite.getdatabaseLocked(eOpenHelper.java:223)在Android.database.sqlite.sqliteOpenHelper.getWritableDatabase(SqliteOpenHelper.java:163)在com.example.hieul.hismartVersearch.db.queryData(Db.java:33)在com.example.hieul.hismartVersearch.tabonefragment.loaddTaWeb(Tabonefragment.java:309)在port.v4.app.FragmentManagerImpl.mo在Android.support.v4.app.fragmentManager.java:1419)在Android.support.v4.app.fragmentManagerimpl.moveFragmentToExpectedState(FragmentManager.java:1750)在Android.support.v4.app.fragmentManagerimpl.moveState(FragmentManager.java:1819)在Android.support.v4.app.fragmentManagerimpl.moveToState(FragmentManager.java:1819)在Android.support.v4.app.fragmentManagerImpl.removereddantOperationSandExecute(FragentManager.java:2332),在Android.support.v4.app.fragmentManagerImpl.execsingleAction(FragmentManager.java:2209),在Android.support.v4.app.backstackRecord.commitnoWollowingStateloss(BackstackRecord.java:649),在4.view.viewpager.populate(viewpager.java:1086)在Android.support.v4.view.viewPager.onMeasure(viewPager.java:1616)在Android.view.view.measure(view.java:20151)在Android.view.viewgroup.measure(view.java:20151)在Android.view.viewgroup.measure ChildWith Margins(viewgroup.java:6328)在Android.support.design.widget.coordinatorlayout.onMeasurchild(port.design.widget.coordinatorlayout.onMeasure(coordinatorlayout.java:789)在Android.view.viewgroup.measure(view.java:20151)在Android.view.viewgroup.measure(view.java:20151)在Android.widget.line在Android.widget.v7.widget.framelayout.onMeasure(framelayout.java:194)在Android.widget.linearlayout.java:1464)android.widget.linearlayout.measurevertic(linearlayout.java:747)android.widget.linearlayout.onMeasur(linearlayout.java:629)android.View.viewgroup.measur(View.java:20151)android.View.viewgroup.measur(View.java:20151)android.View.View.measure(widget.linearlayout.MeasureChildbeRelayout(linearlayout.java:1464),地址为Android.widget.linearlayout.measureVertic(linearlayout.java:747),地址为Android.widget.linearlayout.onMeasure(linearlayout.java:629),地址为Android.View.viewgroup.measure(View.java:20151),地址为Android.View.viewgroup.measure(View.java:20151),视图.java:20151)在Android.view.viewrootimpl.PerformMeasure(viewrootimpl.java:2594)在Android.vi

共有1个答案

柳星晖
2023-03-14
  • 纠正您的片段节。
  • 哪里是DBoncreate(SQLiteDatabase DB).

oncreate(SQLiteDatabase db)这是我们需要编写create table语句的地方。这在创建数据库时调用。

代码

public class TabOneFragment extends Fragment implements SearchView.OnQueryTextListener {
public Db db ;

   @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.tab_one_fragment, container, false);
        db = new Db(getActivity());

@Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_TABLE_STATEMENT);
    }
 类似资料:
  • 我试图遵循官方google文档https://developer.android.com/tools/data-binding/guide.html中的数据绑定示例 只是我试图将数据投标应用于一个片段,而不是一个活动。 我当前在编译时遇到的错误是 我怀疑不知道它应该绑定到哪个布局文件-因此出现错误。有什么建议吗?

  • 我正在尝试通过将数据与接口传递给片段来将数据从对话片段获取到片段。到目前为止,我知道首先是因为它的片段,我需要在MainActive上实现接口,并从那里将数据发送到我想要的任何片段。我明白,但我不知道如何做到这一点。到目前为止,我已经在MainActive中实现了接口,我正在获取数据,但我不知道如何将其发送到片段。 主要活动 对话片段-此对话片段从画廊/相机获取图片 片段-此片段应从dialogf

  • 现在,我想使用Parse添加服务器拉请求,将列表中的数据添加到适配器,并在用户查看页面后填充recyclerview,这样 1)我是否应该添加setUserVisisbleHint中的所有代码,并只添加0.5秒延迟,以便在调用setContentView后执行它,以确保不出现空指针异常错误或 2)是否有更好的方法/其他功能可以实现相同的功能?

  • 我正在尝试设置一个PostgreSQL容器(https://hub.docker.com/_/Postgres/)。我有一些来自当前PostgreSQL实例的数据。我从中复制了它,并希望将它设置为PostgreSQL容器的卷。 但我得到了同样的错误,我做错了什么? 我使用pg_dumpall获得了SQL,并将其放入/docker-entrypoint-initdb.d中,但每次执行时都会执行该文件

  • 我试图使用另一个片段中的数据填充我的Listview。 我可以从另一个片段获取数据,但当我尝试创建listview对象时,它返回null。 结果,该应用程序正在崩溃。 我从一个片段中获取用户的数据,然后从另一个片段中调用一个方法来传递数据。我正在第二个方法的poplist()方法中创建listview对象和数组适配器。但是,由于空指针异常,应用程序正在崩溃。请帮忙。 我尝试了以下方法,但不起作用

  • 根据谷歌的文档: 现在可以在片段中嵌入片段。这对于各种情况都很有用,在这些情况下,您需要将动态和可重用的UI组件放置到本身是动态和可重用的UI组件中。例如,如果使用ViewPager创建左右滑动并占用大部分屏幕空间的片段,现在可以将片段插入每个片段页面。要嵌套片段,只需对要添加片段的片段调用getChildFragmentManager()。这将返回一个FragmentManager,您可以像通常