protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_news_one); InputStream inputStream = getResources().openRawResource(R.raw.nafld); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); try { int i = inputStream.read(); while (i != -1) { byteArrayOutputStream.write(i); i = inputStream.read(); } inputStream.close(); } catch (IOException e) { e.printStackTrace(); } TextView textView = findViewById(R.id.txt_content); textView.setText(byteArrayOutputStream.toString());
时间: 2023-06-16 18:02:00 浏览: 129
这段代码是在Android应用程序中读取raw资源文件夹下的nafld文件,并将其内容显示在TextView控件上。具体实现步骤如下:
1. 在res目录下创建raw文件夹,并将nafld文件放在该文件夹下。
2. 通过getResources().openRawResource()方法获取nafld文件的InputStream对象。
3. 创建一个ByteArrayOutputStream对象,用于存储从InputStream中读取的数据。
4. 使用while循环逐个读取InputStream中的字节,并写入ByteArrayOutputStream对象中。
5. 关闭InputStream对象。
6. 通过findViewById()方法获取TextView控件对象,并将ByteArrayOutputStream对象中的数据转换为字符串,并设置为TextView的文本内容。
需要注意的是,该代码应该在Activity的onCreate()方法中调用,且应该在调用setContentView()方法之后执行。同时,应该对可能出现的IOException进行异常处理,以保证程序的稳定性。
相关问题
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_news_one); InputStream inputStream = getResources().openRawResource(R.raw.nafld); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); try { int i = inputStream.read(); while (i != -1) { byteArrayOutputStream.write(i); i = inputStream.read(); } inputStream.close(); } catch (IOException e) { e.printStackTrace(); } TextView textView = findViewById(R.id.txt_content); textView.setText(byteArrayOutputStream.toString()); 修改成正确的代码
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_news_one);
InputStream inputStream = getResources().openRawResource(R.raw.nafld);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
try {
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) != -1) {
byteArrayOutputStream.write(buffer, 0, length);
}
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
TextView textView = findViewById(R.id.txt_content);
textView.setText(byteArrayOutputStream.toString());
}
修改后的代码中,我们使用了一个 while 循环来读取 InputStream 中的内容,并将其写入 ByteArrayOutputStream 中。同时,我们还使用了一个 buffer 数组来缓存读取到的数据,从而提高了读取的效率。最后,我们将 ByteArrayOutputStream 中的内容转换成字符串,并将其设置为 TextView 的文本内容。
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView listView = findViewById(R.id.list_view); List<ImportViewModel> data = readExcelFile(); // 调用您的 readExcelFile() 方法获取数据 ImportViewModelAdapter adapter = new ImportViewModelAdapter(data); listView.setAdapter(adapter); TextView textView = findViewById(R.id.text_type); textView.setVisibility(View.GONE); TextView textView1 = findViewById(R.id.text_name); textView1.setVisibility(View.GONE); TextView textView2 = findViewById(R.id.text_style); textView2.setVisibility(View.GONE); TextView textView3 = findViewById(R.id.text_inventory_num); textView3.setVisibility(View.GONE); RfApplication.toneGenerator = new ToneGenerator(streamType, percantageVolume); btn_update = findViewById(R.id.btn_update); rvList = findViewById(R.id.list_view); rvList.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) { ShowData item = (ShowData) adapterView.getItemAtPosition(i); if (!isStarted) { modeDialog(item); } else { CustomToast.showLoad(MainActivity.this, getString(R.string.please_stop_read), 2000); } return true; } }); // showDataList = new ArrayList<>(); //adapter = new StockInListViewAdapter(this, showDataList); rvList.setAdapter(adapter); }java.lang.IllegalStateException: Cannot get a numeric value from a text cell怎么解决
这个错误通常是因为您在尝试从 Excel 表格中读取文本单元格时,将其转换为数字或其他类型时发生的。您可以通过在读取数据之前检查单元格类型并据此进行类型转换来解决此问题。以下是一个示例代码片段,演示如何处理这个问题:
```
private List<ImportViewModel> readExcelFile() {
List<ImportViewModel> data = new ArrayList<>();
try {
InputStream input = getAssets().open("data.xlsx");
Workbook workbook = WorkbookFactory.create(input);
Sheet sheet = workbook.getSheetAt(0);
for (Row row : sheet) {
ImportViewModel item = new ImportViewModel();
Cell cell0 = row.getCell(0);
if (cell0.getCellType() == CellType.NUMERIC) {
item.setId((int) cell0.getNumericCellValue());
} else {
item.setId(Integer.parseInt(cell0.getStringCellValue()));
}
Cell cell1 = row.getCell(1);
item.setName(cell1.getStringCellValue());
Cell cell2 = row.getCell(2);
item.setStyle(cell2.getStringCellValue());
Cell cell3 = row.getCell(3);
if (cell3.getCellType() == CellType.NUMERIC) {
item.setInventoryNum((int) cell3.getNumericCellValue());
} else {
item.setInventoryNum(Integer.parseInt(cell3.getStringCellValue()));
}
data.add(item);
}
input.close();
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
return data;
}
```
这里的代码通过调用 `getCellType()` 方法检查单元格类型,并根据需要使用 `getNumericCellValue()` 或 `getStringCellValue()` 方法获取值。这应该能够解决您遇到的问题。
阅读全文