糖 ORM 和 Android
Sugar ORM and Android
按照文档操作后,我成功添加了 jars 并实现了示例代码:
public class Book extends SugarRecord{
String title;
String edition;
public Book(){
}
public Book(String title, String edition){
this.title = title;
this.edition = edition;
}
}
我的主要 Activity 是:
public class MainActivity extends Activity implements View.OnClickListener {
Button btnAdd;
EditText txtedition, txttitle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnAdd = (Button) findViewById(R.id.btnadd);
btnAdd.setOnClickListener(this);
txtedition = (EditText) findViewById(R.id.txtedition);
txttitle = (EditText) findViewById(R.id.txttitle);
}
@Override
public void onClick(View v) {
String edition = txtedition.getText().toString();
String title = txttitle.getText().toString();
switch (v.getId()) {
case R.id.btnadd:
Book book = new Book(title, edition);
book.save();
break;
}
}
}
我的应用程序构建成功,但是当我按下添加按钮时,出现以下异常:
FATAL EXCEPTION: main
Process: com.example.agds.demo, PID: 7939
android.database.sqlite.SQLiteException: no such table: BOOK (code 1): , while compiling: INSERT OR REPLACE INTO BOOK(TITLE,ID,EDITION) VALUES (?,?,?)
#################################################################
Error Code : 1 (SQLITE_ERROR)
Caused By : SQL(query) error or missing database.
(no such table: BOOK (code 1): , while compiling: INSERT OR REPLACE INTO BOOK(TITLE,ID,EDITION) VALUES (?,?,?))
#################################################################
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1058)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:623)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:59)
at android.database.sqlite.SQLiteStatement.(SQLiteStatement.java:31)
at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1607)
at com.orm.SugarRecord.save(SugarRecord.java:266)
at com.orm.SugarRecord.save(SugarRecord.java:360)
at com.example.agds.demo.MainActivity.onClick(MainActivity.java:49)
at android.view.View.performClick(View.java:5702)
at android.widget.TextView.performClick(TextView.java:10888)
at android.view.View$PerformClick.run(View.java:22541)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7229)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
有什么建议吗?
您是否已将这些元数据添加到您的 中的 AndroidManifest 中?
<meta-data android:name="DATABASE" android:value="sugar_example.db" />
<meta-data android:name="VERSION" android:value="2" />
<meta-data android:name="QUERY_LOG" android:value="true" />
<meta-data android:name="DOMAIN_PACKAGE_NAME" android:value="com.example.yourmodels" />
另外,把这个放在你的<aplication>
android:name="com.orm.SugarApp"
这是库中的一个应用程序 class。
https://github.com/chennaione/sugar/blob/master/library/src/main/java/com/orm/SugarApp.java
或者,如果您已经有自己的应用程序 class,您可以扩展它。
public class YourApp extends SugarApp {
}
请注意,如果您在 Android Studio 中启用了 Instant 运行,Sugar 将无法工作(至少它不会创建新表)。
按照文档操作后,我成功添加了 jars 并实现了示例代码:
public class Book extends SugarRecord{
String title;
String edition;
public Book(){
}
public Book(String title, String edition){
this.title = title;
this.edition = edition;
}
}
我的主要 Activity 是:
public class MainActivity extends Activity implements View.OnClickListener {
Button btnAdd;
EditText txtedition, txttitle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnAdd = (Button) findViewById(R.id.btnadd);
btnAdd.setOnClickListener(this);
txtedition = (EditText) findViewById(R.id.txtedition);
txttitle = (EditText) findViewById(R.id.txttitle);
}
@Override
public void onClick(View v) {
String edition = txtedition.getText().toString();
String title = txttitle.getText().toString();
switch (v.getId()) {
case R.id.btnadd:
Book book = new Book(title, edition);
book.save();
break;
}
}
}
我的应用程序构建成功,但是当我按下添加按钮时,出现以下异常:
FATAL EXCEPTION: main Process: com.example.agds.demo, PID: 7939 android.database.sqlite.SQLiteException: no such table: BOOK (code 1): , while compiling: INSERT OR REPLACE INTO BOOK(TITLE,ID,EDITION) VALUES (?,?,?) ################################################################# Error Code : 1 (SQLITE_ERROR) Caused By : SQL(query) error or missing database. (no such table: BOOK (code 1): , while compiling: INSERT OR REPLACE INTO BOOK(TITLE,ID,EDITION) VALUES (?,?,?)) ################################################################# at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1058) at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:623) at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:59) at android.database.sqlite.SQLiteStatement.(SQLiteStatement.java:31) at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1607) at com.orm.SugarRecord.save(SugarRecord.java:266) at com.orm.SugarRecord.save(SugarRecord.java:360) at com.example.agds.demo.MainActivity.onClick(MainActivity.java:49) at android.view.View.performClick(View.java:5702) at android.widget.TextView.performClick(TextView.java:10888) at android.view.View$PerformClick.run(View.java:22541) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:158) at android.app.ActivityThread.main(ActivityThread.java:7229) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
有什么建议吗?
您是否已将这些元数据添加到您的
<meta-data android:name="DATABASE" android:value="sugar_example.db" />
<meta-data android:name="VERSION" android:value="2" />
<meta-data android:name="QUERY_LOG" android:value="true" />
<meta-data android:name="DOMAIN_PACKAGE_NAME" android:value="com.example.yourmodels" />
另外,把这个放在你的<aplication>
android:name="com.orm.SugarApp"
这是库中的一个应用程序 class。
https://github.com/chennaione/sugar/blob/master/library/src/main/java/com/orm/SugarApp.java
或者,如果您已经有自己的应用程序 class,您可以扩展它。
public class YourApp extends SugarApp {
}
请注意,如果您在 Android Studio 中启用了 Instant 运行,Sugar 将无法工作(至少它不会创建新表)。