从服务器下载文件时,Android改造响应返回内部服务器错误

时间:2019-05-25 17:01:51

标签: java php android laravel

我正在处理一个Android项目,该应用程序需要下载从网络生成的PDF文件。我正在使用Laravel和DOMPdf生成pdf文件(laravel依赖项)。我想通过改造将文件下载到android,但是当我记录响应时说:

  

onResponse:响应{协议= http / 1.0,代码= 500,消息=内部服务器   错误,网址= {http://10.0.2.2/warehouse-api/public/api/get-stock-out}

当我在chrome / postman上尝试时,它可以工作,它将下载生成的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文件

谢谢!

1 个答案:

答案 0 :(得分:0)

我已经多次面对这个问题。如果邮递员可以使用,请通过日志或调试检查应用程序旁边的请求URL,如果邮递员不起作用,请在邮递员中再次运行该URL,然后检查请求的URL参数或检查授权标头。确保可以为您提供帮助。强烈建议您使用调试器,这将帮助您检查是否传递了错误的值,请观看此视频以了解调试器https://www.youtube.com/watch?v=nBaL78HC0ls