2017-11-26 5 views
1

Ich versuche es zu machen, damit ich überprüfen kann, ob eine Zeichenfolge in einem JSON ist. Die Art, wie ich es mache, besteht darin, die Werte von json in ein Array zu schreiben und dann zu sehen, ob es den Wert enthält. Das Problem ist, dass es eins nach dem anderen überprüft. Dies bewirkt, dass der Benutzer die Schicht nicht bearbeitet, wenn dies der Fall ist. Dann sagt es auf der nächsten Schleife, dass sie arbeiten.Überprüfen Sie, ob JSON Zeichenfolge Wert enthält

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

Können Sie erklären, was das genaue Problem ist. Der Code sieht gut für mich aus. Was ist das Problem, mit dem Sie hier konfrontiert sind? –

+0

Der Benutzer wählt eine Schicht aus, dann wird dieser Code verwendet, um zu prüfen, ob die Schicht ausgewählt wurde, wenn sie bereits an diesem Datum arbeiten. Es wird jedoch durch das Array gehen und jeweils ein Element prüfen. Wenn das Datum nicht als erstes angezeigt wird, wird das Add-Shift(); In der Tat arbeiten sie bereits an diesem Datum, also AddShift(); sollte nicht aufgerufen werden, es ist nur später im Array. – James

Antwort

0

wie diese versuchen: Nehmen Sie einen 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; 

      } 
     } 

jetzt außerhalb der Schleife:

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

Sie können einfach die Pause verwenden; Anweisung in Ihrem Code direkt nach dem Toast Sie machen.

So im Fall, wenn sie an diesem Thay arbeiten nach dem Toast der Pause Aussage wird die Schleife für Sie am Ende und die restlichen Objekte in Ihrem jsonArray

Wie dies nicht durchqueren:

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

Das funktioniert nicht. Ich denke es ist, weil, wenn der Benutzer mehrere Schichten hat, sie bereits arbeiten. Es überprüft das Datum mit denen, bevor es schließlich zu diesem Datum kommt. – James

Verwandte Themen