inventoryButton.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { if (isFastClick()) { showLoadToast(); goToMainActivity(); loadExcelFile(); } } private boolean isFastClick() { return ButtonOnCilk.isFastViewClick(inventoryButton, getBaseContext()); } private void showLoadToast() { CustomToast.showLoad(HomeActivity.this, getString(R.string.load)); } private void goToMainActivity() { Intent intent = new Intent(getApplicationContext(), MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); } private void loadExcelFile() { new AsyncTask<Void, Void, List<String>>() { @Override protected List<String> doInBackground(Void... voids) { return readExcelFile(); } @Override protected void onPostExecute(List<String> data) { showDataInListView(data); } }.execute(); } private void showDataInListView(List<String> data) { listView = findViewById(R.id.rv_list); if (listView != null) { ArrayAdapter<String> adapter = new ArrayAdapter<>(HomeActivity.this, android.R.layout.simple_list_item_1, data); listView.setAdapter(adapter); } } });private List<String> readExcelFile() { List<String> datas = new ArrayList<>(); try { FileInputStream inputStream = new FileInputStream("/sdcard/Template/IC1001.xlsx"); Workbook workbook = WorkbookFactory.create(inputStream); Sheet sheet = workbook.getSheetAt(0); for (Row row : sheet) { for (Cell cell : row) { datas.add(cell.toString()); } } workbook.close(); } catch (IOException | InvalidFormatException e) { e.printStackTrace(); } return datas; }报错
时间: 2023-11-27 20:50:16 浏览: 86
根据给出的代码和报错信息,很有可能是因为没有添加读取外部存储权限所导致的,你可以在 AndroidManifest.xml 文件中添加以下权限:
```xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
```
同时,你也需要在运行时动态请求该权限。可以使用以下代码请求权限:
```java
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
}
```
如果仍然无法解决问题,请将完整的报错信息提供给我,以便更好地定位问题。
相关问题
nowselect.setText(nowselectdata+"全部订单"); load(-1); selectAllorder.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { nowselect.setText(nowselectdata+"全部订单"); load(-1); } }); selectpredict.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { nowselect.setText(nowselectdata+"预购订单"); load(2); } }); selectshipped.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { nowselect.setText(nowselectdata+"已发货订单"); load(3); } }); return root;
这段代码看起来像是一个订单列表的筛选器的实现。它主要的功能是为订单列表添加一个可以根据订单状态进行筛选的功能。具体来说,它首先为三个按钮(selectAllorder、selectpredict 和 selectshipped)设置了点击事件监听器,当用户点击相应的按钮时,会根据按钮的状态不同来加载相应的订单列表。当用户点击 selectAllorder 按钮时,它会加载所有的订单列表,当用户点击 selectpredict 按钮时,它会加载预购订单列表,当用户点击 selectshipped 按钮时,它会加载已发货订单列表。在加载列表时,它会根据传入的参数值来进行筛选,并将筛选后的订单列表显示在相应的视图中。最后,它返回根视图对象 root,以便在界面中显示相应的订单列表。
public class MainActivity extends AppCompatActivity { private TextView resultText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); resultText = findViewById(R.id.result_text); findViewById(R.id.btn_0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { appendText("0"); } }); findViewById(R.id.btn_1).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { appendText("1"); } }); // 添加其他数字按钮的 onClickListener findViewById(R.id.btn_add).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { appendText("+"); } }); findViewById(R.id.btn_subtract).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { appendText("-"); } }); // 添加其他运算符按钮的 onClickListener findViewById(R.id.btn_clear).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { clearText(); } }); findViewById(R.id.btn_equals).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { calculate(); } }); } private void appendText(String text) { resultText.append(text); } private void clearText() { resultText.setText(""); } private void calculate() { try { String expression = resultText.getText().toString(); Expression e = new ExpressionBuilder(expression).build(); double result = e.evaluate(); resultText.setText(Double.toString(result)); } catch (IllegalArgumentException ex) { resultText.setText("Error"); } }}
这是一个简单的计算器应用程序的主要代码。它使用了一个第三方库,即“expr-eval”,来解析算术表达式并计算结果。在 onCreate() 方法中,它设置了数字和运算符按钮的 onClickListener,并分别调用了 appendText()、clearText() 和 calculate() 方法。在 appendText() 方法中,它向结果文本框中添加新的字符。在 clearText() 方法中,它简单地将结果文本框的内容设置为空。在 calculate() 方法中,它首先获取结果文本框中的表达式,然后使用 ExpressionBuilder 类构建一个 Expression 对象,该对象表示表达式的树形结构。最后,它调用 evaluate() 方法来计算表达式的结果,并将结果设置为结果文本框的内容。如果表达式无效,则 catch 语句将捕获 IllegalArgumentException 异常,并将结果文本框的内容设置为“Error”。
阅读全文