2016-05-06 3 views
2

私はVolleyのリクエストを実行し、応答を解析して返しますが、これを達成する方法はわかりません。 誰かを助けることができますか? は、ここに私のコードです:Android - Volleyの応答が完了して実行を続けるのを待ちます

public void getWord(){ 
    final JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, "http://ent-ifsi.com/Projet/Application_Android/pendu_android.php", 
      new Response.Listener<JSONObject>() { 
       @Override 
       public void onResponse(JSONObject response) { 

        try { 
         JSONObject lesMots = response.getJSONObject("lesMots"); 

         Iterator<?> keys = lesMots.keys(); 

         while (keys.hasNext()) { 
          String key = (String) keys.next(); 
          if (lesMots.get(key) instanceof JSONObject) { 
           JSONObject obj = (JSONObject) lesMots.get(key); 
           //Récupération des deux mots, anglais et français 
           String wordToFind = obj.getString("wordFrench").toUpperCase(); 
           String wordEnglish = obj.getString("wordEnglish").toUpperCase(); 
           //Mots mis dans un array respectif 

           listOfWordEnglish.add(wordEnglish); 
           listOfWordFrench.add(wordToFind); 
           container.removeAllViews(); 
          } 
          numberOfWord++; 

         } 

        } catch (JSONException e) { 
         e.printStackTrace(); 
         Toast.makeText(getApplicationContext(), e + "", Toast.LENGTH_LONG).show(); 
        } 

       } 
      }, 


      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        Log.e("Volley", "ERROR"); 
        Toast.makeText(getApplicationContext(), error + "", Toast.LENGTH_LONG).show(); 

       } 
      } 


    ); 
    queue.add(jsonObjectRequest); 

} 

あり7単語が各配列であるが、私は私のinitGame関数にアセスを取得しようとしているとき、それは彼らが私がボレー要求は、この高速ではないので、それはだと思う、空になっていると述べました! 誰かがどのようにVolleyので

はここに私のinitGame機能

`public void initGame() { 
     win = false; 
     found = 0; 
     typed_word.setText(""); 
     image.setBackgroundResource(R.drawable.first); 
     listOfLetters = new ArrayList<>(); 
     listOfWordFrench = new ArrayList<>(); 
     listOfWordEnglish = new ArrayList<>(); 
     getWord(); 

     for (int i = 0; i < listOfWordEnglish.size(); i++){ 
      System.out.println(i); 
      String wordEnglish = listOfWordEnglish.get(i); 
      wordEnglishPendu.setText(wordEnglish); 
      word = listOfWordFrench.get(i); 
      for (int x = 0; x < word.length(); x++) { 
       TextView oneLetter = (TextView) getLayoutInflater().inflate(R.layout.textview, null); 
       container.addView(oneLetter); 

      } 
     } 
    }` 
+0

はあなたのリクエストですか? '' onResponse'''が呼ばれていますか? – danypata

+0

私はちょうど私のInitGame()を追加した私のゲームを初期化する必要がある関数に私の 'getWord()'を呼びました。 –

答えて

3

であることを行うには非同期で、getWord()以下forループがあなたのバレーボール要求のonResponse前に呼び出されますので、私を説明することができます。

あなたの問題の解決策は、あなたがwhileループの後にそれを置くことができ、onResponseにそのforループを移動することです。

希望すると助かります!

+0

助けてくれてありがとうございます。しかし、もし私が単語を取得し、私はいつも要求を正しく行う必要がありますか?私はアプリを起動するときに1つのリクエストをしたいだけです:( –

+0

いいえ、1つのリクエストだけです。グローバルリストの値がすでに値になったら、おそらくボタンをクリックするとどこかにアクセスできます。 – BNK

+1

私はあなたが言うことを作ったが、私の書記が空の場合は書きます。私が私の要求を出したら、そうでなければ、私は配列で単語を取るだけです! –

関連する問題