我使用以下代码从服务器使用JSON检索数据:
String smsReceivedSender = "";
String receive_lastID = "";
String r = new JsonService(username, password, 0, 1, G.F_RECEIVE_SMS).request();
JSONArray data_array = new JSONArray(r);
JSONObject json_obj = data_array.getJSONObject(0);
receive_lastID = json_obj.getString("id_recived_sms");
smsReceivedSender = json_obj.getString("mobile_number");
我的课程结构为:
public class ReceivedItemStructure {
public String mLastID;
public String mUserID;
public String mSmsBody;
public String mMobileNumber;
public String mDate;
public String mSenderName;
public String mSmsNumber;
public String mContactName;
}
在搜索此类数据后,我尝试从中获取项目并保存到新的ArrayList
中,例如:
ArrayList<String> items_array = new ArrayList<String>();
for (ReceivedItemStructure rf:items){
items_array.add(rf.getmLastID());
}
检查数据:
for (String rf:items_array){
Log.e("items_array lastID value", rf);
}
现在我想通过以下方式搜索receive_lastID
到item_array array
:
Log.e("Received lastID", receive_lastID);
if( Arrays.asList(items_array).contains(receive_lastID) ) {
countSMS++;
}
检查结果:
Log.e("Result Check: ", String.valueOf(Arrays.asList(items_array).contains(receive_lastID)));
但那会返回false
所有人
logcat的:
10-08 08:15:25.100 2817-2817/ir.tsms E/Received lastID﹕ 30360152
10-08 08:15:25.100 2817-2817/ir.tsms E/items_array lastID value﹕ 30360087
10-08 08:15:25.100 2817-2817/ir.tsms E/items_array lastID value﹕ 30360052
10-08 08:15:25.100 2817-2817/ir.tsms E/items_array lastID value﹕ 30360015
10-08 08:15:25.100 2817-2817/ir.tsms E/items_array lastID value﹕ 30359363
10-08 08:15:25.100 2817-2817/ir.tsms E/items_array lastID value﹕ 30359353
10-08 08:15:25.100 2817-2817/ir.tsms E/items_array lastID value﹕ 30359273
10-08 08:15:25.100 2817-2817/ir.tsms E/items_array lastID value﹕ 30359195
10-08 08:15:25.100 2817-2817/ir.tsms E/items_array lastID value﹕ 30354338
10-08 08:15:25.100 2817-2817/ir.tsms E/items_array lastID value﹕ 30354260
10-08 08:15:25.100 2817-2817/ir.tsms E/items_array lastID value﹕ 30353823
10-08 08:15:25.100 2817-2817/ir.tsms E/Result Check:﹕ false
30360152 lastId不在items_array
中且必须返回false。但如果false
有{或1}},那么alwayes会返回items_array
。
我的代码问题是什么?
答案 0 :(得分:1)
items_array
是一个List<String>
,因此当您拨打Arrays.asList(items_array)
时,您会在数组上调用,但是您将获得列表List<List<String>>
的列表,这不会起作用; d
尝试使用foreach循环搜索列表,或者如果使用java 8,请使用.stream(),例如
items_array.stream().filter(o -> o.mLastID == receive_lastid).findFirst().get()
请阅读一些有关干净代码的信息,您的公共变量+吸气剂对我来说似乎很奇怪。
编辑:或只使用contains()....
答案 1 :(得分:0)
而不是使用
String.valueOf(Arrays.asList(items_array).contains(receive_lastID))
手动检查每个字符串
for (String text : items_array) {
if (text.equals(receive_lastID))
return true;
}
return false;
请参阅why?
答案 2 :(得分:0)
只需使用items_array.indexOf(receive_lastID)!= - 1就像这样
Log.e("Result Check: ", String.valueOf(items_array.indexOf(receive_lastID)!=-1));