2017-11-26 4 views
1

문자열이 json인지 여부를 확인할 수 있도록하려고합니다. 내가하는 일은 json의 값을 배열에 넣은 다음 값이 들어 있는지 확인하는 것입니다. 문제는 그것이 하나씩 점검한다는 것입니다. 이로 인해 사용자는 교대조가 작동하고 있다고 말할 수 없습니다. 그런 다음 다음 루프에서 작업 중이라고합니다.json에 문자열 값이 있는지 확인하십시오.

private void CheckIfAlreadyWorking(String result) throws JSONException { 
    //removed code to condense 
    //result is a json of the days that the user is already working 
    if (datematcher.find()) { 
     String date = datematcher.group(1); //Date of the shift the user is already working 
     JSONArray jsonArray = new JSONArray(result); 
     String[] yourshifts = new String[jsonArray.length()]; 
     boolean end = false; 
     for (int i = 0; i < jsonArray.length(); i++) { 
       JSONObject obj = jsonArray.getJSONObject(i); 
       yourshifts[i] = obj.getString("date"); 
      if (yourshifts[i].contains(date)) { 
       //Already working that day 
       Toast.makeText(getApplicationContext(), "Error: You are already working this day", Toast.LENGTH_SHORT).show(); 
      } else if(end == false){ 
       AddShift(); 
       end = true; 
      } 
     } 

    } 
    else { 
     //Error 
    } 
} 
+0

정확한 문제점을 설명 할 수 있습니까? 코드가 잘 보입니다. 여기에서 겪고있는 문제점은 무엇입니까? –

+0

사용자가 교대조를 선택하면이 코드가 해당 교대조가 이미 해당 날짜에 작동하는지 확인하는 데 사용됩니다. 그러나 배열을 통해 한 번에 하나의 항목 만 검사합니다. 따라서 날짜가 첫 번째가 아닌 경우 해당 날짜가 작동하지 않는다고 표시되어 AddShift();를 호출합니다. 사실 그들은 이미 그 날짜에 일하고 있기 때문에 AddShift(); 호출되지 않아야합니다. 배열의 바로 뒤에 있습니다. – James

답변

0

보십시오 : 루프의 외부 이제 boolean isfound = false;

for (int i = 0; i < jsonArray.length(); i++) { 
       JSONObject obj = jsonArray.getJSONObject(i); 
       yourshifts[i] = obj.getString("date"); 
      if (yourshifts[i].contains(date)) { 
       isfound = true; 
       break; 

      } 
     } 

을 가지고 :

if(isFound ==true) 
{ 
    Toast.makeText(getApplicationContext(), "Error: You are already working this day", Toast.LENGTH_SHORT).show(); 
} 
else 
{ 
    AddShift(); 
} 
0

간단히 휴식을 사용할 수 있습니다. 토스트를 작성한 직후에 코드에 문이 있습니다. 그래서

는 경우에 그들은 당신을위한 루프를 종료합니다 축배를 break 문을 한 후, 그 어떤것에서 작업하는 경우와 jsonArray이 같이

에 남아있는 물체를 통과하지 않습니다

if (yourshifts[i].contains(date)) { 
    //Already working that day 
    Toast.makeText(getApplicationContext(), "Error: You are already working this day", Toast.LENGTH_SHORT).show(); 
    break; 
} 
이 같은
+0

작동하지 않습니다. 사용자가 이미 근무하고있는 여러 교대 근무자가있는 것이 원인이라고 생각합니다. 그것은 마지막으로 그 날짜에 도착하기 전에 그들과 함께 날짜를 확인합니다. – James

관련 문제