Android / Java: импорт текстового файла и считывание случайных строк из текстового файла - PullRequest
0 голосов
/ 27 сентября 2011

У меня есть код, над которым я работаю до сих пор, это будет игра, которую я пытаюсь создать, которая просто переключается между двумя игроками. Каждый раз, когда он переключается, он должен написать вопрос, как правда или смелость. Нельзя дважды писать один и тот же вопрос, и поэтому он должен видеть, использовал ли он уже этот вопрос.

Пока у меня это работает, и он переключается между двумя игроками каждый раз, когда вы нажимаете Next.

Но у меня много проблем с извлечением данных из txt-файла man, здесь есть три строки: text1, text2 и text3. Он должен быть в состоянии принять их случайным образом и знать, если он уже прочитал один. Я не могу заставить текущий InputStream работать, он говорит, что файл man является int, но он содержит строку?

Вот код на данный момент:

package truthordare;

import java.io.FileInputStream;
import java.io.IOException;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
//import android.content.Intent;


public class truthordareActivity extends Activity 

{
    public int i = 0;
    //public String man;
    //public String woman;
    TextView w;
    TextView m;


    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);   


        {
        final Button buttonPlay = (Button) findViewById(R.id.buttonPlay);
        buttonPlay.setOnClickListener(new View.OnClickListener() 
            {
                public void onClick(View v) 
                {
                gameCode();
                }
        });
    }
}


    /*public FileInputStream openFileInput(int man) throws IOException
{
    String collected = null;
    try 
    {
        FileInputStream fis = openFileInput(R.raw.man);
        byte[] dataArray = new byte[fis.available()];
        while (fis.read(dataArray) != -1)
            {
            collected = new String(dataArray);
            }
        fis.close();
    }
    catch (IOException e) 
        {
            e.printStackTrace();
        }
    return null;

}
*/



public void gameCode()
    {
        // Perform action on click
        setContentView(R.layout.game);
        if(i == 0)
            {
                w = (TextView)findViewById(R.id.textView1);
                w.setText("This is a player1");
                i = 1;
                final Button buttonNext = (Button) findViewById(R.id.buttonNext);
                buttonNext.setOnClickListener(new View.OnClickListener() 
                {
                    public void onClick(View v) 
                    {
                        gameCode();
                    }
                });
            }
        else
            {
                m = (TextView)findViewById(R.id.textView1);
                m.setText("This is player2");
                i = 0;
                final Button buttonNext = (Button) findViewById(R.id.buttonNext);
                buttonNext.setOnClickListener(new View.OnClickListener() 
                {
                    public void onClick(View v) 
                    {
                        gameCode();
                    }
                });
           }

    }  

}

Ответы [ 2 ]

1 голос
/ 27 сентября 2011

Рассматривали ли вы использование XML-файла для ваших вопросов?Исходя из предоставленной вами информации, структура должна выглядеть следующим образом:

<questions>
   <question>
      <id>1</id>
      <text>This is question nr. 1</text>
   </question>
   <question>
      <id>2</id>
      <text>This is question nr. 2</text>
   </question>
   <question>
      <id>3</id>
      <text>This is question nr. 3</text>
   </question>
</questions>

Загружать все вопросы в List / ArrayList в виде объектов Question, а когда вопрос задается - удалить его из списка.Если вам нужно сохранить вопросы на потом, не удаляйте их, а сохраняйте идентификаторы всех заданных вопросов в другом списке, и при попытке получить следующий вопрос убедитесь, что его идентификатор отсутствует в списке идентификаторов.

Чтобы получить случайный вопрос, вы просто используете генератор случайных чисел, который предоставляет вам значения от 0 до list.size ().

Таким образом, вам не придется тратить время на открытие и закрытиеInputStreams все время, и у вас есть простой способ убедиться, что вопрос задается только один раз.

1 голос
/ 27 сентября 2011

Возьмите InputStream, используя Resources.openRawResource.В вашем случае это getResources().openRawResource(R.raw.man).

...