我是Android工作室的新手,我最近一直在开发一个应用程序,允许您下订单,并为了订购您添加的东西到购物车,然后可以从您的帐户页面查看详细信息。单击购物车时,应用程序崩溃并显示:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.sakaaz.sakaaz, PID: 16627
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sakaaz.sakaaz/edmt.dev.androidsakaaz.Cart}: java.lang.NumberFormatException: For input string: "s%"
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: java.lang.NumberFormatException: For input string: "s%"
at java.lang.Integer.parseInt(Integer.java:521)
at java.lang.Integer.parseInt(Integer.java:556)
at edmt.dev.androidsakaaz.Cart.loadListMakeup(Cart.java:68)
at edmt.dev.androidsakaaz.Cart.onCreate(Cart.java:56)
at android.app.Activity.performCreate(Activity.java:6679)
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)
我的数据库看起来像:
public class Database extends SQLiteAssetHelper {
private static final String DATABASE_NAME = "sakaazDB.db";
private static final int DB_VER=1;
public Database(Context context) {
super( context, DATABASE_NAME, null , DB_VER );
}
public List<Order> getCarts()
{
SQLiteDatabase db=getReadableDatabase();
SQLiteQueryBuilder qb= new SQLiteQueryBuilder();
String[] sqlSelect={"ProductName", "ProductId", "Quantity", "Price", "Discount"};
String sqlTable="OrderDetail";
qb.setTables( sqlTable );
Cursor c = qb.query(db,sqlSelect,null,null,null,null,null);
final List<Order> result = new ArrayList<>();
if (c.moveToFirst())
{
do{
result.add( new Order( c.getString(c.getColumnIndex("ProductId")),
c.getString(c.getColumnIndex("ProductName")),
c.getString(c.getColumnIndex("Quantity")),
c.getString(c.getColumnIndex("Price")),
c.getString(c.getColumnIndex("Discount"))
));
}while (c.moveToNext());
}
return result;
}
public void addToCart (Order order)
{
SQLiteDatabase db = getReadableDatabase();
String query = String.format("INSERT INTO OrderDetail(ProductId, ProductName, Quantity, Price, Discount) VALUES ('%s','%s','%s','%s','%s');",
order.getProductId(),
order.getProductName(),
order.getQuantity(),
order.getPrice(),
order.getDiscount());
db.execSQL(query);
}
public void cleanCart()
{
SQLiteDatabase db = getReadableDatabase();
String query = "DELETE FROM OrderDetail";
db.execSQL(query);
}
}
购物车看起来像:
public class Cart extends AppCompatActivity {
RecyclerView recyclerView;
RecyclerView.LayoutManager layoutManager;
FirebaseDatabase database;
DatabaseReference request;
TextView txtTotalPrice;
FButton btnPlace;
List<Order> cart = new ArrayList<>();
CartAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_cart );
//Firebase
database = FirebaseDatabase.getInstance();
request = database.getReference("Requests");
//Init
recyclerView= (RecyclerView)findViewById(R.id.listCart);
recyclerView.setHasFixedSize (true);
layoutManager= new LinearLayoutManager( this );
recyclerView.setLayoutManager( layoutManager );
txtTotalPrice = (TextView)findViewById( R.id.total);
btnPlace = (FButton)findViewById( R.id.btnPlaceOrder);
loadListMakeup();
}
private void loadListMakeup() {
cart = new Database(this).getCarts();
adapter = new CartAdapter( cart,this );
recyclerView.setAdapter( adapter );
//Calculate total price
int total=0;
for (Order order:cart)
total+=(Integer.parseInt( order.getPrice()))*(Integer.parseInt( order.getQuantity()));
Locale locale = new Locale( "en","US");
NumberFormat fmt = NumberFormat.getCurrencyInstance(locale);
txtTotalPrice.setText(fmt.format( total));
}
}
我是android studio的新手,这是我第一次使用它而且我很失落,因为我正在为高中IT项目做这个,所以请帮忙!
答案 0 :(得分:0)
..
SQLiteDatabase database = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("ProductId", order.getProductId());
//..your all data
database.insert("OrderDetail", null, values);
database.close();
希望这会有所帮助..
答案 1 :(得分:0)
根据LogCat,问题出在此行的格式中。
total+=(Integer.parseInt( order.getPrice()))*(Integer.parseInt( order.getQuantity()));
首先在调用Integer.parseInt()
将此setText()
方法替换为此
txtTotalPrice.setText(String.valueOf(total));
你的问题是在数据库中你为整数值调用了c.getString(),这就是你得到FormatException的原因。
替换为:
c.getString(c.getColumnIndex("Price")),
并检查您可能复制粘贴的任何其他地方,试图节省五秒钟的生命。
答案 2 :(得分:0)
您的代码中存在多个错误
1.替换你的
getReadableDatabase();
与
getWritableDatabase();
然后,
2.检查以下方法的值,然后返回精确的int值,否则将触发NumberformatException。
order.getPrice()//may be not an int
order.getQuantity()//may be not an int