Как загрузить файл PDF на сервер Parse? - PullRequest
0 голосов
/ 01 октября 2019

Мне нужна помощь при загрузке PDF-файла на сервер синтаксического анализа с использованием JAVA в Android Studio.

Я попытался использовать следующий код:

private ParseObject uploadPDFToParse(File PDFFile, ParseObject po, String columnName){

    if(PDFFile != null){
        Log.d("EB", "PDFFile is not NULL: " + PDFFile.toString());
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        BufferedInputStream in = null;
        try {
            in = new BufferedInputStream(new FileInputStream(PDFFile));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        int read;
        byte[] buff = new byte[1024];
        try {
            while ((read = in.read(buff)) > 0)
            {
                out.write(buff, 0, read);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            out.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
        byte[] pdfBytes = out.toByteArray();

        // Create the ParseFile
        ParseFile file = new ParseFile(PDFFile.getName() , pdfBytes);
        po.put(columnName, file);

        // Upload the file into Parse Cloud
        file.saveInBackground();
        po.saveInBackground();
    }
    return po;
}

Я получаю эту ошибку:

E / AndroidRuntime: ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основной Процесс: com.jackady.notebytebylev3l, PID: 31048 java.lang.RuntimeException: ошибка доставки результата ResultInfo {who = null, request = 0, result = -1, data =Намерение {dat = content: //com.mi.android.globalFileexplorer.myprovider/external_files/Download/CourseRegistrationReport (1) .pdf flg = 0x1}} к деятельности {com.jackady.notebytebylev3l / com.jackady.notebytebylev3l: java.lang.NullPointerException: попытка вызвать виртуальный метод 'int java.io.BufferedInputStream.read (byte [])' для ссылки на пустой объект в android.app.ActivityThread.deliverResults (ActivityThread.java:4419) на android. app.ActivityThread.handleSendResult (ActivityThread.java:4461) в android.app.servertransaction.ActivityResultItem.execute (ActivityResultItem.java:49) в android.app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.java:108) в android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:68) в android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1831) в android.os. Handler.dispatchMessage (Handler.java:106) на android.os.Looper.loop (Looper.java:201) на android.app.ActivityThread.main (ActivityThread.java:6806) на java.lang.reflect.Method.invoke(Собственный метод) в com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit.java:547) в com.android.internal.os.ZygoteInit.main (ZygoteInit.java:873). Причина: java.lang.NullPointerException: Попытка вызвать виртуальный метод 'int java.io.BufferedInputStream.read (byte [])' для ссылки на пустой объект в com.jackady.notebytebylev3l.uploadPDF.uploadPDFToParse (uploadPDF.java:43) в com.jackady. notebytebylev3l.uploadPDF.onActivityResult (uploadPDF.java:140) в android.app.Activity.dispatchActivityResult (Activity.java:7590) в android.app.ActivityThread.deliverResults (ActivityThread.java:4412) в android.app.ActivityThread.handleSendResult (ActivityThread.java:4461) в android.app.servertransaction.ActivityResultItem.execute (ActivityResultItem.java:49) в android.app.servertransaction.TransactionExalls(TransactionExecutor.java:108) в android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:68) в android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1831) в android.os.Handler.dispatchMessage (Handler.java:106) в android.os.Looper.loop (Looper.java:201) в android.app.ActivityThread.main (ActivityThread.java:6806) в java.lang.reflect.Method.invoke (собственный метод)в com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit.java:547) в com.android.internal.os.ZygoteInit.main (ZygoteInit.java:873)

1 Ответ

0 голосов
/ 04 октября 2019

Попробуйте следующий код и дайте мне знать:

private ParseObject uploadPDFToParse(File PDFFile, ParseObject po, String columnName){

    if(PDFFile != null){
        Log.d("EB", "PDFFile is not NULL: " + PDFFile.toString());
        int size = (int) file.length();
        byte[] pdfBytes = new byte[size];

        try {
            BufferedInputStream buf = new BufferedInputStream(new FileInputStream(file));
            buf.read(pdfBytes, 0, pdfBytes.length);
            buf.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // Create the ParseFile
        ParseFile file = new ParseFile(PDFFile.getName() , pdfBytes);
        po.put(columnName, file);

        // Upload the file into Parse Cloud
        file.save();
        po.saveInBackground();
    }
    return po;
}
...