Ответ Android Retrofit возвращает внутреннюю ошибку сервера при загрузке файлов с сервера - PullRequest
1 голос
/ 25 мая 2019

Я работаю над проектом Android, приложению необходимо загрузить файл PDF, созданный из Интернета. Я использую Laravel и DOMPdf для создания файла PDF (зависимость от laravel). Я хочу загрузить файл на Android с модификацией, но когда я регистрирую ответ, он говорит:

onResponse: Ответ {protocol = http / 1.0, code = 500, message = Internal Server Ошибка, URL = http://10.0.2.2/warehouse-api/public/api/get-stock-out}

Когда я пробую это на chrome / почтальоне, он работает, и он загрузит сгенерированный файл PDF.

Я хочу знать, что здесь происходит.

Вот мой код:

ReportFragment.java

@Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        v = inflater.inflate(R.layout.fragment_stock_out_report, container, false);
        generateBtn = v.findViewById(R.id.btn_generate_stockout);
        service = RetrofitBuilder.getRetrofit().create(ReportService.class);
        generateBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
             Log.d(TAG, "onClick: Clicked");
              if(checkPermission()){
                    call = service.getStockOutReport();
                    call.enqueue(new Callback<ResponseBody>() {
                        @Override
                        public void onResponse(Call<ResponseBody> call, final Response<ResponseBody> response) {
                            Log.w(TAG, "onResponse: " + response);
                            final String filename = System.currentTimeMillis() /1000L+".pdf";
                            if(response.isSuccessful()){
                                new AsyncTask<Void, Void, Void>() {
                                    @Override
                                    protected Void doInBackground(Void... voids) {
                                        try{
                                            File path = Environment.getExternalStorageDirectory();
                                            File file = new File(path+File.separator+"stock-out"+File.separator,filename);
                                            file.getParentFile().mkdirs();
                                            FileOutputStream fileOutputStream = new FileOutputStream(file);
                                            IOUtils.write(response.body().bytes(), fileOutputStream);
                                        }catch (IOException e){
                                            Log.e(TAG, "Erorr While Writing Files");
                                            Log.e(TAG, e.toString());
                                        }
                                        return null;
                                    }
                                    @Override
                                    protected void onPostExecute(Void aVoid) {
                                        super.onPostExecute(aVoid);
                                        Toast.makeText(getActivity(), "Download Success", Toast.LENGTH_SHORT).show();
                                    }
                                }.execute();
                                Log.d(TAG, "onResponse2: " +response);
                            }else{
                                Toast.makeText(getActivity(), "Download Fail", Toast.LENGTH_SHORT).show();
                                Log.d(TAG, "onResponse3: " +response);
                            }
                        }
                        @Override
                        public void onFailure(Call<ResponseBody> call, Throwable t) {
                            Log.d(TAG, "onFailure: " + t.getMessage());
                            Toast.makeText(getActivity(), t.getMessage(), Toast.LENGTH_LONG).show();
                        }
                    });
                }else{
                    requestPermission();
                }
            }
        });
        return v;
    }

ReportService.java

@GET("get-stock-out")
@Streaming
Call<ResponseBody> getStockOutReport();

ReportController.php

public function getWeeklyStockOutReport()
{
       $stockOuts = StockOut::whereBetween('created_at', [Carbon::now()->startOfWeek(), Carbon::now()->endOfWeek()])->get();
        $pdf = PDF::loadView('stock-out', compact('stockOuts'));
        return $pdf->download(Carbon::now().'-'.'stock-out.pdf');
 }

Я ожидаю, что приложение для Android сможет загрузить файл .pdf

Thankyou!

1 Ответ

0 голосов
/ 25 мая 2019

Я сталкивался с проблемой довольно много раз. Если он доступен почтальоном, то проверьте запрошенный URL-адрес приложения при помощи Log или debug и снова запустите URL-адрес в почтальоне, если он не работает, затем проверьте параметры запрошенного URL или проверьте заголовок авторизации. Я уверен, что это поможет вам. Настоятельно рекомендуется использовать ваш отладчик, это поможет вам проверить, передаете ли вы какие-либо неправильные значения, посмотрите это видео, чтобы узнать отладчик https://www.youtube.com/watch?v=nBaL78HC0ls

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...