#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