PDA

View Full Version : ساخت JSONArray در وب سرویس و دریافت آن در برنامه



parniaznet
شنبه 08 فروردین 1394, 20:21 عصر
سلام
وقت بخیر
من از کدهای زیر برای گرفتن اطلاعات از دیتابیس سمت سرور و تبدیل اون به JSONArray استفاده می کنم :


require_once 'include/DB_Connect.php';
// connecting to database
$db = new DB_Connect();
$db->connect();
$id = intval($_POST['id']);

$result = mysql_query("SELECT * FROM testup WHERE id > $id");
while($user = mysql_fetch_array($result))
{
$response["success"] = 1;
$response["users"]["id"] = $user["id"];
$response["users"]["family"] = $user["family"];
$response["users"]["phone"] = $user["phone"];

echo json_encode($response);
}

و برای دریافتشون در برنامه و افزودن به دیتابیس از این کدها استفاده می کنم :

JSONArray json_user = json.getJSONArray("user");
for (int i = 0; i < json.length(); i++) {
JSONObject objJson = json_user.getJSONObject(i);
// here you can get id,name,city...
String id = objJson.getString("id");
String family =objJson.getString("family");
String phone=objJson.getString("phone");
db.adduser(id, family, phone);
}


و کدهای دیتابیس برنامه برای افزودن اطلاعات :
public void adduser(String id, String family, String phone){

ContentValues values = new ContentValues();
values.put("id", id);
values.put("family", family);
values.put("phone", phone);

mydb.insert("testup", null, values);

}

اما این کار نمیکنه ، ممکنه چک کنید که من کجا رو اشتباه کردم؟

این رو تو لاگ میبینم :


03-28 21:05:10.735: E/JSON(7613): {"tag":"updb","success":1,"error":0,"users":{"id":"2","family":"tamanae","phone":"654321"}}{"tag":"updb","success":1,"error":0,"users":{"id":"3","family":"karami","phone":"987654"}}{"tag":"updb","success":1,"error":0,"users":{"id":"4","family":"nafari","phone":"456789"}}

Nevercom
یک شنبه 09 فروردین 1394, 04:25 صبح
کد PHP رو به این شکل اصلاح کنید:

require_once 'include/DB_Connect.php';// connecting to database
$db = new DB_Connect();
$db->connect();
$id = intval($_POST['id']);


$response = Array();


$result = mysql_query("SELECT * FROM testup WHERE id > $id");
while($user = mysql_fetch_array($result))
{

$response[] = $user;
}


echo json_encode(Array("success" => 1, "users" => $response));

parniaznet
یک شنبه 09 فروردین 1394, 17:20 عصر
کد PHP رو به این شکل اصلاح کنید:

require_once 'include/DB_Connect.php';// connecting to database
$db = new DB_Connect();
$db->connect();
$id = intval($_POST['id']);


$response = Array();


$result = mysql_query("SELECT * FROM testup WHERE id > $id");
while($user = mysql_fetch_array($result))
{

$response[] = $user;
}


echo json_encode(Array("success" => 1, "users" => $response));

ممنون اما کار نکرد. این رو تو لاگ میبینم :


03-29 18:03:02.646: E/JSON Parser(14069): Error parsing data org.json.JSONException: End of input at character 0 of

ظاهرا هیچ آرایه ای رو برنمیگردونه اون کد

parniaznet
یک شنبه 09 فروردین 1394, 21:58 عصر
یه مشکل املایی بود که حل شد. الان آپدیت کار میکنه با کد های زیر اما مشکلی که هست این هست که طبق این کد ها، من 3 تا ردیف اطلاعات دارم میفرستم و در دیتابیس برنامه هم 3 بار کار ذخیره سازی انجام میشه و 3 تا رکورد جدید اضافه میشه
اما تنها مشکلی که هست این هست که هر 3 رکورد مقادیر یکسانی دارن و مقادیرشون برابر رکورد اولی هست که از سرور برمیگرده

کد های اندروید :
JSONObject json_user = json.getJSONObject("user");
for (int i = 0; i < json_user.length(); i++) {
String id = json_user.getString(TAG_ID);
String family = json_user.getString(TAG_FAMILY);
String phone = json_user.getString(TAG_PHONE);
db.adduser(id, family, phone);
}
رکوردهای ورودی به صورت زیر هست :
{"id":"2","family":"tamanae","phone":"654321"}
{"id":"3","family":"karami","phone":"987654"}
{"id":"4","family":"nafari","phone":"456789"}

اما فقط این رکورد در دیتابیس ثبت میشه 3 بار :
{"id":"2","family":"tamanae","phone":"654321"}

parniaznet
یک شنبه 09 فروردین 1394, 21:59 عصر
اینم تست کردم جواب نداد :

JSONArray json_user = json.getJSONArray("user");
for (int i = 0; i < json_user.length(); i++) {
JSONObject objJson = json_user.getJSONObject(i);
// here you can get id,name,city...
String id = objJson.getString("id");
String family = objJson.getString("family");
String phone = objJson.getString("phone");
db.adduser(id, family, phone);
}

Nevercom
دوشنبه 10 فروردین 1394, 03:58 صبح
نمونه ای از JSONی که از سرور دریافت می کنید رو بزارید

parniaznet
دوشنبه 10 فروردین 1394, 11:40 صبح
نمونه ای از JSONی که از سرور دریافت می کنید رو بزارید

این رو تو لاگ میبینم که از سرور میگیره :

03-30 12:16:27.120: E/JSON(32701): {"tag":"updb","success":1,"error":0,"user":{"id":"2","family":"tamanae","phone":"654321"}}{"tag":"updb","success":1,"error":0,"user":{"id":"3","family":"karami","phone":"987654"}}{"tag":"updb","success":1,"error":0,"user":{"id":"4","family":"nafari","phone":"456789"}}

Nevercom
دوشنبه 10 فروردین 1394, 15:07 عصر
خب این JSON شما مشکل داره، اصلاً هیچ JSONArrayی وجود نداره، درعوض چندبار پشت سرهم JSON Object اومده
با تغییر در کد PHP باید این مشکل برطرف میشد، یعنی کد PHP ای که گذاشتم میاد و JSONArray تولید می کنه، ایراد کار شما این بود که echo رو داخل حلقه گذاشته بودید، در صورت که باید بعد از حلقه باشه