I am studying a Master Detail Flow with SQLite Tutorial . I have not finished my app cause I have to make another things such like communication between fragments. My app is working good in smartphone emulator until now. Then, when I tried to run app in tablet, there is appearing this in logcat.
07-04 00:39:45.049 4373-4373/codigofacilito.applistacompras E/AndroidRuntime:
FATAL EXCEPTION: main
Process: codigofacilito.applistacompras, PID: 4373
java.lang.RuntimeException: Unable to start activity ComponentInfo{codigofacilito.applistacompras/codigofacilito.applistacompras.Activities.MainActivity}: android.view.InflateException: Binary XML file line #13: Binary XML file line #13: Error inflating class fragment
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: android.view.InflateException: Binary XML file line #13: Binary XML file line #13: Error inflating class fragment
Caused by: android.view.InflateException: Binary XML file line #13: Error inflating class fragment
Caused by: android.database.sqlite.SQLiteException: no such table: listas (code 1): , while compiling: SELECT * FROM listas
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:1318)
at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1257)
at codigofacilito.applistacompras.Helpers.DataBaseHelper.fetchAlllist(DataBaseHelper.java:264)
at codigofacilito.applistacompras.Fragments.ListaFragment.onCreateView(ListaFragment.java:48)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2239)
at android.support.v4.app.FragmentManagerImpl.ensureInflatedFragmentView(FragmentManager.java:1507)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1303)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1502)
at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1737)
at android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:3512)
at android.support.v4.app.FragmentController.onCreateView(FragmentController.java:120)
at android.support.v4.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:330)
at android.support.v4.app.BaseFragmentActivityApi14.onCreateView(BaseFragmentActivityApi14.java:39)
at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:75)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:777)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:858)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
at android.view.LayoutInflater.inflate(LayoutInflater.java:518)
at android.view.LayoutInflater.inflate(LayoutInflater.java:426)
at android.view.LayoutInflater.inflate(LayoutInflater.java:377)
at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:289)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139)
at codigofacilito.applistacompras.Activities.MainActivity.onCreate(MainActivity.java:18)
at android.app.Activity.performCreate(Activity.java:6679)
07-04 00:39:45.049 4373-4373/codigofacilito.applistacompras E/AndroidRuntime: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
This is my code
activity_main(sw600dp)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:baselineAligned="false"
android:divider="?android:attr/dividerHorizontal"
android:orientation="horizontal"
android:showDividers="middle"
tools:context=".Activities.MainActivity">
<fragment
android:id="@+id/list_fragment"
android:name="codigofacilito.applistacompras.Fragments.ListaFragment"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
tools:context="codigofacilito.applistacompras.Fragments.ListaFragment"
tools:layout="@android:layout/list_content" />
<FrameLayout
android:id="@+id/list_item"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2" />
</LinearLayout>
MainActivity
package codigofacilito.applistacompras.Activities;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import codigofacilito.applistacompras.Fragments.ItemsFragment;
import codigofacilito.applistacompras.Interfaces.CallBacks;
import codigofacilito.applistacompras.R;
public class MainActivity extends AppCompatActivity implements CallBacks{
public boolean mTwoPane;
private static final String ELEMENTS_TAG = "ELEMENTS";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(findViewById(R.id.list_item) != null){
mTwoPane = true;
if(savedInstanceState == null){
getSupportFragmentManager().beginTransaction()
.replace(R.id.list_item, new ItemsFragment(),
ELEMENTS_TAG)
.commit();
}else {
mTwoPane = false;
}
}
}
public boolean getmTwoPane(){
return this.mTwoPane;
}
@Override
public void onItemSelected(String nombreLista, String lista) {
if(mTwoPane){
Bundle bundle = new Bundle();
bundle.putString("nombreLista",nombreLista);
bundle.putString("lista",lista);
ItemsFragment itemsFragment = new ItemsFragment();
itemsFragment.setArguments(bundle);
getSupportFragmentManager().beginTransaction().
replace(R.id.list_item,itemsFragment).
commit();
}else{
Intent intent = new Intent(this, ItemList.class);
intent.putExtra("nombreLista",nombreLista);
intent.putExtra("lista",lista);
startActivity(intent);
}
}
}
DataBaseHelper
import android.database.sqlite.SQLiteOpenHelper;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class DataBaseHelper extends SQLiteOpenHelper{
private static String DB_PATH =
"/data/data/codigofacilito.applistacompras/databases/";
private static String DB_NAME = "bdlistas.sqlite";
private SQLiteDatabase myDataBase;
private final Context myContext;
public DataBaseHelper(Context context){
super(context,DB_NAME,null,1);
this.myContext = context;
}
public void createDataBase() throws IOException{
boolean dbExist = checkDataBase();
SQLiteDatabase db_read = null;
if(dbExist){
}else{
db_read = this.getReadableDatabase();
db_read.close();
try{
copyDataBase();
}catch (IOException e){
throw new Error("Error copiando base de datos");
}
}
}
public boolean checkDataBase(){
SQLiteDatabase checkDB = null;
String myPath = DB_PATH+DB_NAME;
try {
checkDB = SQLiteDatabase.openDatabase(myPath, null,
SQLiteDatabase.OPEN_READWRITE);
}
catch (Exception e){
File dbFile = new File(DB_PATH+DB_NAME);
return dbFile.exists();
}
if(checkDB != null)
checkDB.close();
return checkDB != null ? true : false;
}
private void copyDataBase() throws IOException{
InputStream myInput = myContext.getAssets().open(DB_NAME);
String outFileName = DB_PATH+DB_NAME;
OutputStream myOutput = new FileOutputStream(outFileName);
/*int length;
while((length = myInput.read()) != -1){
myOutput.write(length);
}
myOutput.flush();
myOutput.close();
myInput.close();*/
byte[] buffer = new byte[1024];
int length;
while((length = myInput.read(buffer))!= -1){
if(length > 0){
myOutput.write(buffer,0,length);
}
}
myOutput.flush();
myOutput.close();
myInput.close();
}
public void openDatabase() throws SQLException{
String myPath = DB_PATH+DB_NAME;
myDataBase =
SQLiteDatabase.openDatabase(myPath,null,SQLiteDatabase.OPEN_READONLY);
}
public synchronized void close(){
if(myDataBase != null)
myDataBase.close();
super.close();
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
//COLOCAR CODIGO SQL PARA CREAR BD
try{
createDataBase();
}catch (IOException e){
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
//CODIGO DE LA ACTUALIZACIÓN
}
public Cursor fetchAlllist() throws SQLException{
Cursor cursor = myDataBase.rawQuery("SELECT * FROM listas",null);
if(cursor != null)
cursor.moveToFirst();
return cursor;
}
}
Thanks for your help. I appreciate it!.