When I test my php files with postman, it works but I can’t run it with retrofit.
I am trying to write an API for the first time and both methods return an error on the resource status.
get: https://www.codeocean.net/codeocean/getdata.php
post: https://www.codeocean.net/codeocean/adddata.php (in the request body:
{
"userName": "uzaktan ",
"userSurname": "uzaktan ",
"userBalance": 111,
"userEmail": "uzaktan ",
"userPassword": "123123"
}
)
mixinuserfeature.dart
Future<Resource<List<UserModel>>> getData() async {
try {
final result = await client.getData();
debugPrint(" result: $result");
return Resource.success(await client.getData());
} catch (e) {
return Resource.error('Failed to fetch datas: $e');
}
}
Future<Resource<UserModel>> createUser(
String userName, String userSurname, int userBalance, String userEmail, String userPassword) async {
try {
return Resource.success(await client.createUser({
"userName": userName,
"userSurname": userSurname,
"userBalance": 111,
"userEmail": userEmail,
"userPassword": userPassword,
}));
} catch (e) {
return Resource.error('Failed to create user: $e');
}
}
generator.dart
import 'package:dio/dio.dart' hide Headers;
import 'package:retrofit/retrofit.dart';
import '../models/user_model.dart';
import 'constants.dart';
part 'generator.g.dart';
@RestApi(baseUrl: ApiConstants.BASE_URL)
abstract class RestClient {
factory RestClient(Dio dio, {String? baseUrl}) = _RestClient;
@GET('/codeocean/getdata.php')
Future<List<UserModel>> getData();
@POST('/codeocean/adddata.php')
@Headers(<String, dynamic>{
"Content-Type": "application/json",
})
Future<UserModel> createUser(@Body() Map<String, dynamic> user);
}
adddata.php
<?php
include 'conn.php';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$json_data = file_get_contents('php://input');
$data = json_decode($json_data, true);
$userName = $data['userName'];
$userSurname = $data['userSurname'];
$userBalance = $data['userBalance'];
$userEmail = $data['userEmail'];
$userPassword = $data['userPassword'];
$sql = "INSERT INTO users (userName, userSurname, userBalance, userEmail, userPassword)
VALUES ('$userName', '$userSurname', '$userBalance', '$userEmail', '$userPassword')";
if ($conn->query($sql) === TRUE) {
$lastInsertId = $conn->insert_id;
$response = array(
"userId" => $lastInsertId,
"userName" => $userName,
"userSurname" => $userSurname,
"userBalance" => $userBalance,
"userEmail" => $userEmail,
"userPassword" => $userPassword
);
echo json_encode($response);
} else {
$response = array(
"status" => "error",
"message" => "error while creating user : " . $conn->error
);
echo json_encode($response);
}
$conn->close();
} else {
$response = array(
"status" => "error",
"message" => "method error"
);
echo json_encode($response);
}
getdata.php
<?php
include 'conn.php';
error_reporting(E_ALL);
ini_set('display_errors', 1);
$sql = "SELECT * FROM users";
$result = $conn->query($sql);
if (!$result) {
die("Error: " . $conn->error);
}
$res = array();
while ($row = $result->fetch_assoc()) {
$res[] = $row;
}
echo json_encode($res);
?>
user_model.dart
import 'package:json_annotation/json_annotation.dart';
part 'user_model.g.dart';
@JsonSerializable()
class UserModel {
String? userId;
String? userName;
String? userSurname;
int? userBalance;
String? userEmail;
String? userPassword;
UserModel({this.userId, this.userName, this.userSurname, this.userBalance, this.userEmail, this.userPassword});
factory UserModel.fromJson(Map<String, dynamic> json) => _$UserModelFromJson(json);
Map<String, dynamic> toJson() => _$UserModelToJson(this);
}
I am trying to connect my flutter project to remote mysql database but I am getting error.