数组中的Java返回不正确的值

时间:2014-10-08 08:37:30

标签: java android

我使用以下代码从服务器使用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

我的代码问题是什么?

3 个答案:

答案 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));