如何在recyclerView上获取和设置json数据?

时间:2018-01-25 11:24:09

标签: android json android-recyclerview

Android问题?

我得到json值并设置在recyclerView上,如果我选择项目名称,那么如何才能生成条件,然后只打印关于此数据值的费用,如此数量。

示例:在线订购食品安卓应用

1 个答案:

答案 0 :(得分:0)

如果要解析JSON,首先必须学习JSON解析。

您可以按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);
    
  4. 以下是使用Volley Library的Json Parsing教程并设置为RecyclerView。

    参考:https://inducesmile.com/android/android-json-parsing-using-gson-and-recyclerview/

      

    如果我选择项目名称然后只打印关于如何制定条件   这个数据值如Rate,数量就像这样。

    答:根据位置,您可以在Recyclerview Adapter类上获取该位置数据的费率,金额值。

    如何将所有的recyclerView数据传递给下一个活动并在android中保存sqlite数据库,在onclick Listener中?

    如果要将recyclelerView数据发送到下一个Activity,则必须按意图将pojo类对象发送到下一个活动。

    RecyclerView数据发送到下一个活动:

      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{
    

    创建一个循环,在活动类的Sqlite上存储所有的recyclerview数据:

     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)       
    
          }
        });
    

    将数据发送到下一个活动:在您的活动的RecyclerView底部创建一个按钮,然后单击该按钮将数据发送到下一个活动。