【问题标题】:How to get and set json data on recyclerView?如何在recyclerView上获取和设置json数据?
【发布时间】:2018-01-25 11:24:08
【问题描述】:

Android 问题?

我得到 json 值并在 recyclerView 上设置,如果我选择项目名称然后只打印关于这个数据值的条件,比如 Rate,这样的数量。

示例:在线订餐安卓应用

【问题讨论】:

  • 如果你尝试了一些东西并寻求帮助,那么它会很好
  • 目前还不清楚你想要什么。
  • 我正在开发在线食品订购应用程序,如果我选择项目名称然后打印这个项目Rate , Gst from json 然后根据数量计算
  • 这取决于您现有的代码。你没有显示它。
  • 如果我增加数量然后自动添加费率和消费税,怎么可能

标签: android json android-recyclerview


【解决方案1】:

要解析JSON,首先要学习JSON Parsing。

您可以通过 Volley LibraryRetrofit 等解析 JSON。

将 JSON 转换为 POJO/Model 类的站点jsonschema2pojo

解析 JSON 的步骤:

  1. 根据你的 json 创建 Pojo 类。

  2. 使用 Volley 或 Retrofit 解析 json。

  3. 在 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。

【讨论】:

  • 如何将所有 recyclerView 数据传递给下一个活动并将 sqlite 数据库保存在 android 中,在 onclick 侦听器中?
  • 想问问老大?如何在每个 RecyclerView 数据中插入复选框,如果我选择三个项目然后发送下一个活动并保存在 android 中。
  • 想问问老大?如何在每个 RecyclerView 数据中插入复选框,如果我选择三个项目然后发送下一个活动并保存在 android 中。
  • 您将如何通过单击任何按钮或其他任何按钮来进行下一个活动? @Rahul
猜你喜欢
  • 2019-05-28
  • 2020-01-20
  • 2018-12-16
  • 2014-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多