有了SugarORM,我理解我可以做到这一点
public class Book extends SugarRecord<Book> {
String name;
String ISBN;
String title;
String shortSummary;
// defining a relationship
Author author;
}
Run Code Online (Sandbox Code Playgroud)
那么我怎样才能在Book.class上找到我可以由作者订购的内容.
我试过了
Book.find(Book.class, null, null, null, "author.id desc",null);;
Run Code Online (Sandbox Code Playgroud)
和
Book.find(Book.class, null, null, null, "author desc",null);;
Run Code Online (Sandbox Code Playgroud)
而这些都不会奏效
我正在使用Sugar ORM for db和Robolectric进行单元测试.使用Sugar ORM和Robolectric i一起关注这个问题.
我把我的代码放在startEverTestSugarAppAsFirst方法并运行的地方.
new PersonHandler(new Activity()).insertPeople();
Person p = Person.findById(Person.class, 1);
System.out.println(p.getName());
Run Code Online (Sandbox Code Playgroud)
它打印第一条记录的名称.到现在为止还挺好.
但是如果我注释掉//new PersonHandler(new Activity()).insertPeople();并再次运行,则不会返回任何记录并且会给出空指针异常.我认为Sugar ORM在第一次运行时将记录存储到某个地方,我可以在第二次访问这些记录.
另一方面,如果我运行模拟器,我将下面的代码放在我的主要活动的onCreate方法中,在第二次运行中注释掉第一行,我可以看到日志中打印的第一条记录.
new PersonHandler(this).insertPeople();
Person p = Person.findById(Person.class, 1);
Log.v("person", p.getName());
Run Code Online (Sandbox Code Playgroud)
那么,在单元测试结束后,Sugar ORM会删除db吗?或者它保存数据库的位置,所以我可以一遍又一遍地使用它?
我目前正在为我的Android应用程序使用Sugar ORM和Android Async Http Client.
我阅读了Sugar ORM的文档并完成了那里写的内容.我的HttpClient使用单例模式并提供调用某些API的方法.
现在是关于它的坏部分.我无法将数据持久保存到由Sugar ORM创建的数据库中.这是调用API的方法:
public void getAvailableMarkets(final Context context, final MarketAdapter adapter) {
String url = BASE_URL.concat("/markets.json");
client.addHeader("Content-Type", "application/json");
client.addHeader("Accept", "application/json");
client.get(context, url, null, new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, JSONArray response) {
Log.i(TAG, "Fetched available markets from server: " + response.toString());
Result<Markets> productResult = new Result<Markets>();
productResult.setResults(new Gson().<ArrayList<Markets>>fromJson(response.toString(),
new TypeToken<ArrayList<Markets>>() {
}.getType()));
ArrayList<Markets> marketsArrayList = productResult.getResults();
// This lines tells me that there are no entries …Run Code Online (Sandbox Code Playgroud) 我正在使用Android应用程序,我正在使用Suger ORM进行数据库操作.现在我有一个场景,我必须检查"SomeTable"是否不存在然后创建它并插入记录,如果表已经存在并且有一些记录我必须更新记录.我已编写此代码以检查表是否不存在然后创建记录并保存它.
Total_Budget_List = Total_Budget.listAll(Total_Budget.class);
if (Total_Budget_List.size() == 0)
{
for (int i=0;i<Total_Budget_List.size();i++)
{
totalbudget = new Total_Budget(Select_Members.get(i).getId()+"",CurrentDate,per_person_budget+"");
totalbudget.save();
}
}
Run Code Online (Sandbox Code Playgroud)
但我得到的数据库中没有这样的表.现在我如何检查表是否存在并且该表中是否有任何记录.
我正在尝试将Sugar ORM(v 1.3)集成到我的Android应用程序中,并且在尝试保存新创建的实体时我不断遇到崩溃(NullPointerException).
这是我的崩溃......
01-21 06:02:36.012 2856-2856/com.spuddmobile.kel E/AndroidRuntime? FATAL EXCEPTION: main
Process: com.spuddmobile.kel, PID: 2856
java.lang.NullPointerException
at com.orm.SugarRecord.save(SugarRecord.java:109)
at com.orm.SugarRecord.save(SugarRecord.java:45)
at com.spuddmobile.kel.Fragments.NewAppFragment._SaveForm(NewAppFragment.java:231)
at com.spuddmobile.kel.Fragments.NewAppFragment.onMenuItemSelection(NewAppFragment.java:175)
at com.spuddmobile.kel.Activities.MainActivity.onOptionsItemSelected(MainActivity.java:89)
at android.app.Activity.onMenuItemSelected(Activity.java:2600)
at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:1012)
at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)
at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
at com.android.internal.view.menu.ActionMenuView.invokeItem(ActionMenuView.java:546)
at com.android.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:115)
at android.view.View.performClick(View.java:4438)
at android.view.View$PerformClick.run(View.java:18422)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)
这是我的AppManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.spuddmobile.kel" >
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:name="com.orm.SugarApp"
android:theme="@style/AppTheme" >
<meta-data …Run Code Online (Sandbox Code Playgroud) 我正在开发一款Android应用.我按照Sugar ORM网站上的说明创建了一个数据库表.我做的一切都是一样的,我已经仔细检查了一下.
问题是,当应用程序在Android 5.0或更高版本上运行时,执行查询时,它会抛出SQLiteException并且不会显示此类表.相同的代码在KitKat设备上执行正常,并导致正确的结果,没有任何异常.
Sugar ORM支持Andriod 5.0吗?
我在我的应用程序的第一个版本中使用了SugarORM.现在,我正在开发第二个版本,它已将新表添加到DB中.
根据SugarORM 文档 "Sugar将自动为新实体创建表,因此您的迁移脚本只需要满足对现有表的更改."
这是我做的:
<meta-data android:name="VERSION" android:value="2" />public class NewModel extends SugarRecord<NewModel>在运行应用程序时,Sugar创建了新表,但不幸的是,它还删除/创建了现有表,删除了本地保存的所有数据!
我还尝试通过添加2.sql包含我的CREATE TABLE NEW_MODEL语句的迁移脚本文件来自己创建新表.不幸的是,它抛出了一个异常"Table已经存在",因为Sugar创建了新表,然后尝试运行我的脚本!
有什么建议?
我有两个实体类,project和projectList.ProjectList具有属性id和包含项目列表的HasMap.我能够执行INSERT操作而没有任何错误,但是在检索我的HashMap列表时为null.Tried插入一个arrayList,这也返回null.
是否支持在SugarORM中持久化集合类,如HashMap或ArrayList?
请帮助.谢谢.
ProjectList实体类.
public class ProjectList extends SugarRecord<ProjectList> {
private int projectListId;
private HashMap<String, Project> projects;
/** Empty Constructor */
public ProjectList(Context context) {
super(context);
}
public ProjectList(Context context, int projectId,
HashMap<String, Project> projects) {
super(context);
this.projectListId = projectId;
this.projects = projects;
}
/**
* @return the projectListId
*/
public int getProjectListId() {
return projectListId;
}
/**
* @param projectListId
* the projectListId to set
*/
public void setProjectListId(int projectListId) {
this.projectListId = projectListId;
}
/**
* @return the …Run Code Online (Sandbox Code Playgroud) 在我看来,SugarORM是最容易使用的SQLite库,并且证明对像我这样的初级Android开发人员非常有帮助.SugarORM自动创建表并为每个扩展SugarRecord的java类添加一个AUTO_INCREMENT id列.
插入新行可以很简单someJavaObject.save().但是,如果插入该行,我怎样才能获得插入的id?在PHP中我可以像$id = mysql_insert_id();插入后那样做.
我知道我可以获得表格中最后一行的id.但是新行的插入在某种程度上可能是非常不可预测的.假设我有一个活动和一个同时插入新行的服务,我想避免错误的ID.
在此先感谢您的帮助.
我对SugarOrm for Android非常满意,但我遇到了一个问题.我正在使用GSON进行Json序列化,我想摆脱SugarRecordid属性.我知道我应该使用@Table注释,然后再使用从序列化中排除特定领域@Expose,但与@Table注释下课我不能用.save(),delete()......方法的对象上,因为它是延长的情况SugarRecord.我不知道如何使用@Table注释来持久化对象.