Как мне сохранить значение GetIntent() в базе данных SQLite?

#java #android #sqlite #android-sqlite

#java #Android #sqlite #android-sqlite

Вопрос:

Я новичок в разработке Android.

Недавно я хотел создать приложение, первое действие которого вычисляет число и отправляет его через намерение второму действию.

Пока все хорошо.

Но на этом этапе я сталкиваюсь с некоторой проблемой.
То есть, когда я получаю намерение через getIntent() , все в порядке.
Но я не знаю , как мне сохранить getIntent() значение в базе данных SQLite?

Надеюсь, вы, ребята, поможете мне решить эту проблему.

Это мое первое действие

 import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class DrinkActivity extends AppCompatActivity {
    // Remove the below line after defining your own ad unit ID.
    //private static final String TOAST_TEXT = "Test ads are being shown. "
      //        "To show live ads, replace the ad unit ID in res/values/strings.xml with your own ad unit ID.";
    //this is how many count
    int a = 0;
    //this is hoq much
    int b = 0;
    //this is button who is send information and go next page
    Button B1;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_drink);

        // Load an ad into the AdMob banner view.
        AdView adView = (AdView) findViewById(R.id.adView);
        AdRequest adRequest = new AdRequest.Builder()
                .setRequestAgent("android_studio:ad_template").build();
        adView.loadAd(adRequest);

        // Toasts the test ad message on the screen. Remove this after defining your own ad unit ID.
        //Toast.makeText(this, TOAST_TEXT, Toast.LENGTH_LONG).show();
        B1 = (Button) findViewById(R.id.gonextPage);
        B1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(DrinkActivity.this,ScrollingActivity.class);
                int x = a ;
                int y = b;
                int z = a * b;
                intent.putExtra("drinkhowmany",x);
                intent.putExtra("drinkhowmuch",y);
                intent.putExtra("drinktotal",z);
                startActivity(intent);
            }
        });
    }

    //this method count down how many drink plus calculation
    public void howmanyPlusButton(View view){
        if (a == 100){
            return;
        }
        a = a   1;
        displayHowMany(a);
    }
    //this method count down how many drink minus calculation
    public void howmanyMinusButton(View view){
        if (a == -0){
            return;
        }
        a = a - 1;
        displayHowMany(a);
    }
    //this method count down how much price drink plus calculation
    public void howmuchPlusButton(View view){
        if (b == 100){
            return;
        }
        b = b  1;
        displayHowMuch(b);
    }
    //this method count down how much price minus drink calculation
    public void howmuchMinusButton(View view){
        if (b == -0){
            return;
        }
        b = b -1;
        displayHowMuch(b);
    }

    //this text show user how many digit
    private void displayHowMany(int i){
        TextView textView = (TextView) findViewById(R.id.howMany);
        textView.setText("" i);
    }

    //this text show user how much price digit
    private void displayHowMuch(int i){
        TextView textView = (TextView) findViewById(R.id.howMuch);
        textView.setText("$" i);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_drink, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

}
  

Это мое 2-е действие

 import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;


public class ScrollingActivity extends AppCompatActivity {


    //drink text working hear
    TextView drinkhowmany,drinkhowmuch,drinktotal;

    //data save button and data delete button
    Button save,delete;

    //database
    SQLiteDataBase sqLiteDataBase;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scrolling);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
                Intent intent = new Intent(ScrollingActivity.this,MenuActivity.class);
                startActivity(intent);
            }
        });

        //main text working and shoq user preview hear

        //database call hear
        sqLiteDataBase = new SQLiteDataBase(this);

                    //this is drink section
        //this is show user hoq many drink user order
        drinkhowmany = (TextView) findViewById(R.id.drinkHowMany);
        drinkhowmany.setText("" getIntent().getIntExtra("drinkhowmany",0));

        //thisis show user how much drink price
        drinkhowmuch = (TextView) findViewById(R.id.drinkHowMuch);
        drinkhowmuch.setText("$" getIntent().getIntExtra("drinkhowmuch",0));

        //this is show user total drink price
        final int drinkTotalInt =  getIntent().getIntExtra("drinktotal",0);
        drinktotal = (TextView) findViewById(R.id.drinkTotal);
        drinktotal.setText("$" drinkTotalInt);

        //buttton with database
        save = (Button) findViewById(R.id.savedataButton);
        save.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
            boolean chaker = saveDataFile.addtoTable(`what i need to write hear also ?` );
            if (chaker == true){
                Toast.makeText(getBaseContext(),"SAVE YOUR DATA",Toast.LENGTH_SHORT).show();
            }else {
                Toast.makeText(getBaseContext(),"Your Data Not Save",Toast.LENGTH_SHORT).show();

            }
            }
        });

    }
}
  

