要解析JSON,首先要学习JSON Parsing。
您可以通过 Volley Library 、 Retrofit 等解析 JSON。
将 JSON 转换为 POJO/Model 类的站点jsonschema2pojo
解析 JSON 的步骤:
根据你的 json 创建 Pojo 类。
使用 Volley 或 Retrofit 解析 json。
-
在 pojo 上设置数据后,将 ArrayList 发送到 Recyclerview Adapter 类。
您也可以使用 GSON ,它易于解析 json 并将数据设置为 pojo 类。
GsonBuilder builder = new GsonBuilder();
Gson mGson = builder.create();
List<ItemObject> posts = new ArrayList<ItemObject>();
posts = Arrays.asList(mGson.fromJson(response, ItemObject[].class));
adapter = new RecyclerViewAdapter(MainActivity.this, posts);
recyclerView.setAdapter(adapter);
以下是使用 Volley 库并设置为 RecyclerView 进行 Json 解析的教程。
参考:https://inducesmile.com/android/android-json-parsing-using-gson-and-recyclerview/
如果我选择项目名称然后只打印关于
这个数据值像Rate,数量像这样。
Ans : 通过位置,您可以在 Recyclerview 适配器类的该位置数据上获取速率、数量的值。
如何将所有 recyclerView 数据传递给下一个 Activity 并将 sqlite 数据库保存在 android 中的 onclick Listener 中?
当你想将recyclerView数据发送到下一个Activity时,你必须将pojo类对象按意图发送到下一个Activity。
RecyclerView 数据发送到下一个 Activity:
takeBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Data send to next Activity
Intent intent = new Intent(HomeActivity.this,TakeSingleScanActivity.class);
Bundle args = new Bundle();
args.putSerializable("ARRAYLIST",(Serializable)cList);
intent.putExtra("BUNDLE",args);
startActivity(intent);
}
});
从上次活动接收的 RecyclerView 数据:
ArrayList<LoadDataResult> inList; //Global Variable
Intent intent = getIntent();
Bundle args = intent.getBundleExtra("BUNDLE");
inList = (ArrayList<LoadDataResult>) args.getSerializable("ARRAYLIST");
别忘了将你的 pojo 类实现为 Serializable :
public class LoadDataResult implements Serializable{
创建一个循环以将所有 recyclerview 数据存储在 Activity 类的 Sqlite 上:
for(int m = 0;m<mList.get(0).getResult().size();m++) {
callDataBaseHelper(mList.get(0).getResult().get(m).getName().trim(),
mList.get(0).getResult().get(m).getSku().trim(),
mList.get(0).getResult().get(m).getUpc().trim(),
mList.get(0).getResult().get(m).getPrice().trim(),
mList.get(0).getResult().get(m).getDisplaySize().trim(),
mList.get(0).getResult().get(m).getDisplaySizeYes(),
mList.get(0).getResult().get(m).getStatus().trim());
if(m == mList.get(0).getResult().size()-1) {
setData();
getRefreshTime();
utils.showtoast("Data Load Successful");
utils.hideDialog();
}
}
调用DataBaseHelper类的addData方法:
private void callDataBaseHelper(String name, String sku, String upc, String price, String displaySize, int displaySizeYes, String status) {
boolean insertData = databaseHelper.addData(name,sku,upc,price,displaySize,displaySizeYes,status);
// if(insertData){
// Log.e("Inserted","Inserted ");
// }else{
// Log.e("NotInserted","NotInserted ");
// }
}
创建 DataBaseHelper 类:
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String TAG = "DatabaseHelper";
private static final String DATABASE_NAME = "GiftsDatabase.db";
SQLiteDatabase db;
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME,null,Constants.DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
try{
String createTable = " CREATE TABLE "+ Constants.TABLE_NAME +"(ID INTEGER PRIMARY KEY AUTOINCREMENT, "+Constants.NAME+" TEXT, "+Constants.SKU+" TEXT ,"+Constants.UPC+" TEXT,"+Constants.PRICE+" TEXT, "+Constants.DISPLAY_SIZE+" TEXT, "+Constants.DISPLAY_SIZE_YES+" INTEGER , "+Constants.STATUS+" TEXT)";
db.execSQL(createTable);
String createTableCount = " CREATE TABLE "+ Constants.TABLE_NAME_COUNT +"(ID INTEGER PRIMARY KEY AUTOINCREMENT, "+Constants.SKU_COUNT+" TEXT ,"+Constants.QUANTITY_COUNT+" TEXT)";
db.execSQL(createTableCount);
Log.e(TAG,"Created Database");
}catch (Exception e){
Log.e("EXCEPTION",""+e);
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(" DROP TABLE IF EXISTS "+Constants.TABLE_NAME);
db.execSQL(" DROP TABLE IF EXISTS "+Constants.TABLE_NAME_COUNT);
onCreate(db);
}
public boolean addData(String name , String sku, String upc , String price, String displaySize, int displaySizeYes, String status){
db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(Constants.NAME, name );
contentValues.put(Constants.SKU, sku );
contentValues.put(Constants.UPC, upc );
contentValues.put(Constants.PRICE, price );
contentValues.put(Constants.DISPLAY_SIZE, displaySize );
contentValues.put(Constants.DISPLAY_SIZE_YES, displaySizeYes );
contentValues.put(Constants.STATUS, status );
long result = db.insert(Constants.TABLE_NAME,null,contentValues);
Log.e(TAG,""+upc+" Inserted");
if(result == -1) {
return false;
}else{
// Log.e(TAG,"value inserted");
return true;
}
}
在 RecyclerView 适配器类的 ArrayList 上存储检查过的 RecyclerView 数据
ArrayList<YourPojoClass> data = new ArrayList<YourPojoClass>();
inside onBindViewHolder(); 这用于在选中的行中存储数据。
holder.checkBox..setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
data.add(name.get(position).getText,address.get(position).getText)
}
});
将数据发送到下一个 Activity :通过 Your Activity 在 recyclerView 底部创建一个按钮,然后单击该按钮将数据发送到下一个 Activity。