Загрузите файл с именами, которые содержат символы utf-8

У меня проблемы с использованием метода загрузки в некоторых файлах (с символом UTF-8). Когда я выберу эти файлы, я столкнусь со следующей ошибкой:

FATAL EXCEPTION: Thread-34 Process: com.articlerdotir.articler, PID: 27672 java.lang.NullPointerException: Attempt to invoke interface method 'int java.lang.CharSequence.length()' on a null object reference at java.util.regex.Matcher.reset(Matcher.java:995) at java.util.regex.Matcher.(Matcher.java:174) at java.util.regex.Pattern.matcher(Pattern.java:1006) at okhttp3.MediaType.parse(MediaType.java:52) at com.articlerdotir.articler.activity.UploaderActictivity.UploadFile(UploaderActictivity.java:186) at com.articlerdotir.articler.activity.UploaderActictivity$2$1.run(UploaderActictivity.java:154) at java.lang.Thread.run(Thread.java:762)

Когда я выбираю эти файлы и загружаю их, я сталкиваюсь со следующим. Например, если имя файла: DellaAli.doc или 0123.doc, проблема не возникает, но когда имя файла دلهعلی. Doc или ۰۱۲۳.doc, этот код не работает должным образом. Как исправить эту проблему? Спасибо

это мой код для активности загрузчика:

public class UploaderActictivity extends AppCompatActivity  {
private Button button_browse,button_upload;
JustifiedTextView js,messageText;
ImageView imNotify;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_uploader);

    js=findViewById(R.id.textDes);
    messageText =findViewById(R.id.messageText);
    imNotify =findViewById(R.id.notify);
    button_browse = (Button) findViewById(R.id.browse);
    button_upload =(Button) findViewById(R.id.upload);


    js.setText( getResources().getString(des) + "\n" +
            getResources().getString(des1)+ "\n" +
            getResources().getString(des2)+ "\n" +
            getResources().getString(des3));

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
        if(ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
            requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},100);
            return;
        }
    }

    browse_btn();
    upload_btn();
}


private void browse_btn() {

    button_browse.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            new MaterialFilePicker()
                    .withActivity(UploaderActictivity.this)
                    .withRequestCode(10)
                    .start();

        }
    });
}



@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if(requestCode == 100 && (grantResults[0] == PackageManager.PERMISSION_GRANTED)){
        browse_btn();
    }else {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},100);
        }
    }
}

ProgressDialog progress;

@Override
protected void onActivityResult(int requestCode, int resultCode, final Intent data) {
    if(requestCode == 10 && resultCode == RESULT_OK){
        String filePath = data.getStringExtra(FilePickerActivity.RESULT_FILE_PATH);
            messageText.setText(filePath);
    }
}


private void upload_btn() {
    button_upload.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            progress = new ProgressDialog(UploaderActictivity.this);
            progress.setTitle("Uploading");
            progress.setMessage("Please wait...");
            progress.setCancelable(false);
            progress.show();


            Thread t = new Thread(new Runnable() {
                @Override
                public void run() {

                    File f = new File(messageText.getText().toString());
                    if(f.isFile()) {
                        UploadFile(f);

                    }else {
                        messageText.setText(getResources().getString(uploadFile));
                    }
                }
            });

            t.start();


        }
    });
}

private String getMimeType(String path) {

    String extension = MimeTypeMap.getFileExtensionFromUrl(path);

    return MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
}

public void UploadFile(final File f){


    String content_type = getMimeType(f.getPath());
    String file_path = f.getAbsolutePath();

    SharedPreferences prefs =
            PreferenceManager.getDefaultSharedPreferences(UploaderActictivity.this);
    final int UserID = prefs.getInt("UserID", 0);

    OkHttpClient client = new OkHttpClient();
    RequestBody file_body = RequestBody.create(MediaType.parse(content_type), f);

    RequestBody request_body = new MultipartBody.Builder()
            .setType(MultipartBody.FORM)
            .addFormDataPart("type", content_type)
            .addFormDataPart("uploaded_file",
                    UserID + "_" + file_path.substring(file_path.lastIndexOf("/") + 1), file_body)
            .build();

    Request request = new Request.Builder()
            .url(AppConfig.upLoadServerUri + "/upload")
            .post(request_body)
            .build();

    try {
        Response response = client.newCall(request).execute();

        if (!response.isSuccessful()) {
            throw new IOException("Error : " + response);

        }

        progress.dismiss();

        runOnUiThread(new Runnable() {
            @Override
            public void run() {

                messageText.setText(getResources().getString(DescriptionForUpload));

            }
        });

    } catch (IOException e) {
        progress.dismiss();
        e.printStackTrace();
        runOnUiThread(new Runnable() {
            @Override
            public void run() {

                messageText.setText(getResources().getString(uploadAgain));

            }
        });
    }


}


@Override
protected void onDestroy()
{
    super.onDestroy();
    if (progress!=null && progress.isShowing()){
        progress.dismiss();
    }
    }



}
1
0
66
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

проблема в том, что ваш getMimeType возвращает null просто измените ширину функции getMimeType на это

private fun getMimeType(path: String): String? {
        val extension = MimeTypeMap.getFileExtensionFromUrl(path)
        return if(extension.isNullOrEmpty()){
            val i = path.lastIndexOf('.')
            if (i > 0) {
                path.substring(i + 1)
            }else{
                MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension)
            }
        }else{
            MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension)
        }
    }

этот код находится в котлине

Другие вопросы по теме