图先欠着:
1.使用JSONObject来保存数据,添加多条数据来实现多选的状态,若是使用SharedPreferences的话不太适合多选,只是适合单选的状态保存,还有点麻烦,所以我选择了JSONObject来保存数据:
这里会用到对key-value的组合使用,上图是项目中打印的筛选条件的日志,用的是MongoDB结合使用的:
创建多个对象结合MongoDB并添加数据:
JSONObject json = new JSONObject();
JSONObject moneyJson = new JSONObject();//借入总额
JSONObject daysToLendJson = new JSONObject();//周期
JSONObject preminmJson = new JSONObject();//借入日利率
try {
moneyJson.put("$gte", "10");//大于等于10 芒果db语法 添加到借入总额中
moneyJson.put("$lte", "50");//小于等于50
} catch (JSONException e) {
e.printStackTrace();
}
try {
daysToLendJson.put("$lt", "7");//小于7
} catch (JSONException e) {
e.printStackTrace();
}
上面是根据多选的按钮的点击在监听事件里添加数据,下面是添加对象的数据:
try {
GlobalLog.e("sgf", moneyJson.length() + "==========moneyJson=============");
GlobalLog.e("sgf", preminmJson.toString() + "==========preminmJson=============");
GlobalLog.e("sgf", daysToLendJson.toString() + "==========daysToLendJson=============");
if (moneyJson.length()>0 && !moneyJson.equals(null)) {
json.put("b_token_amount", moneyJson);//借入总额
}
if (preminmJson.length()>0 && !preminmJson.equals(null)) {
json.put("premium", preminmJson);//借入日利率
}
if (daysToLendJson.length()>0 && !daysToLendJson.equals(null)) {
json.put("days_to_lend", daysToLendJson);//借入周期
}
} catch (JSONException e) {
e.printStackTrace();
}
网络请求和赋值最后组合的对象,并且在选择后清空数据,不然筛选的条件会保留导致筛选条件有问题:
String gameMap = json.toString();
GlobalLog.e("sgf", gameMap + "=============gameMap==========");
requestHomeService(URLConstant.URL_GETALLBRBYPAGE, 0, 10, gameMap);//请求数据
//清空数据
json=null;
preminmJson=null;
daysToLendJson=null;
moneyJson=null;
json = new JSONObject();
preminmJson = new JSONObject();
daysToLendJson = new JSONObject();
moneyJson = new JSONObject();
请求数据的方法也贴出来吧,用的是OKGo,这里就不多做解释了:
/**
* 开始请求
*/
private void requestHomeService(String url, int start, int page_size, String gameMap) {//start=0&page_size=10&filter=
//URLConstant.URL_GETALLBRBYPAGE+"start=0&page_size=10&filter="
// OkGo.<String>get(URLConstant.URL_GETALLBRBYPAGE+"start="+start+"&page_size="+"filter="+filter).tag(this).execute(new StringCallback() {
OkGo.<String>get(url + "start=" + start + "&page_size=" + page_size + "&filter=" + gameMap).tag(this).execute(new StringCallback() {
@Override
public void onSuccess(Response<String> response) {
GlobalLog.e("sgf", map + "=============map==========");
// et_id.setText(response.body().toString());
dataBean.clear();//数据数据重复要clear
GlobalLog.e("sgf", response.body().toString() + "==========666=============");
loanContractsContract = JsonUtil.fromJson(response.body(), LoanContractsContract.class);
for (int i = 0; i < loanContractsContract.getData().size(); i++) {
b_token_name = loanContractsContract.getData().get(i).getB_token_name();
token_name = loanContractsContract.getData().get(i).getToken_name();
GlobalLog.e("sgf", token_name + "=============token_name==========");
}
// dataBean.add(response.body());
GlobalLog.e("sgf", "---------------" + loanContractsContract.getData().size() + "------------------------------");
if (loanContractsContract.getData().size() == 0) {
// ToastUtil.showShort(context,"无数据");
setViewNotNetWork(8, 0, 0, 3);
} else {
setViewNotNetWork(0, 8, 0, 2);
}
dataBean.addAll(loanContractsContract.getData());
mLoanmarketListAdapter = new LoanmarketListAdapter(getActivity());
mLoanmarketListAdapter.setData(dataBean);
listView_loanmarket.setAdapter(mLoanmarketListAdapter);
mLoanmarketListAdapter.notifyDataSetChanged();
DialogUtil.getInstance().closeLoadingDialog();
}
@Override
public void onError(Response<String> response) {
super.onError(response);
// ToastUtil.showShort(walletApplication,"请求失败:"+loanContractsContract.getMessage());
DialogUtil.getInstance().closeLoadingDialog();
}
});
下面是我写的一个Map转JSON的方法,里面也是对数据的保存:
/**
* Map转JSON
*
* @return gameMap
*/
public static String mapToJson(String key,String value) {
// TODO SGF ADD
Map<String,String> map=new HashMap<String,String>();
//添加元素
map.put(key, value);
ObjectMapper mapper = new ObjectMapper();//map转JSON对象
String gameMap = null;
try {
gameMap = mapper.writeValueAsString(map);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return gameMap;
}
/**
* 多个Map转JSON
*
* @return gameMap
*/
public static String mapToJsonMore(String preminm_lte_key,String preminm_lte_value, String preminm_gte_key,String preminm_gte_value,
String daysToLend_lt_key,String daysToLend_lt_value,
String status_key,String status_value,String premium,String days_to_lend,
String b_token_amount,String b_token_amount_key,String b_token_amount_value) {
// TODO SGF ADD
// 条件操作符
// db.col.find({"likes" : {$gt : 100}}) 大于
// db.col.find({"likes" : {$gte : 100}}) 大于等于
// db.col.find({"likes" : {$lt : 100}}) 小于
// db.col.find({"likes" : {$lte : 100}}) 小于
// db.col.find({likes : {$lt :200, $gt : 100}}) 100<n<200
// db.col.find({"likes" : {$ne : 100}}) 不等于
// db.col.find({"likes" : {$eq : 100}}) 等于
String str =null;
try {
//{ "status" : "4", "premium" : { "$lte" : "0.15", "$gte" : "0.1" }, "days_to_lend" : { "$lt" : "7" } }
JSONObject json = new JSONObject();
JSONObject moneyJson = new JSONObject();//借入总额
moneyJson.put(b_token_amount_key,b_token_amount_value);
moneyJson.put("","");
JSONObject preminmJson = new JSONObject();//借入日利率
// if(preminm_lte_key!=null||preminm_lte_key!=""){
preminmJson.put(preminm_lte_key, preminm_lte_value);
// }else if("".equals(preminm_lte_key)||preminm_lte_key.equals(null)){
// GlobalLog.e("sgf", preminm_lte_key+ "是空的");
// }
if(preminm_gte_key!=null||preminm_gte_key!=""){
preminmJson.put(preminm_gte_key, preminm_gte_value);
}
GlobalLog.e("sgf", preminm_lte_key+ "=========9====preminm_lte_key==========");
GlobalLog.e("sgf", preminm_gte_key+ "=========9====preminm_gte_key==========");
JSONObject daysToLendJson = new JSONObject();//周期
daysToLendJson.put(daysToLend_lt_key, daysToLend_lt_value);
json.put(status_key, status_value);
json.put(b_token_amount, moneyJson);//借入总额
if(preminm_lte_key!=null||preminm_lte_key!=""){
json.put(premium, preminmJson); }
json.put(days_to_lend, daysToLendJson);
str = json.toString();
GlobalLog.e("sgf", json.toString() + "=========9====json.toString()==========");
} catch (JSONException e) {
e.printStackTrace();
}
return str;
}