2017-12-24 1 views
0

나는 android studio를 처음 사용하고 있으며 주문을하고 물건을 장바구니에 추가 한 다음 나중에 계정 페이지에서 세부 정보를 확인할 수있는 앱을 개발하고 있습니다. 카트를 클릭하거나 장바구니에 항목을 추가 할 때, 응용 프로그램은 추락이 나타납니다 :해결 방법 : java.util.UnknownFormatConversionException : Conversion = '' '?

E/AndroidRuntime: FATAL EXCEPTION: main 
    Process: com.sakaaz.sakaaz, PID: 30731 
    java.util.UnknownFormatConversionException: Conversion = ''' 
     at java.util.Formatter$FormatSpecifier.conversion(Formatter.java:2730) 
     at java.util.Formatter$FormatSpecifier.<init>(Formatter.java:2759) 
     at java.util.Formatter$FormatSpecifierParser.<init>(Formatter.java:2591) 
     at java.util.Formatter.parse(Formatter.java:2524) 
     at java.util.Formatter.format(Formatter.java:2472) 
     at java.util.Formatter.format(Formatter.java:2426) 
     at java.lang.String.format(String.java:2626) 
     at edmt.dev.androidsakaaz.Database.Database.addToCart(Database.java:55) 
     at edmt.dev.androidsakaaz.MakeupDetail$1.onClick(MakeupDetail.java:59) 
     at android.view.View.performClick(View.java:6257) 
     at android.view.View$PerformClick.run(View.java:23705) 
     at android.os.Handler.handleCallback(Handler.java:751) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:154) 
     at android.app.ActivityThread.main(ActivityThread.java:6836) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410) 

내가 무엇이 잘못되었는지 모르겠어요. 여기 내 데이터베이스 클래스입니다 :

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 = String.format("DELETE FROM OrderDetail"); 
     db.execSQL(query); 
    } 
} 

도와주세요!

+1

가능한 복제 (https://stackoverflow.com/questions/16713396/unknownformatconversionexception-is-caused-by-symbol-in- [(자), UnknownFormatConversionException가 인 String.format()에서 기호 '%'로 인한] 문자열 형식) –

답변

0

가변 매개 변수를 설정하지 않으면 String.format()을 사용할 필요가 없습니다. 당신의 cleanCart() 메소드에서 라인 2를 다음으로 대체하십시오 : String query = "DELETE FROM OrderDetail";

실제로 데이터베이스에 쓰는 대신 getWritableDatabase()를 사용하여 데이터베이스 객체를 가져와야합니다.

편집 : addToCart() 메소드를 다음으로 바꾸십시오.

public void addToCart (Order order) 
{ 
    SQLiteDatabase db = getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
    values.put("ProductId", order.getProductId(); 
    values.put("ProductName", order.getProductName(); 
    values.put("Quantity", order.getQuantity(); 
    values.put("Price", order.getPrice(); 
    values.put("Discount", order.getDiscount(); 
    db.insert("OrderDetail", null, values); 
} 
+0

해답을 가져 주셔서 감사합니다하지만 작동하지 않았다! – androidstudio

+0

@androidstudio 죄송합니다. 예외 추적을 제대로 보지 않았습니다. 내 대답은 편집되었으므로 이제는 제대로 작동 할 것입니다. – Cristian

+0

"ContentValues"및 "put"기호를 확인할 수 없습니다. – androidstudio