2017-04-18 8 views
0

オンラインスタジオでSQLを使用する方法を学習していますが、チュートリアルでは2つのカラムを掛けて計算したデータを追加する方法新しい列に追加します。SQLiteで2つのカラムを掛けてAndroidスタジオのテキストビューに表示

課題は合計を得るためにコストと量を乗算することです。 今のところ、私はSQLiteのデータの追加、更新、削除などの基本を手に入れています。

相続人は私の更新された現在DBHelper.java

package ntws.itemsqlite; 

/** 
* Created by eddie on 13/4/2017. 
*/ 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.DatabaseUtils; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

import java.util.ArrayList; 
import java.util.HashMap; 

public class DBHelper extends SQLiteOpenHelper { 

    public static final String DATABASE_NAME = "ProductList.db"; 
    public static final String PRODUCTS_TABLE_NAME = "product"; 
    public static final String PRODUCTS_COLUMN_ID = "id"; 
    public static final String PRODUCTS_COLUMN_NAME = "name"; 
    public static final String PRODUCTS_COLUMN_COST = "cost"; 
    public static final String PRODUCTS_COLUMN_QUANTITY = "quantity"; 
    public static final String PRODUCTS_COLUMN_TOTAL = "total"; 

    private HashMap hp; 

    public DBHelper(Context context) { 
     super(context, DATABASE_NAME , null, 1); 
    } 



    @Override 
    public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub 
     db.execSQL(
       "create table products " + 
         "(id integer primary key, name text,cost double, quantity double, total double)" 
     ); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 
     db.execSQL("DROP TABLE IF EXISTS products"); 
     onCreate(db); 
    } 
public int getAllTotal(int cost){ 
    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor res = db.rawQuery("SELECT SUM(cost) FROM products", null); 
    if(res.moveToFirst()) 
    { 
     return res.getInt(0); 
    } 

    return cost; 
} 

    public boolean insertProduct (String name, String cost, String quantity) { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues contentValues = new ContentValues(); 
     contentValues.put("name", name); 

     contentValues.put("cost", cost); 
     contentValues.put("quantity", quantity); 

     db.insert("products", null, contentValues); 
     return true; 
    } 

    public Cursor getData(int id) { 
     SQLiteDatabase db = this.getReadableDatabase(); 
     Cursor res = db.rawQuery("select * from products where id="+id+" ", null); 

     return res; 
    } 

    public int numberOfRows(){ 
     SQLiteDatabase db = this.getReadableDatabase(); 
     int numRows = (int) DatabaseUtils.queryNumEntries(db, PRODUCTS_TABLE_NAME); 
     return numRows; 
    } 

    public boolean updateProduct (Integer id, String name, String cost, String quantity) { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues contentValues = new ContentValues(); 
     contentValues.put("name", name); 

     contentValues.put("cost", cost); 
     contentValues.put("quantity", quantity); 



     db.update("products", contentValues, "id = ? ", new String[] { Integer.toString(id) }); 
     return true; 
    } 

    public Integer deleteProduct (Integer id) { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     return db.delete("products", 
       "id = ? ", 
       new String[] { Integer.toString(id) }); 
    } 

    public ArrayList<String> getAllProduct() { 
     ArrayList<String> array_list = new ArrayList<String>(); 

     //hp = new HashMap(); 
     SQLiteDatabase db = this.getReadableDatabase(); 
     Cursor res = db.rawQuery("select * from products", null); 
     res.moveToFirst(); 

     while(res.isAfterLast() == false){ 
      array_list.add(res.getString(res.getColumnIndex(PRODUCTS_COLUMN_NAME))); 
      res.moveToNext(); 
     } 
     return array_list; 
    } 

    public double getItemTotal(int value) 
    { 
     String countQuery = "SELECT * FROM product"; 
     SQLiteDatabase db = this.getReadableDatabase(); 
     Cursor res = db.rawQuery(countQuery , null); 

     double itemtotal = 0; 
     if(res.moveToFirst()){ 
      String costStr = res.getString(res.getColumnIndex("cost")); 
      String qntStr = res.getString(res.getColumnIndex("quantity")); 

      itemtotal = Double.parseDouble(costStr) * Double.parseDouble(qntStr); 
      res.close(); 
     } 
     return itemtotal; 
    } 

    //end of DBHelper 

} 

