2016-05-06 52 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功能,它说,他们是空的,我想这是因为截击要求不是这个快! 如果有人能解释我该怎么做

这里是我的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

我只是把我的'getWord()'变成一个必须启动我的游戏的函数,我刚刚添加了我的InitGame() –

回答

3

由于Volley是异步的,所以下面getWord()for循环将您的凌空请求onResponse之前被调用。

针对您的问题的解决方案是将for循环转换为onResponse,您可以将它放在while循环之后。

希望它有帮助!

+0

感谢您的帮助,但是如果我这样做,当我想要一个单词并将其放入一个textview,我将永远不得不做正确的请求?我只想发起一个请求,当我启动应用程序:( –

+0

不,只有一个请求,然后你的全局列表已经有值,你可以访问它的地方,也许当你点击一个按钮,例如。 – BNK

+1

这帮助我,我做了你所说的,但我写了,如果我的数组列表是空的,那么我发起我的请求,如果没有,我发起一个谁只是在阵列中的字! –

相关问题