为什么我的 resultLauncher.launch(intent) 返回 null 而我发现它不是?
Why is my resultLauncher.launch(intent) returning null when I see that it is not?
问题:
在调试期间,当 'if' 参数表示值不等于(即 !=)为零时,Trace.traceEnd(traceTag)
似乎正在对“0”(零)值执行。请参阅下面附带的屏幕截图。结果,当 intent
或 resultLauncher
都不为空时,它返回 'nullExceptionPointer'。
我在做什么:
我正在创建一个 table,其中包含一个 TextView 的行,当执行 TextView 的 OnClick 时,它会启动一个 FileChooser -- 预期的结果是捕获文件路径并填充TableRow 中的 TextView。
初始化 FileChooser class 并传递 Intent 后,我可以单步执行构造函数中的代码,看到 resultLauncher 已完全初始化并且传递的 Intent 不为空。下面是代码 TableRow / TextView 单击操作和调用文件选择器 class.
空异常指针出现在 resultLauncher.launch(intent) 上。在单步执行时,它出现在 Looper.java class 中,if(traceTag !=0) 参数在它为 0 时正在执行(参见图片附件)。
TableRow TextView 的代码 OnClick 设置:
row.addView(addRowTextViewToTable(context, fileName, false));
row.setClickable(true);
row.setOnClickListener(v ->{
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
FileChooser fileChooser = new FileChooser(intent);
TextView child = (TextView) row.getChildAt(1);
child.setText(fileChooser.getFilePath());
});
文件选择器Class:
public class FileChooser 扩展 AppCompatActivity {
public FileChooser(Intent intent){
resultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
if (result.getResultCode() == Activity.RESULT_OK && result.getData() != null){
Uri uri = result.getData().getData();
filePath = uri.getPath();
}
});
resultLauncher.launch(intent);
}
private String fileName;
private String filePath;
private final ActivityResultLauncher<Intent> resultLauncher;
public String getFileName() {
return fileName;
}
public String getFilePath() {
return filePath;
}
public ActivityResultLauncher<Intent> getResultLauncher() {
return resultLauncher;
}
}
在我看来 Looper.java
class 没有正常工作:
这最终成为需要提交给问题跟踪器的问题。它需要一个解决方法。
https://issuetracker.google.com/issues/19078322
问题:
在调试期间,当 'if' 参数表示值不等于(即 !=)为零时,Trace.traceEnd(traceTag)
似乎正在对“0”(零)值执行。请参阅下面附带的屏幕截图。结果,当 intent
或 resultLauncher
都不为空时,它返回 'nullExceptionPointer'。
我在做什么:
我正在创建一个 table,其中包含一个 TextView 的行,当执行 TextView 的 OnClick 时,它会启动一个 FileChooser -- 预期的结果是捕获文件路径并填充TableRow 中的 TextView。
初始化 FileChooser class 并传递 Intent 后,我可以单步执行构造函数中的代码,看到 resultLauncher 已完全初始化并且传递的 Intent 不为空。下面是代码 TableRow / TextView 单击操作和调用文件选择器 class.
空异常指针出现在 resultLauncher.launch(intent) 上。在单步执行时,它出现在 Looper.java class 中,if(traceTag !=0) 参数在它为 0 时正在执行(参见图片附件)。
TableRow TextView 的代码 OnClick 设置:
row.addView(addRowTextViewToTable(context, fileName, false));
row.setClickable(true);
row.setOnClickListener(v ->{
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
FileChooser fileChooser = new FileChooser(intent);
TextView child = (TextView) row.getChildAt(1);
child.setText(fileChooser.getFilePath());
});
文件选择器Class:
public class FileChooser 扩展 AppCompatActivity {
public FileChooser(Intent intent){
resultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
if (result.getResultCode() == Activity.RESULT_OK && result.getData() != null){
Uri uri = result.getData().getData();
filePath = uri.getPath();
}
});
resultLauncher.launch(intent);
}
private String fileName;
private String filePath;
private final ActivityResultLauncher<Intent> resultLauncher;
public String getFileName() {
return fileName;
}
public String getFilePath() {
return filePath;
}
public ActivityResultLauncher<Intent> getResultLauncher() {
return resultLauncher;
}
}
在我看来 Looper.java
class 没有正常工作:
这最终成为需要提交给问题跟踪器的问题。它需要一个解决方法。 https://issuetracker.google.com/issues/19078322