2017-12-24 21 views
0

私はアンドロイドスタジオが新しく、最近注文したり、カートに何かを追加したり、アカウントのページから詳細を確認したりできるものを注文できるアプリを開発しています。カートをクリックするか、カートにアイテムを追加しようとした場合、アプリがクラッシュし、これが最大を示しています。解決方法: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

関連する問題