DioError [DioErrorType.RESPONSE]:Http 状态错误 [500],为什么?

问题描述 投票:0回答:4

我是flutter新手,我在项目中使用Dio来实现会员注册功能..但是每次我执行注册过程时,调试控制台都会给我这个错误

I/flutter (13428): Instance of 'FormData'
I/flutter (13428): DioError [DioErrorType.RESPONSE]: Http status error [500]

但是,当我尝试注册POSTMAN时,却成功了。所以我不确定问题出在哪里..这是我的代码,你们能帮我吗?我已经坚持这个问题好几个星期了..

final String url = "https://api.censored.org/api/members/register";

Dio.FormData formData = Dio.FormData.fromMap({
  "nama_lengkap": name,
  "tempat_lahir": tempatlahir,
  "tanggal_lahir": selectedDate.toString(),
  "email": email,
  "password": password,
  "username": username,
  "nomor_ktp": noKTP,
  "alamat_ktp": alamatktpmember,
  "alamat_domisili": alamatmember,
  "pekerjaan": pekerjaanmember,
  "alamat_pekerjaan": alamatperusahaanmember,
  "no_whatsapp": noWAmember,
  "no_hp": noteleponmember,
  "nama_pemilik_rekening": namarekmember,
  "nomor_rekening": norekmember,
  "bank_id": _valBank,
  "aggrement": _eulargprogramming,

  //Foto
  "foto_ktp": await Dio.MultipartFile.fromFile(_fotoKtp.path),
  "selfie_dengan_ktp": await Dio.MultipartFile.fromFile(_fotoSelfie.path),
  "foto_kk": await Dio.MultipartFile.fromFile(_fotoKK.path),
  "foto_pengenal_lainnya":
      await Dio.MultipartFile.fromFile(_fotoKartu.path),
  "foto_buku_rekening":
      await Dio.MultipartFile.fromFile(_fotoRekening.path),
  "foto_profil": await Dio.MultipartFile.fromFile(_fotoSelfie.path),

  //Array
  "penjamin": {
    "stakeholder_id": _subrgProgramming1,
    "nama": penjaminNama,
    "nomor_ktp": penjaminNoktp,
    "alamat_ktp": penjaminAlamat,
    "alamat_domisili": penjaminDomisili,
    "no_hp": notelppenjamin,
  },
  "sosial_media": [
    {
      "sosial_media_id": _sosmedrgprogramming,
      "nama": sosialmediamember,
      "screenshot": await Dio.MultipartFile.fromFile(_fotoSosmed.path),
    }
  ],
  "saudara_kerabat": [
    {
      "stakeholder_id": 4,
      "nama": namasaudara,
      "no_hp": notelpsaudara,
    },
    {
      "stakeholder_id": 5,
      "nama": namakerabat1,
      "no_hp": notelpkerabat1,
    },
    {
      "stakeholder_id": 5,
      "nama": namakerabat2,
      "no_hp": notelpkerabat2,
    },
    {
      "stakeholder_id": 5,
      "nama": namakerabat3,
      "no_hp": notelpkerabat3,
    }
  ],
});
print(formData);
var res;
try {
  Dio.Dio doo = Dio.Dio();
  doo.options.headers['Accept'] = 'application/json';
  doo.options.contentType = 'application/json';
  doo.options.followRedirects = false;
  Dio.Response response = await doo.post(url, data: formData);

  if (response.statusCode == 200) {
    print(response.data);
    res = response;
    final data = jsonDecode(res.body);
    print(res);

    int regvalue = data['value'];
    String message = data['message'];
    if (regvalue == 1) {
      setState(() {
        Navigator.pop(context);
      });
      print(message);
      registerToast(message);
    } else if (regvalue == 2) {
      print(message);
      registerToast(message);
    } else {
      print(message);
      registerToast(message);
    }
  }
} on Dio.DioError catch (e) {
  if (e.response.statusCode == 422) {
    print(e.response.data);
  }
} on Dio.DioError catch (e) {
  if (e.response.statusCode == 500) {
    print(e.response.data);
  }
}


}

  registerToast(String toast) {
    return Fluttertoast.showToast(
        msg: toast,
        toastLength: Toast.LENGTH_SHORT,
        gravity: ToastGravity.BOTTOM,
        timeInSecForIos: 1,
        backgroundColor: Colors.red,
        textColor: Colors.white);
  }
json flutter dart http-error dio
4个回答
12
投票

这意味着你的服务器响应了

InternalServerError
但 dio 认为这是一个异常,要解决此问题,可以使用 try 和 catch 块或将其传递给你的 dio 实例

 final res = await dio.delete(
          url,
          data: postData,
          options: Options(

            followRedirects: false,
            // will not throw errors
            validateStatus: (status) => true,
            headers: headers,
          ),
        );



0
投票

当我尝试使用 Dio 发送图像时,我遇到了同样的问题。但只有当我在Mac中使用iPhone模拟器时才会出现问题,在Android模拟器中一切正常,所以我尝试在真正的iPhone(没有模拟器)中启动调试并编译我的应用程序,并且我没有遇到此错误。 也许你也有同样的问题,希望对你有帮助。


0
投票

我遇到了同样的错误。 我的 APi 在 Postmen 上工作正常,但在 DioError 中出现内部服务器错误 [500]。 我只是在 URL 末尾添加“/”。 它解决了问题。


-1
投票

经过几个小时的奋斗,我找到了通过dio packge上传多个图像的方法,这是我的代码,你可以相应地使用它

import 'dart:io';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:rent_house/screens/Admin/View_Property/AdminViwe.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:http_parser/http_parser.dart';

var token;

Dio dio = Dio();
var apiURL = 'https://denga.r3therapeutic.com/public/api/addpost';
FormData formData = FormData();
Future<String> adminAddproperty({
  title,
  address,
  price,
  area,
  bedrooms,
  bathrooms,
  parking,
  other,
  description,
  List<File>? imageFileList,
  context,
}) async {
  List uploadList = [];
  for (var imageFiles in imageFileList!) {
    uploadList.add(await MultipartFile.fromFile(imageFiles.path,
        filename: imageFiles.path.split('/').last,
        contentType: MediaType('image', 'jpg')));
  }
  FormData formData = FormData.fromMap({
    'title': title,
    'address': address,
    'price': price,
    'area': area,
    'bedrooms': bedrooms,
    'bathrooms': bathrooms,
    'parking': parking,
    'others': "huhuhuhuh",
    'description': description,
    'images[]': uploadList,
  });
  SharedPreferences pref = await SharedPreferences.getInstance();
  token = pref.getString('token');
  print('AdminApisToken =$token');
  print('_images');

  Response responce;

    responce = await dio.post(
        apiURL ,
        data: formData,
        options: Options(headers: {
          HttpHeaders.authorizationHeader: "Bearer $token",
        }));
try{
  if(responce.data=="false"){
 Navigator.push(
      context,
      MaterialPageRoute(builder: (context) => AdminProperty()),
    );
    Fluttertoast.showToast(
        msg: "Data Upload Successfull", backgroundColor: Colors.cyan);
  }
else{
      Fluttertoast.showToast(
        msg: "Wrong Input Data Type", backgroundColor: Colors.cyan);
}
    return '';
  } catch (e) {
    Fluttertoast.showToast(
        msg: "Internet Connection Error", backgroundColor: Colors.cyan);
    return '';
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.