АКТИВНОСТЬ SQLITE

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

/**
 * Created by AIB Nihan on 10/4/2016.
 */

public class SQLiteDataBase extends SQLiteOpenHelper {


    //this is the like box of information this is the box of which user input ther value
    private static final String DATABASE_NAME = "mydatabase.db";
    private static final String TABLE_NAME = "mytable";
    private static final String DRINK_PRICE = "drink";

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

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        String query;
        query = "CREATE TABLE "  TABLE_NAME  "("  CIG_PRICE  " INTEGER, "  ")";
        sqLiteDatabase.execSQL(query);

    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
        sqLiteDatabase.execSQL(" DROP FILE IF EXITS "   TABLE_NAME);
        onCreate(sqLiteDatabase);

    }
    //int coffee,,int drink,int food,int other
    public boolean addtotable(int cig){
        SQLiteDatabase sqLiteDatabase = getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        //contentValues.put(DRINK_PRICE,drink);
       long chaker = sqLiteDatabase.insert(TABLE_NAME,null,contentValues);
        if (chaker == 1){
            return false;
        }else {
            return true;
        }
    }

    public Cursor  display(){
        SQLiteDatabase sqLiteDatabase = getReadableDatabase();
        Cursor res = sqLiteDatabase.rawQuery("SELECT * FORM"   TABLE_NAME,null);
        return res;
    }


}
  

Комментарии:

1. смотрите Intent#toUri(int flags)

2. Где вы объявили CIG_PRICE? Собираетесь ли вы сохранить целочисленное значение в значении sqlite / bundle?

3. на самом деле я имел в виду Drink_Price. CIG_PRICE была ошибкой, извините за это, и да, я хочу сохранить целочисленное значение в sqlite

Ответ №1:

Согласно вашему коду, вы можете передать integer в addtotable(), передав drinkTotalInt или какое-либо целое значение.

 e.g
     save.setOnClickListener(new View.OnClickListener() {
         @Override
           public void onClick(View view) { boolean chaker =
           saveDataFile.addtoTable(drinkTotalIn); if (chaker == true){
             Toast.makeText(getBaseContext(),"SAVE YOUR
             DATA",Toast.LENGTH_SHORT).show(); }else {
             Toast.makeText(getBaseContext(),"Your Data Not
             Save",Toast.LENGTH_SHORT).show();
     } 
    } 
    });
  

и в addtable() вставьте передаваемое значение, как показано ниже,

 contentValues.put(DRINK_PRICE, [insert data]);
  

Если вы хотите вставить intent в sqlite, измените схему sqlite следующим образом:

 query = "CREATE TABLE "  TABLE_NAME  "("  CIG_PRICE  " **TEXT**, "  ")";
  

затем передайте intent в качестве аргумента addtable() .

например ,

 addtable(getIntent());
  

В addtable() :

 public boolean addtotable(Intent intent){

        SQLiteDatabase sqLiteDatabase = getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        String intentDescription = intent.toUri(0);
        contentValues.put(DRINK_PRICE,intentDescription);
        long chaker = sqLiteDatabase.insert(TABLE_NAME,null,contentValues);

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

Получить намерение из sqlite:

 String intentDescription = cursor.getString(intentIndex);    
Intent intent = Intent.parseUri(intentDescription, 0);
  

Теперь вы можете проанализировать намерение, чтобы получить все значения.

Редактировать: Получение намерения из sqlite более подробно:

  SQLiteDatabase sqLiteDatabase = getWritableDatabase();

   Cursor cursor = sqLiteDatabase .rawQuery("select * from [table-name] ");
    if (cursor.moveToFirst()) {
         do {

    String intentDescription = cursor.getString(0); // getting intent from         sqlite at index 0   
        Intent intent = Intent.parseUri(intentDescription, 0);


         } while (cursor.moveToNext());
      }
      if (cursor != null amp;amp; !cursor.isClosed()) {
         cursor.close();
      }
      if(db!=null)
      {
          db.close();
      }
  

Комментарии:

1. get intent from sqlite: . Хорошо. Но что и как бы вы ввели в первую очередь?

2. @greenapps Intent#toUri

3. Спасибо за ответ, это было очень полезно 🙂

4. @MSS получает намерение из sqlite, которую я не получаю, может быть, это происходит потому, что. я недостаточно хорошо говорю по-английски, поэтому не могли бы вы рассказать мне больше об этой части 🙂

5. @AkramIbnaBasharNihan пожалуйста, взгляните на отредактированный ответ

Ответ №2:

Вам нужно будет использовать ContentValues. Я бы рекомендовал использовать это руководство:https://www.tutorialspoint.com/android/android_sqlite_database.htm