java - 第一次无法上传图片,第二次可以正常使用
问题描述
我正在从我的代码中上传任何类型的文件,但问题是当我第一次运行我的代码并尝试上传图像时,当时没有上传图像。如果我先上传一个文件,例如一个PDF文件,它会成功上传,然后当我上传图片时,它也会成功上传。我对这个问题一无所知。请帮忙。
这是上传图像/文件的代码。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
showFileChoser();
} else {
if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.CAMERA)) {
Toast.makeText(getActivity(), "App requires Phone permission.\nPlease allow that in the device settings.", Toast.LENGTH_LONG).show();
}
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.CAMERA}, STORAGE_PERMISSION_CODE);
}
} else {
showFileChoser();
}
和showFileChoser
功能。
private void showFileChoser() {
Intent intent = new Intent();
intent.setType("*/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select document"), PICK_DOCUMENT);
}
onActivityResult
。_
// Handling the ima chooser activity result
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_PDF_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
filePath = data.getData();
// uploadMultipart();
try {
execMultipartPost();
} catch (Exception e) {
e.printStackTrace();
}
}
}
而且onRequestPermissionsResult
是...
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
//Checking the request code of our request
if (requestCode == STORAGE_PERMISSION_CODE) {
//If permission is granted
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//Displaying a toast
Toast.makeText(getActivity(), "Permission granted now you can read the storage", Toast.LENGTH_LONG).show();
} else {
//Displaying another toast if permission is not granted
Toast.makeText(getActivity(), "Oops you just denied the permission", Toast.LENGTH_LONG).show();
}
}
}
文件上传功能如下。
private void execMultipartPost() throws Exception {
RequestBody requestBody;
pBar.setVisibility(View.VISIBLE);
final SessionManager session = new SessionManager(getActivity());
final HashMap<String, String> loggedDetail = session.getLoggedDetail();
HashMap<String, String> params = new HashMap<String, String>();
String api_token = loggedDetail.get("api_token");
if (filePath != null) {
String path = FilePath.getPath(getActivity(), filePath);
requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("identity_file", path)
.addFormDataPart("training", edtTraining.getText().toString())
.addFormDataPart("user_id", loggedDetail.get("id"))
.addFormDataPart("experience", experience)
.addFormDataPart("skills", edtSkills.getText().toString())
.addFormDataPart("address_file", "")
.addFormDataPart("cv_file", "")
.addFormDataPart("dbs_file", "")
.build();
}
}
解决方案
据我所知,您是requestPermissions
从Fragment
. 当您ActivityCompat.requestPermissions
用于向用户请求许可时,onRequestPermissionsResult
不会在Fragment
. 这是一个类似的问题,它表明Fragment
'onRequestPermissionsResult
没有被调用,而正在调用调用Activity
' onRequestPermissionsResult
。我认为这也是您的情况。
现在要摆脱这个问题,你需要使用
requestPermissions(new String[]{Manifest.permission.CAMERA}, STORAGE_PERMISSION_CODE);
代替
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.CAMERA}, STORAGE_PERMISSION_CODE);
不要ActivityCompat.requestPermissions
在您的. 中使用Fragment
,因为这将调用onRequestPermissionResult
您Activity
正在启动Fragment
.
希望有帮助。
推荐阅读
- java - if(item1 ? item2) 的含义:item3
- java - Java中Postman和POST请求的区别
- javascript - 从 muterun_js 获取输出到 python
- android - 如何将 Firebase 身份验证服务与其数据库集成?
- reactjs - 如何添加 antd 单选按钮进行反应?
- python - 矩阵乘以逆不产生身份
- oracle - 如何使 CORPORATE RATE TYPE 成为 Oracle 表单中唯一选择的选项?
- javascript - Angular ngfor 全选并取消选择
- reactjs - Reactjs 通过 redux 从 store 中获取存储的值
- pandas - 网页抓取:在 DataFrame 中抓取页面和存储内容