Как прочитать путь к файлу из внутренней памяти в Android и отправить его на сервер в качестве параметра с помощью ksoap2

Мне нужно отправить 12 параметров, включая один pdf-файл, чтобы создать зарегистрированный pdf-файл.

проблема в том, что во время отладки я получаю /data/filename.pdf, но сервер не читает путь к файлу.

и в телефоне путь отображается как /sdcard/filename.pdf

Информация о телефоне: зефир (API 23+)

какие изменения мне нужно сделать, чтобы прочитать его путь к файлу?

я пытался использовать

1) Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)

2)

  File readpdfFile = new File(Environment.getDataDirectory() + File.separator +
                            "/NewPDF_.pdf");

                        propOne.setName("arg0");
                        propOne.setValue(readpdfFile);
                        request.addProperty(propOne);
// 11 other parameters similar as above
//soap method
 SoapSerializationEnvelope envelope2 = new SoapSerializationEnvelope(SoapEnvelope.VER11);
                new MarshalBase64().register(envelope2);
                envelope2.setOutputSoapObject(request);

                envelope2.implicitTypes = false;
                androidTransport = new HttpTransportSE(WSDL_URL);
                androidTransport.debug = true;
                androidTransport.call(SOAP_ACTION, envelope2);

                SoapObject response2 = (SoapObject) envelope2.bodyIn;
                String requestDump = androidTransport.requestDump;
                String responseDump = androidTransport.responseDump;

                Log.i("", "Request: " + requestDump);
                Log.i("", "Response: " + responseDump);

                outRes = response2.toString();

                pdfResult = outRes;
                Log.d("pdfResult  ", pdfResult);

            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            return pdfResult;
        }

person benjamin    schedule 25.10.2016    source источник
comment
Используйте Environment.getExternalStorageDirectory().   -  person greenapps    schedule 25.10.2016
comment
я использовал его ... но все же он не может прочитать его сервером, и ответ равен нулю. плюс обновил код для большего упрощения   -  person benjamin    schedule 25.10.2016
comment
Хорошо, вы проверили, существует ли файл, прежде чем отправлять его путь на сервер? File readpdfFile. Используйте if (!readpdfFile.exists()){Toast to tell that the user; return;}.   -  person greenapps    schedule 25.10.2016
comment
Пути на вашем устройстве Android не могут быть прочитаны серверами в Интернете. Так что совершенно неясно, чего вы пытаетесь достичь. Должен ли клиент ksoap читать путь вместо того, чтобы отправлять его содержимое на сервер?   -  person greenapps    schedule 25.10.2016
comment
если пути на устройстве не могут быть прочитаны серверами в Интернете, что мне делать, чтобы прочитать файл с устройства и отправить его на сервер в качестве значения параметра?   -  person benjamin    schedule 25.10.2016
comment
Я думаю, вы должны поместить полное содержимое файла в свой мыльный объект. Ваш клиент ksoap должен отправить файл, встроенный в запрос мыла. Но посмотрите на API этого мыльного сервера. Он расскажет вам, как это сделать.   -  person greenapps    schedule 25.10.2016
comment
я думаю, что мне нужно использовать метод fileinputstream, чтобы прочитать путь к файлу, преобразовать его в формат массива байтов, а затем сохранить его в строке и отправить в виде строки на сервер. правильно?   -  person benjamin    schedule 25.10.2016
comment
Вполне возможно. Я не знаю. Посмотрите на API. В строке? Я думаю, вы имеете в виду строку в кодировке base64?   -  person greenapps    schedule 25.10.2016
comment
convert it into byte array format. Вам не нужно конвертировать байты файла. Я бы сказал «поместите байты файла в массив байтов».   -  person greenapps    schedule 25.10.2016
comment
да API нужно изменить, чтобы я мог отправлять формат base64toString. но можете ли вы показать мне фрагмент кода, где мы можем взять путь к файлу и преобразовать его в строку? Кстати, огромное спасибо.   -  person benjamin    schedule 25.10.2016
comment
stackoverflow.com/questions/6058003/   -  person greenapps    schedule 25.10.2016
comment
спасибо, но я использовал этот код - File readpdfFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath()+ /NewPDF_.pdf); Строка encodedBase64 = ноль; FileInputStream fileInputStreamReader = new FileInputStream (readpdfFile); byte[] bytes = новый байт[(int)readpdfFile.length()]; fileInputStreamReader.read (байты); encodedBase64 = new String(Base64.encodeToString(); это правильно?   -  person benjamin    schedule 26.10.2016
comment
Вы ничего не делаете с bytes. Пожалуйста, поместите код в дополнительный блок в своем посте. Это довольно нечитаемо в комментарии.   -  person greenapps    schedule 26.10.2016
comment
И если это ваша первая кодировка base64, вы должны потренироваться с прямым декодированием закодированной строки, чтобы увидеть, получите ли вы ту же сумму и те же байты обратно.   -  person greenapps    schedule 26.10.2016
comment
да он у меня первый. понятно. благодаря.   -  person benjamin    schedule 26.10.2016