Обновление данных textview sqlite Android - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть текстовое представление, которое получает данные из базы данных sqlite, но когда я удаляю строку или изменяю ее, я также хочу изменить то, что имеет текстовое представление, данные, которые содержит текстовое представление, в основном являются суммой всех указанных строк c столбец, как я могу обновить текстовое представление при обновлении данных sqlite?

вот мой основной код:

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_logged_in);
        getSupportActionBar().hide();
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        tinyDB = new TinyDB(getApplicationContext());
        listView = findViewById(R.id.listt);
        pharmacynme = findViewById(R.id.pharmacynme);
        constraintLayout = findViewById(R.id.thelayout);
        mBottomSheetDialog2 = new Dialog(LoggedIn.this, R.style.MaterialDialogSheet);
        inflater2 = (LayoutInflater) LoggedIn.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mBottomSheetDialog = new Dialog(LoggedIn.this, R.style.MaterialDialogSheet);
        content  =  inflater2.inflate(R.layout.activity_main2, null);
        content2  =  inflater2.inflate(R.layout.smalldialog, null);
        total  = (TextView) content2.findViewById(R.id.totalpriceofsmalldialog);
        pharmacydescrr = findViewById(R.id.pharmacydiscribtion);
        String nme = getIntent().getStringExtra("pharmacy_name");
        String diskr = getIntent().getStringExtra("pharmacy_disk");
        pharmacydescrr.setText(diskr);
        pharmacynme.setText(nme);
        //Listview Declaration
        connectionClass = new ConnectionClass();
        itemArrayList = new ArrayList<ClassListItems>();// Connection Class Initialization
        etSearch = findViewById(R.id.etsearch);
        etSearch.setSingleLine(true);
        chat = findViewById(R.id.chat);
        mDatabaseHelper = new DatabaseHelper(this);
        mBottomSheetDialog2.setContentView(content2);
        mBottomSheetDialog2.setCancelable(false);
        mBottomSheetDialog2.getWindow().setLayout(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        mBottomSheetDialog2.getWindow().setGravity(Gravity.BOTTOM);
        mBottomSheetDialog2.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
        mBottomSheetDialog2.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
                WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);

        System.out.println("IDKSDKASDJKAS"+mDatabaseHelper.ifExists());
        if (mDatabaseHelper.ifExists()){
            mBottomSheetDialog2.show();
            total.setText(mDatabaseHelper.getPriceSum());
        }else {

        }

        chat.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String nameid = getIntent().getStringExtra("nameid");
                Intent intent = new Intent(LoggedIn.this,ChatActivity.class);
                intent.putExtra("nameid",nameid);
                startActivity(intent);
            }
        });


        etSearch.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                String text = etSearch.getText().toString().toLowerCase(Locale.getDefault());
