2017-03-16 10 views
0
try 
{    
      //got input from asset that's not a problem 

      JSONObject obj = new JSONObject(loadJSONFromAsset()); 

      JSONArray m_jArry1 = obj.getJSONArray("check"); 
      int j=0,i,k=0; 

      while(j<m_jArry1.length()) { 

       JSONObject jsonObject = m_jArry1.getJSONObject(j); 
       JSONArray m_jArry = jsonObject.getJSONArray("formules"); 

       ArrayList<Integer> list = new ArrayList<Integer>(m_jArry.length()); 
       for (i = 0; i < m_jArry.length(); i++) { 
        list.add(i); 
       } 

       Collections.shuffle(list); 

       //shuffled the list for random generation of questions and answer 
       // so that's not a problem too.  


       for (i = 0; i < 6; i++) { 

        JSONObject jo_inside = m_jArry.getJSONObject(list.get(i)); 
        formula_value = jo_inside.getString("ques"); 
        url_value = jo_inside.getString("ans"); 



      /*I want to read question and answer from formula_value & 
      url_value each time and wait for 6 seconds until the next set arrives... 
      So I used Handler to make it wait for 6 seconds which isn't working ..   
      but it's going to the last value directly .*/ 

        handler = new Handler(); 
        handler.postDelayed(new Runnable(){ 
         @Override 
         public void run() { 


          textView.setText(formula_value); 


          editText.setOnEditorActionListener(new TextView.OnEditorActionListener() { 


       //using this so that there is an action only when done is pressed . 
           @Override 
           public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
            if(actionId== EditorInfo.IME_ACTION_DONE){ 
             //Clear focus here from edittext 
             editText.clearFocus(); 
            } 
            if(editText.getText().equals(url_value)){ 
             total++; 
             textView1.setText("Correct"); 
          //display correct if right 
            } 
            else{ 
             textView1.setText("Wrong"); 
          //display wrong if wrong 
            } 

            return false; 
           } 
          }); 

         } 


       },6000); 
여기

내가 6 초 준 .. 정말 무슨 일이 .. 일반 텍스트 뷰가 6 초 표시 한 후 마지막 질문이 화면에 나타난 도착한다는 것입니다핸들러는 계획대로 작동하지

    Log.d("For and url is ",formula_value+" and "+url_value); 
       } 


       j++; 
      } 

     }catch (JSONException e) { 
      e.printStackTrace(); 
     } 

로그를 참조하십시오 그들은 기다리지 않고 신속하게 기록 얻을 .. 이 enter image description here

답변

0

당신은 핸들러의 실행 가능한에서 값을 업데이트하지 않습니다에이 때문이다 PLS 도와 마십시오. 처리기. 게시가 지연되어 루프가 일시 중지되지 않습니다. 루프가 실행 중입니다. 귀하의 가치는 6 초 전에 업데이트됩니다. 그리고 6 초가 끝나면 루프가 실행될 때 항상 마지막 값을 얻게됩니다.

내가 관찰 한 또 하나의 사실은 여기에 중첩 루프를 사용하고 있다는 것입니다. 이 조건에서 재귀을 사용하는 것이 좋습니다. 감사합니다

0

나는이 문제를 발견했습니다. .. 나는 큰 실수 인 for 루프를 사용하고있었습니다. 이제 처리기를 중지하는 방법에 큰 의문이 생겼습니다. 나는

mHandler.removeCallbacksAndMessages(null); 

       or 

    mHandler.removeCallbacks(runnable); 

을 사용했으며 처리를 중지하는 데 가능한 모든 단계를 수행했습니다. 아무것도 작동하지 않습니다. 무한 루프가 실행됩니다. 어떻게 그만 둘지 모르겠다. (

C 여기에 handler.removecallbacks not working