重庆云阳网站建设报价,扬州seo,汕头市建设局网站首页,网站的开发费用吗前面一节中已经为Starbuzz创建了一个SQLite帮助器。 目前还是从Java Drink类获取数据#xff0c;这时候要修改这个应用从SQLite数据库获取数据。 本文所有代码均存放于 https://github.com/MADMAX110/Starbuzz 
一、修改DrinkActivity来使用Starbuzz数据库 
基本步骤#xff…前面一节中已经为Starbuzz创建了一个SQLite帮助器。 目前还是从Java Drink类获取数据这时候要修改这个应用从SQLite数据库获取数据。 本文所有代码均存放于 https://github.com/MADMAX110/Starbuzz 
一、修改DrinkActivity来使用Starbuzz数据库 
基本步骤 1、得到Starbuzz数据库的一个引用 2、创建一个游标从数据库读取数据 3、导航到饮料记录 4、在DrinkActiviy中显示饮料的详细信息 
1、得到数据库引用 
首先需要用上一章创建的SQLite帮助器得到Starbuzz数据库的一个引用。为此我们先要得到SQLite帮助器的一个引用。 SQLiteOpenHelper starbuzzDatabaseHelper  new StarbuzzDatabaseHelper(this);然后调用SQLite帮助器的getReadableDatabase() 或getWriteableDatabase() 得到数据库一个引用。前者只读后者可以进行更新。这两者都会返回一个SQLiteDatabase对象可以用来访问数据库。 SQLiteDatabase db  starbuzzDatabaseHelper.getReadableDatabase();SQLiteDatabase db  starbuzzDatabaseHelper.getWritableDatabase();如果Android没能得到数据库的一个引用会抛出一个SQLiteExeception异常。例如如果调用getWriteableDatabase来读写数据库但是由于磁盘已满而无法写入数据库就会发生这种情况。 如果得到异常就可以使用一个Toast一个弹出式消息告诉用户这个消息不可用。 得到数据库的一个引用后就可以使用游标从数据库中获取数据了。 
2、用游标从数据库获取数据 
创建游标 
Cursor cursor  db.query(...);最简单的数据库查询是从一个数据库的一个表中返回所有记录 第一个参数是表名第二个参数表示想要返回这些列中的值如果想要返回一个表中的所有记录将这些参数设置为null。 
Cursor cursor  db.query(DRINK, new String[]{_id, NAME, DESCRIPTION}, null, null, null, null, null);默认情况下表中数据按_id的顺序显示这是因为输入数据时的顺序。如果希望按NAME的升序顺序可以使用以下代码。 Cursor cursor  db.query(DRINK, new String[]{_id, NAME, DESCRIPTION}, null, null, null, null, null, NAME ASC);ASC关键字表示你希望按升序对这一列排序。默认的都会按升序队列排序所以也可以省略ASC倘若要以降序排序则要使用DESC。 还可以对多个列进行排序例如对FAVORITE降序排列然后对NAME按升序排列。 
Cursor cursor  db.query(DRINK, new String[]{_id, NAME, DESCRIPTION}, null, null, null, null, null, FAVORITE DESC, NAME);为数据设置过滤条件返回特定的记录例如返回DRINK列表中饮料名为Lattle的记录 
Cursor cursor  db.query(DRINK, new String[]{_id, NAME, DESCRIPTION},  NAME  ?, new String[] {Lattle}, null, null, null);或是DRINK列表中_id为1的记录 Cursor cursor  db.query(DRINK, new String[]{_id, NAME, DESCRIPTION},  _id  ?, new String[] {Integer.toString(1)}, null, null, null);3、导航到游标记录 
要从一个游标获取某个特定记录的值首先要导航到这个记录。 游标主要有4个方法这些方法分别是moveToFirst、moveToLast、moveToPrevious、moveToNext。 要返回游标的第一个记录可以使用moveToFirst方法如果发现一个记录这个方法就会返回一个true值。如果游标未返回任何记录就会返回false。 
if (cursor.moveToFirst()){
}同理、moveToLast是返回游标最后一个记录moveToPrevious是前一个记录moveToNext是后一个记录。 
4、获取游标值 
从第0列获取字符串从第2列获取数值。 
String name  cursor.getString(0);
int imageRes  cursor.getInt(2);最后关闭游标和数据库。 
cursor.close();
db.close();完整的DrinkActivity代码 
package com.hfad.starbuzz;import androidx.appcompat.app.AppCompatActivity;import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;public class DrinkActivity extends AppCompatActivity {public static final String EXTRA_DRINKID  drinkId;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_drink);int drinkId  (Integer)getIntent().getExtras().get(EXTRA_DRINKID);SQLiteOpenHelper starbuzzDatabaseHelper  new StarbuzzDatabaseHelper(this);try {SQLiteDatabase db  starbuzzDatabaseHelper.getReadableDatabase();Cursor cursor  db.query(DRINK,new String[]{NAME, DESCRIPTION, IMAGE_RESOURCE_ID},_id  ?,new String[] {Integer.toString(drinkId)},null, null, null);if (cursor.moveToFirst()) {String nameText  cursor.getString(0);String descriptionText  cursor.getString(1);int photoId  cursor.getInt(2);TextView name  (TextView) findViewById(R.id.name);name.setText(nameText);TextView description  (TextView) findViewById(R.id.description);description.setText(descriptionText);ImageView photo  (ImageView) findViewById(R.id.photo);photo.setImageResource(photoId);photo.setContentDescription(nameText);}cursor.close();db.close();}catch (SQLException e){Toast toast  Toast.makeText(this,Database unavailable,Toast.LENGTH_SHORT);toast.show();}}
}二、修改DrinkCategoryActivity来使用Starbuzz数据库 
这里的步骤与之前的有所不同因为这里要显示一个列表视图它使用饮料数据作为它的数据源。我们要把这个数据的数据源转换为Starbuzz数据库 1、创建一个游标从数据库读取饮料数据。 2、将列表视图的数组适配器替换为一个游标适配器。 第一步与之前的一样这里需要做的是替换列表视图中的数组数据。 
简单游标适配器 
原理 1、列表视图向适配器请求数据 2、适配器向游标请求数据库中的数据 3、适配器向列表视图返回数据 使用简单游标适配器的做法与使用数组适配器很类似要初始化适配器然后把它关联到列表视图。 SimpleCursorAdapter listAdapter  new SimpleCursorAdapter(this , //当前活动android.R.layout.simple_list_item_1,//在列表视图中对应每一行显示一个值cursor,//这是游标new String[]{NAME},//使用游标的哪些列new int[]{android.R.id.text1},//希望在那些视图中显示这些数据0);//用来确定游标的行为通常为0这是默认值也可以注册一个内容观察器listDrinks.setAdapter(listAdapter);修改后的DrinkCategoryActivity代码 
package com.hfad.starbuzz;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;public class DrinkCategoryActivity extends AppCompatActivity {private SQLiteDatabase db;private Cursor cursor;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_drink_category);ListView listDrinks  (ListView) findViewById(R.id.list_drinks);SQLiteOpenHelper starbuzzDatabaseHelper  new StarbuzzDatabaseHelper(this);try {db  starbuzzDatabaseHelper.getReadableDatabase();cursor  db.query(DRINK,new String[]{_id, NAME},null, null, null, null, null);SimpleCursorAdapter listAdapter  new SimpleCursorAdapter(this , //当前活动android.R.layout.simple_list_item_1,//在列表视图中对应每一行显示一个值cursor,//这是游标new String[]{NAME},//使用游标的哪些列new int[]{android.R.id.text1},//希望在那些视图中显示这些数据0);//用来确定游标的行为通常为0这是默认值也可以注册一个内容观察器listDrinks.setAdapter(listAdapter);}catch(SQLException e){Toast toast  Toast.makeText(this, Database unavailable, Toast.LENGTH_SHORT);toast.show();}AdapterView.OnItemClickListener itemClickListener  new AdapterView.OnItemClickListener() {Overridepublic void onItemClick(AdapterView? parent, View view, int position, long id) {if (position  0) {Intent intent  new Intent(DrinkCategoryActivity.this, DrinkCategoryActivity.class);startActivity(intent);}Intent intent  new Intent(DrinkCategoryActivity.this, DrinkActivity.class);//向意图增加所单击列表项的ID第一个参数表示使用这个常量名表示意图中的额外信息名//这样就能知道DrinkCategoryActivity和DrinkActivity在使用同一个字符串//创建DrinkActivity活动时要增加这个常量。intent.putExtra(DrinkActivity.EXTRA_DRINKID, (int)id);startActivity(intent);}};listDrinks.setOnItemClickListener(itemClickListener);}Overrideprotected void onDestroy() {super.onDestroy();cursor.close();db.close();}
}