Android can';无法使用OkHttp3在文件管理器中选择文件

Android can';无法使用OkHttp3在文件管理器中选择文件,android,web-services,file,upload,server,Android,Web Services,File,Upload,Server,我试图创建一个应用程序,我必须上传任何文件不超过16-20 mb。我正在使用OkHttpClient3,但我的主要问题是它将使用简单名称的文件,如a.mp4、b.jpg等。但它不能选择像hello world 12.mp4这样的文件 RequestBody file\u body=RequestBody.create(MediaType.parse(content\u type),f)。 我的密码是 public void enable_button(){ choosefile

我试图创建一个应用程序,我必须上传任何文件不超过16-20 mb。我正在使用OkHttpClient3,但我的主要问题是它将使用简单名称的文件,如a.mp4、b.jpg等。但它不能选择像
hello world 12.mp4这样的文件
RequestBody file\u body=RequestBody.create(MediaType.parse(content\u type),f)。
我的密码是

public  void enable_button(){
        choosefile.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                new MaterialFilePicker()
                        .withActivity(ShowStudent.this)
                        .withRequestCode(10)
                        .start();
            }
        });
    }
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if(requestCode == 100 && (grantResults[0] == PackageManager.PERMISSION_GRANTED)){
            enable_button();
        }else {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},100);
            }
        }
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, final Intent data) {
        if(requestCode == 10 && resultCode == RESULT_OK){
            progress = new ProgressDialog(ShowStudent.this);
            progress.setTitle("Uploading");
            progress.setMessage("Please wait...");
            progress.show();

            Thread t = new Thread(new Runnable() {
                @Override
                public void run() {
                    File f  = new File(data.getStringExtra(FilePickerActivity.RESULT_FILE_PATH));
                    String content_type  = getMimeType(f.getPath());
                    String file_path = f.getAbsolutePath();
                    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",file_path.substring(file_path.lastIndexOf("/")+1), file_body)
                            .build();
                    Request request = new Request.Builder()
                            .url("http://onsitesupport.info/diary/uploadproject.php")
                            .post(request_body)
                            .build();
                    try {
                        Response response = client.newCall(request).execute();
                        if(!response.isSuccessful()){
                            throw new IOException("Error : "+response);
                        }
                        progress.dismiss();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            });
            t.start();
        }
    }
    private String getMimeType(String path) {
        String extension = MimeTypeMap.getFileExtensionFromUrl(path);
        return MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
    }
我得到了这个例外

E/AndroidRuntime: FATAL EXCEPTION: Thread-3122
              Process: com.kliff.studentteacherportal, PID: 29436
              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:177)
                  at java.util.regex.Matcher.<init>(Matcher.java:90)
                  at java.util.regex.Pattern.matcher(Pattern.java:297)
                  at okhttp3.MediaType.parse(MediaType.java:51)
                  at com.kliff.studentteacherportal.ShowStudent$2.run(ShowStudent.java:100)
                  at java.lang.Thread.run(Thread.java:818)
E/WindowManager: android.view.WindowLeaked: Activity com.kliff.studentteacherportal.ShowStudent has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{26acab10 V.E..... R......D 0,0-684,322} that was originally added here
                 at android.view.ViewRootImpl.<init>(ViewRootImpl.java:458)
                 at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:278)
                 at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)
                 at android.app.Dialog.show(Dialog.java:311)
                 at com.kliff.studentteacherportal.ShowStudent.onActivityResult(ShowStudent.java:91)
                 at android.app.Activity.dispatchActivityResult(Activity.java:6294)
                 at android.app.ActivityThread.deliverResults(ActivityThread.java:3873)
                 at android.app.ActivityThread.handleSendResult(ActivityThread.java:3920)
                 at android.app.ActivityThread.access$1300(ActivityThread.java:182)
                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1523)
                 at android.os.Handler.dispatchMessage(Handler.java:111)
                 at android.os.Looper.loop(Looper.java:194)
                 at android.app.ActivityThread.main(ActivityThread.java:5706)
                 at java.lang.reflect.Method.invoke(Native Method)
                 at java.lang.reflect.Method.invoke(Method.java:372)
                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1033)
                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:828)
W/MALI: glDrawArrays:714: [MALI] glDrawArrays takes more than 5ms here. Total elapse time(us): 5659
E/AndroidRuntime:致命异常:Thread-3122
流程:com.kliff.studentteacherportal,PID:29436
java.lang.NullPointerException:尝试对空对象引用调用接口方法“int java.lang.CharSequence.length()”
位于java.util.regex.Matcher.reset(Matcher.java:177)
位于java.util.regex.Matcher.(Matcher.java:90)
位于java.util.regex.Pattern.matcher(Pattern.java:297)
位于okhttp3.MediaType.parse(MediaType.java:51)
在com.kliff.studentteacherportal.showstustudent$2.run(showstustudent.java:100)
运行(Thread.java:818)
E/WindowManager:android.view.WindowLeaked:Activity com.kliff.studentteacherportal.showtudent泄漏了最初添加到此处的window com.android.internal.policy.impl.PhoneWindow$DecorView{26acab10 V.E..R..D 0,0-684322}
在android.view.ViewRootImpl。(ViewRootImpl.java:458)
在android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:278)
在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)
在android.app.Dialog.show上(Dialog.java:311)
在com.kliff.studentteacherportal.showtudent.onActivityResult(showtudent.java:91)上
位于android.app.Activity.dispatchActivityResult(Activity.java:6294)
位于android.app.ActivityThread.deliverResults(ActivityThread.java:3873)
位于android.app.ActivityThread.handleSendResult(ActivityThread.java:3920)
在android.app.ActivityThread.access$1300(ActivityThread.java:182)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1523)
位于android.os.Handler.dispatchMessage(Handler.java:111)
位于android.os.Looper.loop(Looper.java:194)
位于android.app.ActivityThread.main(ActivityThread.java:5706)
位于java.lang.reflect.Method.invoke(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:372)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:1033)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:828)
W/MALI:glDrawArrays:714:[马里]glDrawArrays在这里需要5毫秒以上的时间。总消逝时间(us):5659

好吧,我想,它不能选择带空格的文件,但我通过替换

String mimeType= URLConnection.guessContentTypeFromName(f.getName()); 
RequestBody file_body = RequestBody.create(MediaType.parse(mimeType),f);`

java.lang.NullPointerException:尝试对空对象引用调用接口方法“int java.lang.CharSequence.length()”
。所以您的变量是
null
。使用前检查。并找出为什么它是空的。根据您的日志,它位于在线
(showtudent.java:91)
。@greenapps一些文件已上载到服务器,但其他文件未上载。。。另一个问题是,若文件大小很大,那个么即使上传了文件,进度条也不会关闭。这个问题只会出现在我刚接触Android的大文件中。请帮助我你应该先解决空指针问题。我想知道你为什么连名字都不提。不要哭着求救。我已经给了你帮助,但你却忽视了。为什么?
它不能选择像hello world 12.mp4这样的文件。您的意思是它不能选择文件名中有空格的文件吗?那么请告诉我你是如何选择文件的。用什么?不清楚是谁在选择。@greenapps您是对的,它不能选择带空格的文件,但我通过替换'String mimeType=URLConnection.guessContentTypeFromName(f.getName());RequestBody file_body=RequestBody.create(MediaType.parse(mimeType),f);