2017-11-26 22 views
1

文字列がjsonかどうかを確認できるようにしようとしています。私がやっているやり方は、jsonの値を配列に入れて、値が入っているかどうかを調べることです。問題は、それが1つずつチェックすることです。これにより、ユーザはシフトを行っていないと言います。その後、次のループで、彼らは働いていると言います。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

ユーザがシフトを選択すると、このコードは、そのシフトがすでにその日付で動作しているかどうかをチェックするために使用されます。ただし、配列を一度に1つずつチェックします。したがって、日付が最初でない場合、その日付で作業していないと言い、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

関連する問題