我正在尝试构建一个应用程序,该应用程序每次按下按钮都会显示一个随机文本文件。我已经想出了如何从资产文件夹中获取单个文本文件,但我想不出如何使应用程序随机选择一个文本文件。我需要添加什么才能允许此操作?
对此我有点陌生,并且到目前为止,一直没有任何运气,试图找到一种解释。
public class MainActivity extends AppCompatActivity {
Button random_story;
TextView story_text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
random_story = (Button) findViewById(R.id.random_story);
story_text = (TextView) findViewById(R.id.story_text);
random_story.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String text = "";
try {
InputStream is = getAssets().open("1.txt");
int size = is.available();
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
text = new String(buffer);
} catch (IOException ex){
ex.printStackTrace();
}
story_text.setText(text);
}
});
}
}
当前代码始终获得“ 1.txt”。资产文件夹包含1、2、3、4、5等,我希望按下按钮以随机选择其中之一。
答案 0 :(得分:0)
生成随机数并使用
Random r = new Random();
int fileStart = 1; // if first file name is 1.text
int fileEnd = 11; // if last file name is 10.txt
int randomFile = r.nextInt(fileEnd - fileStart) + fileStart;
现在使用它
InputStream is = getAssets().open(randomFile + ".txt");
注意::仅当文件名按顺序排列时,此解决方案才有效。
答案 1 :(得分:0)
使用Random类并生成一个介于1和末尾之间的数字:
其中最大为5,最小为1,格式为:
InvalidTemplate. Unable to process template language expressions in action 'Extract' inputs at line '1' and column '1292': 'The template language expression 'triggerBody()?['ID']' cannot be evaluated because property 'ID' cannot be selected. Property selection is not supported on values of type 'Integer'. Please see https://aka.ms/logicexpressions for usage details.'.
例如:
nextInt(max - min + 1) + min;
或者如果数字本身是随机的,则将它们添加到Random random = new Random();
int num = random.nextInt(5 - 1 + 1) + 1;
InputStream is = getAssets().open(num + ".txt");
并从该List
获取随机数:
List