Я столкнулся с проблемой, во-первых, я новичок в android, и у меня есть запрос Post, я отправляю объект в теле:
public class SingleContractRequest {
@SerializedName("userRole")
private String userRole;
@SerializedName("contratId")
private String contratId;
public SingleContractRequest(String userRole, String contractId) {
this.userRole = userRole;
this.contratId = contractId;
}
public String getUserRole() {
return userRole;
}
public void setUserRole(String userRole) {
this.userRole = userRole;
}
public String getContractId() {
return contratId;
}
public void setContractId(String contractId) {
this.contratId = contractId;
}
}
И это мой ContractApi вызываемый метод является вторым:
public interface ContractApi {
@GET("contrats.php")
Single<List<ContractModel>> getContractList();
@POST("contrat.php")
Single<ContractModel> getContract(@Body SingleContractRequest body);
}
А вот мой модуль:
@Module
public class ApiModule {
public static String BASE_URL = "http://192.168.1.104/newconceptsphp/";
@Provides
public ContractApi provideContractApi(){
Gson gson = new GsonBuilder()
.setLenient()
.create();
return new Retrofit.Builder().baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build()
.create(ContractApi.class);
}
@Provides
public ContractService provideContractService(){
return ContractService.getInstance();
}
}
И для вызова API у меня есть метод в моей службе:
public Single<ContractModel> getContract(SingleContractRequest request) {
return api.getContract(request);
}
Так что я мог бы сделать это одним единственным способом, но я создаю много слоев для лучшей архитектуры.
Ошибка, которую я получаю сейчас, и я не знаю, как ее решить:
com.google.gson.JsonSyntaxException: java .lang.IllegalStateException: ожидалось BEGIN_OBJECT, но было STRING в пути строки 1 столбца 1 $ в com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ Adapter. читать (ReflectiveTypeAdapterFactory. java: 224) по адресу retrofit2.converter.gson.GsonResponseBodyConverter.convert (GsonResponseBodyConverter. java: 37)
Это сценарий, который я использую:
<?php
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
header("Access-Control-Allow-Headers: Content-Type, Content-Range, Content-Disposition, Content-Description");
json_decode(file_get_contents("php://input"), true);
$dsn = "mysql:host=localhost;dbname=leranconcepts";
$user = "root";
$passwd = "";
$pdo = new PDO($dsn, $user, $passwd);
if (isset($_POST["userRole"])){
$userRole = $_POST["userRole"];
} else {
$userRole = null;
}
if (isset($_POST["contratId"])){
$contratId = $_POST["contratId"];
} else {
$contratId = null;
}
// managing products
if ($userRole === "VENDEUR"){
$sth = $pdo->prepare("SELECT * FROM contrat WHERE id=?");
} else if($userRole === "COURTIER"){
$sth = $pdo->prepare("SELECT id, imageUrl, courtier FROM contrat WHERE id=?");
}
$sth->execute([$contratId]);
$result = $sth->fetchAll(PDO::FETCH_OBJ);
echo json_encode($result[0]);
?>
Я думаю, что это понять моего профи Блен, как решить.
Любая помощь будет высоко ценится, ребята.