尝试使用 Sugar ORM 插入两个字段时应用停止工作
App stops working when trying to insert two fields using Sugar ORM
我正在开发一个营养应用程序,我需要将食物名称及其卡路里保存到数据库中。我使用 Sugar ORM 作为我的 sqlite 数据库工具。当我尝试保存新记录时,应用程序停止工作,但没有给我任何错误消息!我是 android 的新手,所以请怜悯
这是我的 Java 实体代码 class:
import com.orm.SugarRecord;
import com.orm.dsl.Column;
import com.orm.dsl.Table;
@Table(name = "foods_name")
public class Foods extends SugarRecord{
@Column(name = "food_name")
private String foodName;
@Column(name = "calorie")
private String calorie;
public Foods() {
this.foodName = foodName;
this.calorie = calorie;
}
public Foods(String foodName, String calorie) {
this.foodName = foodName;
this.calorie = calorie;
}
}
这是我调用 class:
的时候
switch(item.getItemId()) {
case R.id.insert:
Dialog dialog = new Dialog(Dashboard.this);
dialog.setContentView(R.layout.insert);
dialog.setCanceledOnTouchOutside(true);
dialog.setTitle("Add a Food");
final EditText foodName = (EditText) dialog.findViewById(R.id.insertFood_txt);
final EditText calorieName = (EditText) dialog.findViewById(R.id.calorie_txt);
Button insert_btn = (Button) dialog.findViewById(R.id.insertFood_btn);
insert_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String food_name = foodName.getText().toString().trim();
String calorie = calorieName.getText().toString().trim();
foods = new Foods(food_name,calorie);
foods.save();
Toast.makeText(getApplicationContext(),"Food Added Successfully",Toast.LENGTH_SHORT).show();
}
});
dialog.show();
break;
我的xml数据插入布局如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/insert">
<EditText
android:id="@+id/insertFood_txt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Food Name"
android:inputType="textPersonName" />
<EditText
android:id="@+id/calorie_txt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Calorie"
android:inputType="numberDecimal" />
<Button
android:id="@+id/insertFood_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Add Food" />
</LinearLayout>
最后是我的清单文件:
<?xml version="1.0" encoding="utf-8"?>
<application
android:name=".appconfig.AppConfig"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
android:name="com.orm.SugarApp" > <!--Use this attribute verbatim-->
<meta-data android:name="DATABASE" android:value="nutrition.db" />
<meta-data android:name="VERSION" android:value="1" />
<meta-data android:name="QUERY_LOG" android:value="true" />
<meta-data android:name="DOMAIN_PACKAGE_NAME" android:value="com.example.niloufar.nutrition3.dataModel" />
<activity android:name=".Dashboard">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".BmiActivity" />
<activity android:name=".IdealWeight" />
<activity android:name=".GoalWeight"></activity>
</application>
我的Android监控日志:
`06-18 02:43:26.874 1009-1009/? I/art: Not late-enabling -Xcheck:jni (already on)
06-18 02:43:26.874 1009-1009/? W/art: Unexpected CPU variant for X86 using defaults: x86_64
06-18 02:43:26.890 1009-1016/? I/art: Debugger is no longer active
06-18 02:43:26.890 1009-1016/? I/art: Starting a blocking GC Instrumentation
06-18 02:43:26.961 1009-1009/? W/System: ClassLoader referenced unknown path: /data/app/com.example.niloufar.nutrition3-2/lib/x86_64
06-18 02:43:26.969 1009-1009/? I/InstantRun: starting instant run server: is main process
06-18 02:43:27.015 1009-1009/? W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
06-18 02:43:27.163 1009-1025/? I/OpenGLRenderer: Initialized EGL, version 1.4
06-18 02:43:27.163 1009-1025/? D/OpenGLRenderer: Swap behavior 1
06-18 02:43:27.163 1009-1025/? W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
06-18 02:43:27.164 1009-1025/? D/OpenGLRenderer: Swap behavior 0
06-18 02:43:27.182 1009-1009/? W/art: Before Android 4.1, method int android.support.v7.widget.ListViewCompat.lookForSelectablePosition(int, boolean) would have incorrectly overridden the package-private method in android.widget.ListView
`
在从设备上卸载数据库之前,您是否更新了数据库?
如果您更新数据库但不增加清单中的数据库版本,您的应用将会崩溃,
<meta-data
android:name="DATABASE"
android:value="your_database_name" />
<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="your_package_name" />
我发现了问题。
必须先禁用 Instant 运行。然后我增加了 Manifest 文件中的数据库版本并且应用程序工作了。
我正在开发一个营养应用程序,我需要将食物名称及其卡路里保存到数据库中。我使用 Sugar ORM 作为我的 sqlite 数据库工具。当我尝试保存新记录时,应用程序停止工作,但没有给我任何错误消息!我是 android 的新手,所以请怜悯 这是我的 Java 实体代码 class:
import com.orm.SugarRecord;
import com.orm.dsl.Column;
import com.orm.dsl.Table;
@Table(name = "foods_name")
public class Foods extends SugarRecord{
@Column(name = "food_name")
private String foodName;
@Column(name = "calorie")
private String calorie;
public Foods() {
this.foodName = foodName;
this.calorie = calorie;
}
public Foods(String foodName, String calorie) {
this.foodName = foodName;
this.calorie = calorie;
}
}
这是我调用 class:
的时候 switch(item.getItemId()) {
case R.id.insert:
Dialog dialog = new Dialog(Dashboard.this);
dialog.setContentView(R.layout.insert);
dialog.setCanceledOnTouchOutside(true);
dialog.setTitle("Add a Food");
final EditText foodName = (EditText) dialog.findViewById(R.id.insertFood_txt);
final EditText calorieName = (EditText) dialog.findViewById(R.id.calorie_txt);
Button insert_btn = (Button) dialog.findViewById(R.id.insertFood_btn);
insert_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String food_name = foodName.getText().toString().trim();
String calorie = calorieName.getText().toString().trim();
foods = new Foods(food_name,calorie);
foods.save();
Toast.makeText(getApplicationContext(),"Food Added Successfully",Toast.LENGTH_SHORT).show();
}
});
dialog.show();
break;
我的xml数据插入布局如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/insert">
<EditText
android:id="@+id/insertFood_txt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Food Name"
android:inputType="textPersonName" />
<EditText
android:id="@+id/calorie_txt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Calorie"
android:inputType="numberDecimal" />
<Button
android:id="@+id/insertFood_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Add Food" />
</LinearLayout>
最后是我的清单文件:
<?xml version="1.0" encoding="utf-8"?>
<application
android:name=".appconfig.AppConfig"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
android:name="com.orm.SugarApp" > <!--Use this attribute verbatim-->
<meta-data android:name="DATABASE" android:value="nutrition.db" />
<meta-data android:name="VERSION" android:value="1" />
<meta-data android:name="QUERY_LOG" android:value="true" />
<meta-data android:name="DOMAIN_PACKAGE_NAME" android:value="com.example.niloufar.nutrition3.dataModel" />
<activity android:name=".Dashboard">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".BmiActivity" />
<activity android:name=".IdealWeight" />
<activity android:name=".GoalWeight"></activity>
</application>
我的Android监控日志:
`06-18 02:43:26.874 1009-1009/? I/art: Not late-enabling -Xcheck:jni (already on)
06-18 02:43:26.874 1009-1009/? W/art: Unexpected CPU variant for X86 using defaults: x86_64
06-18 02:43:26.890 1009-1016/? I/art: Debugger is no longer active
06-18 02:43:26.890 1009-1016/? I/art: Starting a blocking GC Instrumentation
06-18 02:43:26.961 1009-1009/? W/System: ClassLoader referenced unknown path: /data/app/com.example.niloufar.nutrition3-2/lib/x86_64
06-18 02:43:26.969 1009-1009/? I/InstantRun: starting instant run server: is main process
06-18 02:43:27.015 1009-1009/? W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
06-18 02:43:27.163 1009-1025/? I/OpenGLRenderer: Initialized EGL, version 1.4
06-18 02:43:27.163 1009-1025/? D/OpenGLRenderer: Swap behavior 1
06-18 02:43:27.163 1009-1025/? W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
06-18 02:43:27.164 1009-1025/? D/OpenGLRenderer: Swap behavior 0
06-18 02:43:27.182 1009-1009/? W/art: Before Android 4.1, method int android.support.v7.widget.ListViewCompat.lookForSelectablePosition(int, boolean) would have incorrectly overridden the package-private method in android.widget.ListView
`
在从设备上卸载数据库之前,您是否更新了数据库? 如果您更新数据库但不增加清单中的数据库版本,您的应用将会崩溃,
<meta-data
android:name="DATABASE"
android:value="your_database_name" />
<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="your_package_name" />
我发现了问题。 必须先禁用 Instant 运行。然后我增加了 Manifest 文件中的数据库版本并且应用程序工作了。