ActiveAndroid SQLite exception "No such table"

I have a problem with active-android. I am trying to find the user's location, number of passengers and general direction. I want to save them in the phone storage in a table called "Split" using activeAndroid. But whenever I call the save() method, I get a long list of errors. I tried reinstalling the application and changing the name of my database in the manifest, but none of these solutions worked. Please keep in mind that I am very new to programming, so if possible, act as if I were 5. Thank you :)

Here is the output of LogCat

 11-03 23:27:51.094 2905-2905/dk.specialisering.splitcab E/SQLiteLog﹕ (1) no such table: Splits 11-03 23:27:51.115 2905-2905/dk.specialisering.splitcab E/SQLiteDatabase﹕ Error inserting passengers=1 Id=null startLong=9.92773733 direction=North startLat=57.0487396 android.database.sqlite.SQLiteException: no such table: Splits (code 1): , while compiling: INSERT INTO Splits(passengers,Id,startLong,direction,startLat) VALUES (?,?,?,?,?) at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1118) at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:691) at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58) at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31) at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1589) at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1461) at com.activeandroid.Model.save(Model.java:153) at dk.specialisering.splitcab.MainActivity.save(MainActivity.java:127) at dk.specialisering.splitcab.MainActivity$1.onClick(MainActivity.java:37) at android.view.View.performClick(View.java:4475) at android.view.View$PerformClick.run(View.java:18786) at android.os.Handler.handleCallback(Handler.java:730) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:5419) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) at dalvik.system.NativeStart.main(Native Method) 11-03 23:27:51.175 2905-2905/dk.specialisering.splitcab E/SQLiteLog﹕ (1) no such table: Splits 11-03 23:27:51.175 2905-2905/dk.specialisering.splitcab E/SQLiteDatabase﹕ Error inserting passengers=1 Id=null startLong=9.92773733 direction=North startLat=57.0487396 android.database.sqlite.SQLiteException: no such table: Splits (code 1): , while compiling: INSERT INTO Splits(passengers,Id,startLong,direction,startLat) VALUES (?,?,?,?,?) at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1118) at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:691) at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58) at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31) at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1589) at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1461) at com.activeandroid.Model.save(Model.java:153) at dk.specialisering.splitcab.MainActivity.save(MainActivity.java:127) at dk.specialisering.splitcab.MainActivity$1.onClick(MainActivity.java:37) at android.view.View.performClick(View.java:4475) at android.view.View$PerformClick.run(View.java:18786) at android.os.Handler.handleCallback(Handler.java:730) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:5419) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) at dalvik.system.NativeStart.main(Native Method) 

Here is my Model class for a table

 @Table(name = "Splits") public class Splits extends Model { @Column(name = "startLat") public double startLat; @Column(name = "startLong") public double startLong; @Column(name = "passengers") public int passengers; @Column(name = "direction") public String direction; public Splits() { super(); } public Splits(double startLat, double startLong, int passengers, String direction) { this.startLat = startLat; this.startLong = startLong; this.passengers = passengers; this.direction = direction; } } 