//                myAppAdapter.filter(text);
            }
        });

        SyncData orderData = new SyncData();
        orderData.execute("");

    }

    public void AddData(String newEntry,String price,String amount){
        boolean insertData = mDatabaseHelper.addData(newEntry,price,amount);

        if (insertData){
            toastMessage("Data Successfully inserted!");
        }else {
            toastMessage("Al anta 4abebto da ya youssef >:(");
        }
    }

    private void toastMessage(String message){
        Toast.makeText(this,message,Toast.LENGTH_LONG).show();
    }

    private class SyncData extends AsyncTask<String, String, String> {
        String msg;
        ProgressDialog progress;

        @Override
        protected void onPreExecute() //Starts the progress dailog
        {
            progress = ProgressDialog.show(LoggedIn.this, "Loading...",
                    "Please Wait...", true);
        }

        @Override
        protected String doInBackground(String... strings)  // Connect to the database, write query and add items to array list
        {
            runOnUiThread(new Runnable() {
                public void run() {


                    try {
                        Connection conn = connectionClass.CONN(); //Connection Object
                        if (conn == null) {
                            success = false;
                            msg = "Sorry something went wrong,Please check your internet connection";
                        } else {
                            // Change below query according to your own database.

                            String nme = getIntent().getStringExtra("pharmacy_name");
                            System.out.println(nme);
                            String query = "Select StoreArabicName,StoreEnglishName,StoreSpecialty,StoreCountry,StoreLatitude,StoreLongitude,Store_description,ProductData.ProductArabicName,ProductData.ProductImage,ProductData.ProductEnglishName,ProductData.ProductDescription,ProductData.ProductPrice FROM StoresData INNER JOIN ProductData ON StoresData.StoreID = ProductData.StoreID WHERE StoreEnglishName = '"+nme+"'";
                            Statement stmt = conn.createStatement();
                            ResultSet rs = stmt.executeQuery(query);


                            if (rs != null) // if resultset not null, I add items to itemArraylist using class created
                            {
                                while (rs.next()) {

                                    try {
                                        itemArrayList.add(new ClassListItems(rs.getString("ProductEnglishName"), rs.getString("ProductDescription"), rs.getString("ProductPrice"),rs.getString("ProductImage")));
                                        System.out.println(rs.getString("ProductImage"));
                                    } catch (Exception ex) {
                                        ex.printStackTrace();
                                    }
                                }

                                msg = "Found";
                                success = true;
                            } else {
                                msg = "No Data found!";
                                success = false;
                            }
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                        Writer writer = new StringWriter();
                        e.printStackTrace(new PrintWriter(writer));
                        msg = writer.toString();
                        Log.d("Error", writer.toString());
                        success = false;
                    }

                }
            });
            return msg;
        }


        @Override
        protected void onPostExecute(String msg) // disimissing progress dialoge, showing error and setting up my listview
        {
            progress.dismiss();
            if (msg!=null){
                Toast.makeText(LoggedIn.this, msg + "", Toast.LENGTH_LONG).show();
            }

            if (!success) {
            } else {
                try {
                    myAppAdapter = new MyAppAdapter(itemArrayList, LoggedIn.this);
                    listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
                    listView.setAdapter(myAppAdapter);


                } catch (Exception ex) {

                }

            }
        }
    }

    public class MyAppAdapter extends BaseAdapter//has a class viewholder which holds
    {

        private ArrayList<ClassListItems> mOriginalValues; // Original Values
        private ArrayList<ClassListItems> mDisplayedValues;

        public class ViewHolder {

            TextView textName;
            TextView textData;
            TextView textImage;
            ImageView producticon;

        }

        public List<ClassListItems> parkingList;

        public Context context;
        ArrayList<ClassListItems> arraylist;


        private MyAppAdapter(List<ClassListItems> apps, Context context) {
            this.parkingList = apps;
            this.context = context;
            arraylist = new ArrayList<ClassListItems>();
            arraylist.addAll(parkingList);
        }

        @Override
        public int getCount() {
            return parkingList.size();
        }

        @Override
        public Object getItem(int position) {
            return position;
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(final int position, final View convertView, ViewGroup parent) // inflating the layout and initializing widgets
        {

            View rowView = convertView;
            ViewHolder viewHolder = null;
            if (rowView == null) {
                LayoutInflater inflater = getLayoutInflater();
                rowView = inflater.inflate(R.layout.listcontent, parent, false);
                viewHolder = new ViewHolder();
                viewHolder.textName = rowView.findViewById(R.id.name);
                viewHolder.textData = rowView.findViewById(R.id.details);
                viewHolder.textImage = rowView.findViewById(R.id.sdadprice);
                viewHolder.producticon = rowView.findViewById(R.id.producticon);
                rowView.setTag(viewHolder);
            } else {
                viewHolder = (ViewHolder) convertView.getTag();
            }
            // here setting up names and images
            viewHolder.textName.setText(parkingList.get(position).getProname() + "");
            viewHolder.textData.setText(parkingList.get(position).getData());
           viewHolder.textImage.setText(parkingList.get(position).getImage());
            Picasso.with(context).load(parkingList.get(position).getProducticon()).into(viewHolder.producticon);


            mBottomSheetDialog.setCancelable(true);
            mBottomSheetDialog.getWindow().setLayout(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
            mBottomSheetDialog.getWindow().setGravity(Gravity.BOTTOM);
            mBottomSheetDialog.setContentView(content);

            total.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(LoggedIn.this,Listitemsbought.class);
                    startActivity(intent);
                }
            });

            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
                    //What happens when you click on a place!
//                    Intent intent = new Intent(LoggedIn.this,MapsActivity.class);
//                    startActivity(intent);
                    final int count = 0;
                    final Float allitemscount = Float.parseFloat(parkingList.get(position).getImage());


                    TextView textView = (TextView) content.findViewById(R.id.mebuyss);
                    final TextView itemcount = (TextView) content.findViewById(R.id.itemcount);
                    Button plus = (Button) content.findViewById(R.id.plus);
                    Button minus = (Button) content.findViewById(R.id.minus);
                    Button finish = (Button) content.findViewById(R.id.finishgettingitem);
                    textView.setText(parkingList.get(position).getProname());
                    plus.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {

                           counter = counter + 1;
                           itemcount.setText(String.valueOf(counter));
                        }
                    });
                    minus.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            counter --;
                            if(counter<0){
                                counter=0;
                            }
                            itemcount.setText(String.valueOf(counter));
                        }
                    });

                    finish.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            String get = itemcount.getText().toString();
                            Float last = Float.parseFloat(get) * Float.parseFloat(parkingList.get(position).getImage());
                            mBottomSheetDialog.dismiss();
                            AddData(parkingList.get(position).getProname(),String.valueOf(last),String.valueOf(counter));


                            total.setText(mDatabaseHelper.getPriceSum());



                            mBottomSheetDialog2.show();
                            doneonce = true;
                        }
                    });


