2022-11-8学习内容
1.案例-购物车-商品列表展示
1.1MyApplication.java
package com.example.chapter06; import android.app.Application; import android.content.res.Configuration; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Environment; import android.util.Log; import androidx.annotation.NonNull; import androidx.room.Room; import com.example.chapter06.database.BookDatabase; import com.example.chapter06.database.ShoppingDBHelper; import com.example.chapter06.entity.GoodsInfo; import com.example.chapter06.util.FileUtil; import com.example.chapter06.util.SharedUtil; import java.io.File; import java.util.ArrayList; import java.util.HashMap; public class MyApplication extends Application { private static MyApplication myApp; // 声明一个公共的信息映射对象,可当做全局变量使用 public HashMap<String, String> infoMap = new HashMap<>(); // 声明一个书籍数据库对象 private BookDatabase bookDatabase; public static MyApplication getInstance() { return myApp; } // 在APP启动时调用 @Override public void onCreate() { super.onCreate(); myApp = this; Log.d("ning", "MyApplication onCreate"); // 构建书籍数据库的实例 bookDatabase = Room.databaseBuilder(this, BookDatabase.class, "book") // 允许迁移数据库(发生数据库变更时,Room默认删除原数据库再创建新数据库,如此一来原来的记录会丢失,故而要改为迁移方式以便保存原有记录 .addMigrations() // 允许在主线程中操作数据库(Room默认不能在主线程中操作数据库) .allowMainThreadQueries() .build(); // 初始化商品信息 initGoodsInfo(); } private void initGoodsInfo() { // 获取共享参数保存的是否首次打开参数 boolean isFirst = SharedUtil.getInstance(this).readBoolean("first", true); // 获取当前APP的私有下载路径 String directory = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).toString() + File.separatorChar; if (isFirst) { // 模拟网络图片下载 ArrayList<GoodsInfo> list = GoodsInfo.getDefaultList(); for (GoodsInfo info : list) { Bitmap bitmap = BitmapFactory.decodeResource(getResources(), info.pic); String path = directory + info.id + ".jpg"; // 往存储卡保存商品图片 FileUtil.saveImage(path, bitmap); // 回收位图对象 bitmap.recycle(); info.picPath = path; } // 打开数据库,把商品信息插入到表中 ShoppingDBHelper dbHelper = ShoppingDBHelper.getInstance(this); dbHelper.openWriteLink(); dbHelper.insertGoodsInfos(list); dbHelper.closeLink(); // 把是否首次打开写入共享参数 SharedUtil.getInstance(this).writeBoolean("first", false); } } // 在APP终止时调用 @Override public void onTerminate() { super.onTerminate(); Log.d("ning", "onTerminate"); } // 在配置改变时调用,例如从竖屏变为横屏 @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); Log.d("ning", "onConfigurationChanged"); } // 获取书籍数据库的实例 public BookDatabase getBookDB() { return bookDatabase; } }
1.2SharedUtil.java
package com.example.chapter06.util; import android.content.Context; import android.content.SharedPreferences; public class SharedUtil { private static SharedUtil mUtil; private SharedPreferences preferences; public static SharedUtil getInstance(Context ctx) { if (mUtil == null) { mUtil = new SharedUtil(); mUtil.preferences = ctx.getSharedPreferences("shopping", Context.MODE_PRIVATE); } return mUtil; } public void writeBoolean(String key, boolean value) { SharedPreferences.Editor editor = preferences.edit(); editor.putBoolean(key, value); editor.commit(); } public boolean readBoolean(String key, boolean defaultValue) { return preferences.getBoolean(key, defaultValue); } }
1.3ShoppingChannelActivity.java
package com.example.chapter06; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import com.example.chapter06.database.ShoppingDBHelper; public class ShoppingChannelActivity extends AppCompatActivity { // 声明一个商品数据库的帮助器对象 private ShoppingDBHelper mDBHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_shopping_channel); mDBHelper = ShoppingDBHelper.getInstance(this); mDBHelper.openReadLink(); mDBHelper.openWriteLink(); } @Override protected void onDestroy() { super.onDestroy(); mDBHelper.closeLink(); } }