あなたが見ることができるように、私は私の方法DBHelper.javaでgetItemTotalを呼んで追加しようとしました。 現在、他のすべての関数が動作しており、DisplayProduct.javaを通過することによって、それぞれのデータをactivity_display_product.xmlのTextViewに置き換えることができます。

DisplayProduct.JavaにgetItemTotalメソッド関数は計算を実行してからそれぞれ更新することができます。

DisplayProduct.Java

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_display_product); 
    name = (TextView) findViewById(R.id.editTextName); 

    cost = (TextView) findViewById(R.id.editTextCost); 
    quantity = (TextView) findViewById(R.id.editTextQuantity); 



    mydb = new DBHelper(this); 



    Bundle extras = getIntent().getExtras(); 
    if(extras !=null) { 
     int Value = extras.getInt("id"); 

     if(Value>0){ 
      //means this is the view part not the add PRODUCT part. 
      Cursor rs = mydb.getData(Value); 
      id_To_Update = Value; 
      rs.moveToFirst(); 

      String nam = 
rs.getString(rs.getColumnIndex(DBHelper.PRODUCTS_COLUMN_NAME)); 

      String cos = 
rs.getString(rs.getColumnIndex(DBHelper.PRODUCTS_COLUMN_COST)); 
      String quantit = 
rs.getString(rs.getColumnIndex(DBHelper.PRODUCTS_COLUMN_QUANTITY)); 


      if (!rs.isClosed()) { 
       rs.close(); 
      } 
      Button b = (Button)findViewById(R.id.button1); 
      b.setVisibility(View.INVISIBLE); 

      name.setText((CharSequence)nam); 
      name.setFocusable(false); 
      name.setClickable(false); 


      cost.setText((CharSequence)cos); 
      cost.setFocusable(false); 
      cost.setClickable(false); 

      quantity.setText((CharSequence)quantit); 
      quantity.setFocusable(false); 
      quantity.setClickable(false); 


     } 
    } 

合計値は、私がDBHelperからgetItemTotalメソッドを追加する必要があります知っているactivity_display_product.xml

更新

でのTextViewを交換する必要がありますDisplayProduct.javaのonCreateに追加しましたが、どのように実装するかわかりません。 すべての例は、配列またはリストビューを示しています。

もっと良い方法がありますので、textTviewTextTotalを使ってitemTotalを取得しますか?

activity_display_product.xmlの.xmlファイルは、次のとおりです。 editTextTotalを除くすべてが正しく割り当てられています。

activity_display_product.xml

<EditText 
      android:id="@+id/editTextTotal" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/editTextQuantity" 
      android:layout_marginTop="22dp" 
      android:layout_toEndOf="@+id/textView7" 
      android:ems="10" 
      android:inputType="text|number" /> 
+0

なぜ、挿入クエリで合計値を挿入しないのですか? –

+0

InsertProduct()に合計値を挿入しないと、ユーザーは合計値を追加できます。アプリケーションは合計値を計算する必要があります。 私は最初にそれを試みましたが、アプリケーションがクラッシュする原因となりました –

+0

実際に問題は、作成テーブルの列の型であるdouble値の代わりに、** insert()**メソッドに文字列値を挿入することです。すべてのクエリの作成、挿入、選択、更新などで同じタイプを使用することは良いことです。これがあなたを助けることを願っています。 –

答えて

0

問題はその後、ダブルあなたの 欲求の計算を計算するために、この文字列に解析まず、あなたがテキストとして追加した

cost text, quantity text, total text 

を聞くです。

+0

getItemTotal()メソッドはテキストをdoubleにラップしませんか? –

関連する問題