My activity

  package dk.specialisering.splitcab; import android.app.Activity; import android.content.Context; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.media.Image; import android.os.Bundle; import android.view.View; import android.widget.ArrayAdapter; import android.widget.ImageButton; import android.widget.Spinner; import android.widget.TextView; import com.activeandroid.ActiveAndroid; import dk.specialiserng.model.Splits; public class MainActivity extends Activity { TextView textLat; TextView textLong; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final ImageButton btn = (ImageButton)findViewById(R.id.imgBtn); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { save(); } }); ActiveAndroid.initialize(this); populateSpinners(); initializeLocation(); } private class myLocationListener implements LocationListener{ @Override public void onLocationChanged(Location location) { if(location != null) { double pLong = location.getLongitude(); double pLat = location.getLatitude(); textLat.setText(Double.toString(pLat)); textLong.setText((Double.toString(pLong))); } } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onProviderEnabled(String provider) { } @Override public void onProviderDisabled(String provider) { } } public void populateSpinners() { Spinner passengerSpinner = (Spinner) findViewById(R.id.ddlPassengers); Spinner directionSpinner = (Spinner) findViewById(R.id.ddlDirection); // Create an ArrayAdapter using the string array and a default spinner layout ArrayAdapter<CharSequence> passengerAdapter = ArrayAdapter.createFromResource(this, R.array.noOfPassengers, android.R.layout.simple_spinner_item); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.splitDirection, android.R.layout.simple_spinner_item); // Specify the layout to use when the list of choices appears passengerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // Apply the adapter to the spinner passengerSpinner.setAdapter(passengerAdapter); directionSpinner.setAdapter(adapter); } public void initializeLocation() { textLat = (TextView) findViewById(R.id.textLat); textLong = (TextView) findViewById(R.id.textLong); LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); LocationListener ll = new myLocationListener(); Location lastLocation = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll); if (lastLocation != null) { textLat.setText(Double.toString(lastLocation.getLatitude())); textLong.setText(Double.toString(lastLocation.getLongitude())); } } public void save() { Spinner pasSpin = (Spinner)findViewById(R.id.ddlPassengers); Spinner dirSpin = (Spinner)findViewById(R.id.ddlDirection); double latitude = Double.parseDouble(textLat.getText().toString()); double longitude = Double.parseDouble(textLong.getText().toString()); int passengers = Integer.parseInt(pasSpin.getSelectedItem().toString()); String direction = dirSpin.getSelectedItem().toString(); Splits splits = new Splits(latitude, longitude, passengers, direction); splits.save(); } } 

My layout

 <RelativeLayout 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:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" android:text="Your Position in latitude and longitude" android:id="@+id/textView" android:layout_alignParentTop="true" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" android:id="@+id/textLat" android:layout_below="@+id/textView" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_alignRight="@+id/textView" android:layout_alignEnd="@+id/textView" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" android:id="@+id/textLong" android:layout_below="@+id/textLat" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_alignRight="@+id/textLat" android:layout_alignEnd="@+id/textLat" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" android:text="Number of Splitters in your party" android:id="@+id/textView2" android:layout_below="@+id/textLong" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" /> <Spinner android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/ddlPassengers" android:layout_below="@+id/textView2" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:spinnerMode="dropdown" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" android:text="The direction you will be going" android:id="@+id/textView3" android:layout_below="@+id/ddlPassengers" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <Spinner android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/ddlDirection" android:layout_below="@+id/textView3" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:spinnerMode="dropdown" /> <ImageButton android:layout_width="200dp" android:layout_height="90dp" android:scaleType="fitCenter" android:id="@+id/imgBtn" android:src="@drawable/gotitbtn" android:background="@android:color/transparent" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" /> </RelativeLayout> 

Hope someone can help, I know I sent a bunch, but now I am desperately desperate. thanks in advance

+7
java android database sqlite activeandroid
source share
6 answers

although late, I hope this help.

from the official ActiveAndroid page on github:

“This is because ActiveAndroid generates a scheme if there is no existing database file . To“ restore ”a scheme after creating a new model, the easiest way is to remove the application from the emulator and allow it to be completely reinstalled . This is because it clears the database file data and launches ActiveAndroid to recreate tables based on annotated models in the project. "

+15
source share

Increase your AA_DB_VERSION in your manifest. This will force ActiveAndroid to restore your circuit.

+9
source share

It seems you forgot to call super () in the model class in the constructor function:

 public Splits(double startLat, double startLong, int passengers, String direction) { super(); this.startLat = startLat; this.startLong = startLong; this.passengers = passengers; this.direction = direction; } 

Another possibility is that you did not declare your Model class in the manifest file.

+1
source share

There seems to be no table called Splits in your db. If you made changes to your database and are testing your application on one real device (not an emulator), you will need to remove the application from the device (or at least its data) in order to update your database. Hope this helps =)

0
source share

You may have configured ActiveAndroid incorrectly. Check out this tutorial in the General Questions section.

0
source share

This initialization code:

  ActiveAndroid.initialize(this); 

goes to the Application class. This way you can extend the Application class and use initialization inside OnCreate. how

 public class MyApplication extends Application{ @Override public void onCreate() { super.onCreate(); ActiveAndroid.initialize(this); } } 

Make sure you use this application class in AndroidManifest.xml as the application. i.e,

 <application android:name="com.exampleapp.MyApplication" ...> 

Contact: https://github.com/pardom/ActiveAndroid/wiki/Getting-started

0
source share

All Articles