//                    if (doneonce = true){
//                        Float priceofitem = parseFloat(parkingList.get(position).getImage());
//                        Float currentprice = parseFloat(total.getText().toString());
//                        Float finalfloat = priceofitem * currentprice;
//                        total.setText(String.valueOf(finalfloat));
//
//                    }

                    if (!mBottomSheetDialog.isShowing()){
                        counter = 1;
                    }
//

                    mBottomSheetDialog.show();




//                    if (tinyDB.getString("selecteditem").equals("English")){
//                        Toast.makeText(LoggedIn.this,"Sorry this ability isn't here yet",Toast.LENGTH_LONG).show();
//                    }else {
//                        Toast.makeText(LoggedIn.this,"عفوا هذه الخاصية ليست متوفرة حاليا",Toast.LENGTH_LONG).show();
//                    }

                }
            });





            return rowView;
        }

        public void filter(String charText) {
            charText = charText.toLowerCase(Locale.getDefault());
            itemArrayList.clear();
            if (charText.length() == 0) {
                itemArrayList.addAll(arraylist);

            } else {
                for (ClassListItems st : arraylist) {
                    if (st.getProname().toLowerCase(Locale.getDefault()).contains(charText)) {
                        itemArrayList.add(st);
                    }

                }
            }
            notifyDataSetChanged();
        }

    }

    private Float parseFloat(String s){
        if(s == null || s.isEmpty())
            return 0.0f;
        else
            return Float.parseFloat(s);
    }

А вот мой DatabaseHelper. java

public class DatabaseHelper extends SQLiteOpenHelper {

    private static final String TAG = "DatabaseHelper";

    private static final String TABLE_NAME = "DatabaseHelper";
    private static final String NAME = "Name";
    private static final String PRICE = "Price";
    private static final String AMOUNT = "Amount";

    public DatabaseHelper(Context context) {
        super(context, TABLE_NAME, null , 4);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String createTable = "CREATE TABLE " + TABLE_NAME + " ("+PRICE+" TEXT, "+ NAME + " TEXT,"+ AMOUNT +" TEXT)";
        db.execSQL(createTable);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS "+ TABLE_NAME);
        onCreate(db);
    }

    public boolean addData(String item, String Price,String amount){
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(PRICE,Price);
        contentValues.put(NAME, item);
        contentValues.put(AMOUNT, amount);
        Log.d(TAG, "addData: Adding " + item + " to " + TABLE_NAME);

        long insert = db.insert(TABLE_NAME,null,contentValues);

        if (insert == -1){
            return false;
        }else {
            return true;
        }
    }

    public Cursor getDataOfTable(){
        SQLiteDatabase db = this.getWritableDatabase();
        String query = "SELECT Name,Amount FROM " + TABLE_NAME ;
        Cursor data = db.rawQuery(query, null);
        return data;
    }


   public String getPriceSum(){
    SQLiteDatabase db = this.getWritableDatabase();
    String query = "SELECT COALESCE(SUM(Price), 0) FROM " + TABLE_NAME;
    Cursor price = db.rawQuery(query, null);
    String result = "" + price.getString(0);
    price.close();
    db.close();
    return result;
}
    public boolean ifExists()
    {
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = null;
        String checkQuery = "SELECT * FROM " + TABLE_NAME + " LIMIT 1";
        cursor= db.rawQuery(checkQuery,null);
        boolean exists = (cursor.getCount() > 0);
        cursor.close();
        return exists;
    }

    public void delete(String nameofrow) {
        SQLiteDatabase db = this.getWritableDatabase();
        db.execSQL("delete from "+TABLE_NAME+" where "+NAME+"='"+nameofrow+"'");
    }


}

Любая помощь?!

1 Ответ

0 голосов
/ 30 апреля 2020

Метод getPriceSum() должен возвращать сумму, а не Cursor:

public String getPriceSum(){
    SQLiteDatabase db = this.getWritableDatabase();
    String query = "SELECT COALESCE(SUM(Price), 0) FROM " + TABLE_NAME;
    Cursor c = db.rawQuery(query, null);
    String result = "";
    if (c.moveToFirst()) result = "" + c.getString(0);
    c.close();
    db.close();
    return result;
}

Я не думаю, что вам нужен блок if:

if (mDatabaseHelper.ifExists()) {
    .......................
}

Все вам нужно сделать это:

total.setText(mDatabaseHelper.getPriceSum());
...