2014-02-21 3 views
1

영어로 텔루구 어와 일치하는 퀴즈 앱을 만들고 있는데, 내 목표는 각 질문을 6 초 동안 표시 할 10 개의 질문을하는 것입니다. 다음 질문으로 넘어 가라. 그러나 내 앱은 60 초 동안 기다리고 화면 전체에 A->를 표시한다.내 퀴즈 앱이 적절한 결과를 제공하지 않고 최종 결과로 이동합니다.

코드 :

public class LetterQuiz extends Activity { 
    int rightAnswer=0,wrongAnswer=0; 
    TextView finalResult; 
    TextView top, eval; 
    Typeface font; 
    EditText answer; 

    String english[] = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", 
    "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", 
    "Y", "Z" }; 
    String telugu[] = { "ఎ", "బి", "సి", "డి", "ఇ", "ఎఫ్", "జి", "ఎచ్", 
    "ఐ", "జె", "కె", "ఎల్", "య్మ్", "యెన్", "వొ", "పి", "క్యు", 
    "ఆర్", "ఎస్", "టి", "యు", "వి", "డబల్యు", "ఎక్స్", "వై", "జెడ్" }; 
    int number; 
    static Random rand = new Random(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_letter_quiz); 
     font = Typeface.createFromAsset(getAssets(), 
     "fonts/NotoSansTelugu-Bold.ttf"); 

     top = (TextView) findViewById(R.id.telugu); 
     eval = (TextView) findViewById(R.id.eval); 
     answer = (EditText) findViewById(R.id.answer); 
     finalResult=(TextView)findViewById(R.id.finale); 
     finalResult.setVisibility(View.GONE); 
     quiz(); 
    } 

    public void quiz() { 
     int wronganswers[]=new int[10]; 
     int j=0; 
     for(int k=0;k<10;k++) { 
      int i; 
      number = rand.nextInt(25 - 0) + 0; 
      top.setTypeface(font); 
      top.setTextSize(40.f); 
      top.setText(telugu[number]); 
      String user = answer.getText().toString(); 
      for (i = 0; i < english.length; i++) { 
       if (user.equalsIgnoreCase(english[i])) { 
        break; 
       } 
      } 
      if (i == number) { 
       eval.setText("Right Answer"); 
       SystemClock.sleep(1000); 
       rightAnswer++; 
      } 
      else { 
       eval.setText("Wrong Answer"); 
       SystemClock.sleep(1000); 
       wrongAnswer++; 
       wronganswers[j]=number; 
       j++; 
      } 
      SystemClock.sleep(6000); 
     } 

     finalResult.setText("No of right answers"+rightAnswer+"\nNo of wrong answers"+wrongAnswer+"\nletters to review"); 
     String review=""; 
     for(int i=0;i<wronganswers.length;i++) 
     review=english[wronganswers[i]]+"->"+telugu[wronganswers[i]]+"\n"; 
     finalResult.setText(review);   
     top.setVisibility(View.GONE); 
     eval.setVisibility(View.GONE); 
     answer.setVisibility(View.GONE); 
     finalResult.setVisibility(View.VISIBLE); 
    } 

XML :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".LetterQuiz" > 

    <TextView 
     android:id="@+id/telugu" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:layout_marginLeft="100dp" 
     android:layout_marginTop="19dp" 
     android:text="TextView" /> 

    <EditText 
     android:id="@+id/answer" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/telugu" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="71dp" 
     android:ems="10" > 

     <requestFocus /> 
    </EditText> 

    <TextView 
     android:id="@+id/eval" 
     android:layout_width="wrap_content" 
     android:layout_height="60dp" 
     android:layout_alignRight="@+id/telugu" 
     android:layout_below="@+id/answer" 
     android:layout_marginRight="20dp" 
     android:layout_marginTop="54dp" 
     android:text="TextView" /> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/finale" /> 

</RelativeLayout> 
+1

프로그램을 디버깅해야하는 것 같습니다. 단계를 밟거나 인쇄물을 인쇄하십시오. – keyser

+0

'SystemClock.sleep (6000);을 호출하여 UI를 멈추지 말라 AsyncTask를 보자. – donfuxx

+0

'SystemClock.sleep();'으로 인해 UI가 멈추는 것 외에, 응답의 논리에 몇 가지 문제가있다. 확인. 'i'와 임의로 생성 된'number'를 비교하는 이유는 무엇입니까? 그들이 올바르게 대답했는지는 알려주지 않습니다. – CheeseWarlock

답변

-1

당신은 단순히 반복하고 반복해서 같은 텍스트 필드를 읽고. 해당 텍스트 필드는 코드가 실행되는 동안 절대로 변경되지 않습니다.

+0

정확히 어떻게 설명 할 수 있습니까? 난 임의의 숫자가 바로 생성되는 것을 의미합니까? – user2711918

+0

예. 내 말은 UI 스레드의 루프에서 동일한 텍스트 필드를 반복해서 확인한다는 것입니다. 사용자는 UI 업데이트를 보거나 심지어 응답 할 기회를 얻지 못합니다. –

0

문제는 UIThread가 quiz() 메서드에서 멈추고 사용자에게보기를 변경하지 않는다는 것입니다.

다른 스레드에서 quiz() 메서드를 호출하십시오.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_letter_quiz); 
    font = Typeface.createFromAsset(getAssets(), 
    "fonts/NotoSansTelugu-Bold.ttf"); 

    top = (TextView) findViewById(R.id.telugu); 
    eval = (TextView) findViewById(R.id.eval); 
    answer = (EditText) findViewById(R.id.answer); 
    finalResult=(TextView)findViewById(R.id.finale); 
    finalResult.setVisibility(View.GONE); 

    Thread t=new Thread(){ 
     @Override 
     public void run() { 
     quiz(); 
     } 
    } 

    t.start(); 
} 

quiz() 방법의 예를

에 대한보기를 변경할 때마다 문에 runOnUiThread를 호출합니다. 예 :

runOnUiThread(new Runnable(){ 
public void run() { 
     top.setTypeface(font); 
     top.setTextSize(40.f); 
     top.setText(telugu[number]); 
    } 

});

관련 문제