آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

درست کار نکردن دریافت اطلاعات از سرور

122982  6 سال پیش  6 سال پیش
0 0

با سلام من سه مقدار رو از دیتابیس گرفته و خروجی میگیرم (به صورت جیسون) داخل php ولی مشکلی که دارم این هست که اکثر موارد مقدار درست نمایش داده نمیشه هر چی گشتم مشکلی در کدهام ندیدم . ضمنا خروجی php داخل مرورگر درست هست و مطمئنا مشکلی نداره .

کد اتصال به سرور :

urlConn = url.openConnection();
bufferedReader = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));
StringBuffer stringBuffer = new StringBuffer();
String line;

while ((line = bufferedReader.readLine()) != null)
{
stringBuffer.append(line);
}
JSONObject json = null;
try {
json = new JSONObject(stringBuffer.toString());
}catch (Exception e){

}

در یک موضوع جداگانه پرسیدم که آیا این روش اتصال به سرور و وب سرویس درست و به روز هست یا قدیمی شده ؟  لینک

به هر حال مشکل اینجاست که مقادیر رو از خودش میاره مثلا سه عدد 5 و 8 و 9 هست ولی خودش 1 و 1 و 0 میاره مثلا .

آیا این اتصال ، کش مموری دارد ؟ یعنی مقادیر رو از سرور نگیره و از کش بگیره ؟

این هم ادامه کد (گرفتن مقدار از جیسون ) :

int V1 = json.getInt("Value1");
int V2 = json.getInt("Value2");
int V3 = json.getInt("Value3");

خیلی وقتم رو گرفته هر کاری میکنه درست اجرا نمیشه ؟ آیا امکانش هست از سرور باشه ؟ البته سرور داخل مرورگر درست اجرا میشه و هر تعداد رفرش میکنم اطلاعات رو درست بر میگردونه ولی داخل برنامه این جوری میشه . پیشاپیش ممنون.

 برای این سوال 3 پاسخ وجود دارد. مشاهده پاسخ صحیح
پاسخ به سوال 
hamcalas  6 سال پیش
0 0

احتمالا خطا در گرفتن مقدار ها است به این شکل تست کنید و ببیند مشکلی از کجاست


try{
int v1=json.getInt("value1");
}catch(Exception e){
Log.i("TAG",e);
}
اگر می خواهید با یک خطا ادامه کار لغو نشه بقیه موارد هم تک تک صورت بالا و لاگ را کنترل کنید ببینید کجا خطا هست


از این توضیحات شما اشکال کار مشخص نیست، چند کار می تونید انجام بدید برای ارتباط با سرور می تونید از کتابخانه هایی مثل volley استفاده کنید https://developer.android.com/training/volley/index.html     

پاسخ به سوال 
122982  6 سال پیش
0 0

ممنون از راهنمایی تون ولی مشکل از این نبود . مشکل من بیشتر به بخش زیر

while ((line = bufferedReader.readLine()) != null)
{
stringBuffer.append(line);
}
JSONObject json = null;
try {
json = new JSONObject(stringBuffer.toString());
}catch (Exception e){

}

مربوط هست چون وقتی دیباگ میکنم و مقدار json رو نگاه میکنم همون مقادیر اشتباه رو نشون میده . به نظر میاد به سرور وصل نمیشه و از خودش مقدار دهی میکنه .

چون در مرورگر وقتی آدرس رو تست میکنم مقادیر صحیح رو برمیگردونه ولی داخل برنامه مقادیری از خودش بر میگردونه هر چند شکل و قالب جیسون برگشتی درسته ولی مقادیر صحیح نیست ! واقعا هنگ کردم

پاسخ به سوال 
122982  6 سال پیش
+1 0

 پاسخ صحیح

با تشکر بالاخره خودم پیدا کردم همون طور که انتظار داشتم و قبلا گفته بودم از کش بود .

درواقع به جای آنکه برنامه بره و از سرور اطلاعات جدید رو دریافت کنه میرفت و از کش گوشی میخوند و اطلاعات قدیمی رو میاورد . این مشکل رو با سه خط کد زیر درست کردم :

urlConn.setRequestProperty("Cache-Control", "no-cache");
urlConn.setDefaultUseCaches(false);
urlConn.setUseCaches(false);

البته برای من خیلی بد نشد و به لطف دوستان رفتم و volley  رو یاد گرفتم فک میکردم خیلی سخت باشه ولی راحت و آسون بود .


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .