在做安卓开发的录音上传服务器这一功能时遇到如下错误
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.io.File.getAbsolutePath()' on a null object reference
报错显示没有实例化 但是我已经对currentRecordFile进行了实例化
这是问题相关代码
iv_record.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
File dir = getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS);
//File dir = new File("/sdcard/myRecord/");//在sd下创建文件夹myimage;Environment.getExternalStorageDirectory()得到SD卡路径文件
if (!dir.exists()) { //exists()判断文件是否存在,不存在则创建文件
dir.mkdirs();
}
SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd_HHmmss");//设置日期格式在android中,创建文件时,文件名中不能包含“:”冒号
String filename = df.format(new Date());
currentRecordFile = new File(dir, filename + ".amr");
Log.e("kk", "onClick: " + currentRecordFile.getAbsolutePath() );
if (!currentRecordFile.exists()) {
try {
currentRecordFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
if (Build.VERSION.SDK_INT >= 24){
uri1 = FileProvider.getUriForFile(MainActivity.this,"com.example.net.fileprovider", currentRecordFile);
}else {
uri1 = Uri.fromFile(currentRecordFile);
}
Intent intent = new Intent();
intent.setAction(MediaStore.Audio.Media.RECORD_SOUND_ACTION);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri1);
startActivityForResult(intent, RECORDER_SOUND);
}
});
case RECORDER_SOUND:
//Toast.makeText(MainActivity.this,"录音文件为" + currentRecordFile.getAbsolutePath() ,Toast.LENGTH_LONG).show();
progressDialog.show();
Model.getInstance().getGlobalThreadPool().execute(new Runnable() {
@Override
public void run() {
MediaType MEDIA_TYPE_RECORD = okhttp3.MediaType.parse("application/octet-stream");
OkHttpClient client = new OkHttpClient();
client = new OkHttpClient.Builder()
.connectTimeout(300, TimeUnit.SECONDS)
.readTimeout(300, TimeUnit.SECONDS)
.build();
MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM);
builder.addFormDataPart("username", userName);
Log.e("kk", "run: " + currentRecordFile);
File file = new File(currentRecordFile.getAbsolutePath());
builder.addFormDataPart("record", file.getName(), RequestBody.create(MEDIA_TYPE_RECORD, file));
MultipartBody requestBody = builder.build();
//构建请求
Request request = new okhttp3.Request.Builder()
.url(Const.UPLOAD_URL)//地址
.post(requestBody)//添加请求体
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
runOnUiThread(new Runnable() {
@Override
public void run() {
progressDialog.dismiss();
Toast.makeText(MainActivity.this, "上传失败" + e.toString(), Toast.LENGTH_LONG).show();
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String finishInfo = response.body().string();
if (!TextUtils.isEmpty(finishInfo)) {
if (finishInfo.contains("finish")) {
runOnUiThread(new Runnable() {
@Override
public void run() {
progressDialog.dismiss();
Toast.makeText(MainActivity.this, "上传成功", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MainActivity.this, MainActivity.class);
startActivity(intent);
}
});
}
}
}
});
}
});
没那么多人有空看你代码逻辑,
扔报错