我在处理错误SocketException: Connection failed (OS Error: Network is unreachable, errno = 101) address = 192.168.43.159, port = 80
时遇到问题。
我已经做了什么:
设置Android权限上网。
我的参考Making Network http error SocketException: Failed host lookup
<uses-permission android:name="android.permission.INTERNET"/>
使用try catch
的Make函数来处理此错误
API函数
Future loginMahasiswa(body) async {
try {
var apiRespon = await http.post('$baseURL/mahasiswa/login',
body: body, headers: CrudComponent.headers);
int statusCode = apiRespon.statusCode;
if (statusCode == 200) {
final apiResponJson = json.decode(apiRespon.body);
print('Success Load Data Json ($apiResponJson)');
return apiResponJson;
} else {
final apiResponJson = json.decode(apiRespon.body);
print('fail Load Data Json $apiResponJson');
return apiResponJson;
}
} catch (e) {
print(e);
return null;
}
}
按钮功能
void _loginMahasiswa() async {
SharedPreferences preferences = await SharedPreferences.getInstance();
try {
final body = {"email": _txtEmail.text, "password": _txtPassword.text};
var loginMahasiswa = await api.loginMahasiswa(body);
String message = loginMahasiswa['message'];
var dataUser = loginMahasiswa['data'];
// String idUser = dataUser[0]['id_user'] ?? "null";
if (loginMahasiswa['status'] == true) {
setState(() {
preferences.setString('token', dataUser[0]['username']);
Navigator.of(context).pushAndRemoveUntil(
PageTransition(
type: PageTransitionType.rightToLeftWithFade,
child: HomePage()),
(Route<dynamic> route) => false);
});
} else {
print(message);
_showSnackBar(context, message, Colors.red);
}
} on SocketException catch (_) {
//throw ("No connection Internet");
_showSnackBar(context, 'no connection', Colors.orange);
}
}
但是如果我单击按钮,我的Snackbar
不会显示错误no connection
。
我使用真实的设备运行我的应用程序,我故意关闭热点来测试我的应用程序没有连接到服务器。
2条答案
按热度按时间taor4pac1#
1.确保你是在线的,你是连接到互联网是否是移动的或模拟器
1.确保您已在应用的
android/app/src/main/AndroidManifest.xml
中授予Internet权限pcww981p2#
适用于Android设备
第一步:
而不是使用localhost或127.0.0.1使用10.0.2.2
第二步:
将下面的标签添加到AndroidMainfest.xml中。
找到下面的图像参考。