我的数据库有一个名为“ tbl”的表,但错误提示:未找到表“ tbl”]]
DataBase.java =>如以下所示
public class DataBase extends SQLiteOpenHelper { private Context context; public DataBase(@Nullable Context context) { super(context, info_db.Data_Name, null, info_db.DataBase_Version); this.context = context; IsDatabase(); } @Override public void onCreate(SQLiteDatabase db) { } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } private void IsDatabase() { File check = new File(info_db.Package); if (!check.exists()) { check.mkdir(); } check = context.getDatabasePath(info_db.Data_Name); if (!check.exists()) { try { copyDataBase(); } catch (IOException e) { e.printStackTrace(); } } } private void copyDataBase() throws IOException { InputStream myInput = context.getAssets().open(info_db.DataBase_Source); String outFileName = info_db.Package + info_db.DataBase_Name; OutputStream myOutput = new FileOutputStream(outFileName); byte[] buffer = new byte[1024]; int length; while ((length = myInput.read(buffer)) > 0) { myOutput.write(buffer, 0, length); } myOutput.flush(); myOutput.close(); myInput.close(); } public List<info_Data> fetchmaindata() { SQLiteDatabase db = this.getReadableDatabase(); List<info_Data> data = new ArrayList<>(); String query ="SELECT "+info_db.Data_Name+","+info_db.Data_Body+","+info_db.Data_Fav+","+info_db.Data_Image+" FROM "+info_db.Table_Name; Cursor cursor = db.rawQuery(query,null); if (cursor.moveToFirst()){ do { info_Data info = new info_Data(); info.setName(cursor.getString(cursor.getColumnIndex(info_db.Data_Name))); info.setBody(cursor.getString(cursor.getColumnIndex(info_db.Data_Body))); info.setFav(cursor.getInt(cursor.getColumnIndex(info_db.Data_Fav))); info.setImage(cursor.getString(cursor.getColumnIndex(info_db.Data_Image))); data.add(info); }while (cursor.moveToNext()); } cursor.close(); db.close(); return data; } }
FragMain.java =>作为波纹管
public class FragMain extends Fragment { public FragMain() { // Required empty public constructor } private RecyclerView recyclerView; private AdapterMain adapter; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment DataBase db = new DataBase(getActivity()); List<info_Data> data = db.fetchmaindata(); db.close(); View view = inflater.inflate(R.layout.fragment_frag_main, container, false); recyclerView = (RecyclerView) view.findViewById(R.id.main_re); adapter = new AdapterMain(getActivity(), postdata(data)); recyclerView.setAdapter(adapter); recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); return view; } private List<info> postdata(List<info_Data> db) { List<info> data = new ArrayList<>(); //String name[] = {"بخش هشتم", "بخش هفتم", "بخش ششم", "بخش پنجم", "بخش چهارم", "بخش سوم", "بخش دوم"}; //int pic[] = {R.drawable.img, R.drawable.img, R.drawable.img, R.drawable.img, R.drawable.img, R.drawable.img, R.drawable.img}; for (int i = 0; i < db.size(); i++) { info cur = new info(); cur.title = db.get(i).getName(); String uri ="@drawable/"+db.get(i).getImage(); int iconid = getResources().getIdentifier(uri, null, getActivity().getPackageName()); cur.iconid = iconid; cur.body = db.get(i).getBody(); data.add(cur); } return data; } }
和logcat中的错误=>如下所示
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.af.sawalebast/com.af.sawalebast.MainActivity}: android.view.InflateException: Binary XML file line #26: Error inflating class fragment at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2327) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2392) at android.app.ActivityThread.access$800(ActivityThread.java:153) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1305) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5293) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) Caused by: android.view.InflateException: Binary XML file line #26: Error inflating class fragment at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:763) at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) at android.view.LayoutInflater.rInflate(LayoutInflater.java:809) at android.view.LayoutInflater.rInflate(LayoutInflater.java:809) at android.view.LayoutInflater.inflate(LayoutInflater.java:504) at android.view.LayoutInflater.inflate(LayoutInflater.java:414) at android.view.LayoutInflater.inflate(LayoutInflater.java:365) at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555) at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161) at com.af.sawalebast.MainActivity.onCreate(MainActivity.java:19) at android.app.Activity.performCreate(Activity.java:5990) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2280) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2392) at android.app.ActivityThread.access$800(ActivityThread.java:153) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1305) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5293) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) Caused by: android.database.sqlite.SQLiteException: no such table: tbl (code 1): , while compiling: SELECT name,body,fav,image FROM tbl at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889) at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500) at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58) at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37) at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44) at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1316) at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1255) **at com.af.sawalebast.DataBase.fetchmaindata(DataBase.java:74) at com.af.sawalebast.FragMain.onCreateView(FragMain.java:33)** at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2600) at androidx.fragment.app.FragmentManagerImpl.ensureInflatedFragmentView(FragmentManagerImpl.java:1138) at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:851) at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1133) at androidx.fragment.app.FragmentManagerImpl.addFragment(FragmentManagerImpl.java:1393) at androidx.fragment.app.FragmentManagerImpl.onCreateView(FragmentManagerImpl.java:3205) at androidx.fragment.app.FragmentController.onCreateView(FragmentController.java:134) at androidx.fragment.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:357) at androidx.fragment.app.FragmentActivity.onCreateView(FragmentActivity.java:336) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:733) at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) at android.view.LayoutInflater.rInflate(LayoutInflater.java:809) at android.view.LayoutInflater.rInflate(LayoutInflater.java:809) at android.view.LayoutInflater.inflate(LayoutInflater.java:504) at android.view.LayoutInflater.inflate(LayoutInflater.java:414) at android.view.LayoutInflater.inflate(LayoutInflater.java:365) at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555) at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161) at com.af.sawalebast.MainActivity.onCreate(MainActivity.java:19) at android.app.Activity.performCreate(Activity.java:5990) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2280) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2392) at android.app.ActivityThread.access$800(ActivityThread.java:153) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1305) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5293) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
感谢所有人
我的数据库有一个名为“ tbl”的表,但错误提示:未找到表“ tbl” DataBase.java =>由于下面的公共类DataBase扩展了SQLiteOpenHelper {private Context context;公共...
最可能的原因是复制到资产中的数据库文件没有这样的表。