مشکل در رتروفیت

0 امتیاز
55 بازدید
سوال شده مهر 4, 1397 توسط android  

سلام مهندس وقت بخیر

من میخوام یک \ارامتر id رو از طریق رتروفیت بهرستم سرور پی اچ پی و بر اساس ای دی آبجکتی رو بهم برگردونه  ولی تنها ارور زیر بهم نمایش داده میشه توی اندروید استودیو.حتی توی postman هم تست کردم با روش get اونجا جواب میگیرم.و لطفا بگید چجور میتونم با روش Post این کار رو انجام بدم

 

onFailure: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $

 

این هم کدهای  php من:

<?php
include "connection.php";

$id = $_GET['id'];

$sql = "SELECT * FROM tbl_product WHERE id='$id'";
$result = $conn->query($sql);

$array = array();

if ($result->num_rows > 0) {
    // output data of each row
	
	for($i = 0; $i < $result-> num_rows; $i++){
		
		$array[$i] = $result->fetch_assoc();
		
	}
	
	$jsonEncode = json_encode($array, JSON_UNESCAPED_SLASHES | JSON_UNSCAPED_UNICODE);
	
	echo $jsonEncode;
    
} else {
    echo "notok";
}
$conn->close();


?>

 

و این کدهای اندروید استودیو:

 

//کلاس اینترفیس
package com.example.androidjs.retrofitcaffelearn.classes;

import java.util.List;

import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;

public interface MyAPI {

        @GET("data.php")
        Call<List<Model>> getProducts();

        @GET("data1.php")
        Call<Model> getItemDetail(@Query("id") int id);  //حطی که مورد سوال بنده هستش

}

 

 

توی اینترفیس درخواست اول به درستی کار میکنه اما درخواست دوم هستش که این مشکلات رو داره یعنی مورد از کانفیگ رتروفیت نیست

 

 

این هم جوابی که از طریق postman میگیرم:

[{"id":"3","prname":"\u067e\u06cc\u0631\u0627\u0647\u0646","prprice":"50000","img":"http://www.caffelearn.com/caffelearn/image/prImage/1493982114_1530379980.png"}]

این مطلب را به اشتراک بگذارید

1 پاسخ

0 امتیاز
پاسخ داده شده مهر 4, 1397 توسط ASHKARAN  

با عرض سلام

شما در اینترفیس خودتون تعریف کردید که قراره یک Object از نوع Model دریافت کنید.

@GET("data1.php")
Call<Model> getItemDetail(@Query("id") int id);  //حطی که مورد سوال بنده هستش

اما در پاسخ سرور یک آرایه ارسال می کنید که توش یه Object از نوع Model‌ هم وجود داره

	$jsonEncode = json_encode($array, JSON_UNESCAPED_SLASHES | JSON_UNSCAPED_UNICODE);

شما دوتا کار می تونید انجام بدید

اگر می خواین تغییر از سمت سرور باشه :

	$jsonEncode = json_encode($array[0], JSON_UNESCAPED_SLASHES | JSON_UNSCAPED_UNICODE);

البته حتما باید چک کنید مقدار خونه صفرم آرایه NULL نباشه ....

 

روش دوم اینه که کد جاوا رو تغییر بدید:

        Call<List<Model>> getItemDetail(@Query("id") int id);  //حطی که مورد سوال بنده هستش

دقت بفرمایید شما نمی تونید هردو کار رو باهم انجام بدید...

در صورتی که به نتیجه نرسیدید پیام بدید تا بیشتر بررسی کنیم

971 سوال

817 پاسخ

1,318 دیدگاه

1,270 کاربر

متاسفانه نیستم

این مطلب را به اشتراک بگذارید

ali.ashkaran@gmail
ما .....
  • سعی بر پاسخگویی به سوالات دیگران داریم.
  • به سوال و یا نظر دیگران احترام می گذاریم .
  • این وبسایت را به دیگران معرفی می کنیم.
  • همواره صمیمیت و ادب را رعایت می کنیم.
  • به سوالمان برچسب های مرتبط اضافه می کنیم.
  • در حین طرح سوال فرد خاصی را مخاطب قرار نمی دهیم .
...