我正在处理一个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文件。
我想知道这里发生了什么。
这是我的代码:
@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;
}
@GET("get-stock-out")
@Streaming
Call<ResponseBody> getStockOutReport();
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文件
谢谢!
答案 0 :(得分:0)
我已经多次面对这个问题。如果邮递员可以使用,请通过日志或调试检查应用程序旁边的请求URL,如果邮递员不起作用,请在邮递员中再次运行该URL,然后检查请求的URL参数或检查授权标头。确保可以为您提供帮助。强烈建议您使用调试器,这将帮助您检查是否传递了错误的值,请观看此视频以了解调试器https://www.youtube.com/watch?v=nBaL78HC0ls