Мое приложение для викторины не дает должного результата и переходит к конечному результату

Я создаю приложение для викторины, которое сопоставляет телугу с английским. Моя цель - получить десять вопросов, которые будут отображать каждый вопрос в течение 6 секунд и переходить к следующему вопросу. Но мое приложение ждет целых 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>

2 ответа

Проблема в том, что 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]);
    }

});

Вы просто зацикливаетесь и читаете одно и то же текстовое поле снова и снова. Это текстовое поле никогда не изменится во время выполнения вашего кода.

Другие вопросы по тегам