کلیدستان

نسخه‌ی کامل: ارتباط با سرور(در برنامه نویسی اندروید)
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
باسلام به آدمین و دوستان فعال که کمکشون بدون دریغ انجام میدن.
بنده با مجموع تصویری آموزشی نحوه ارتباط با دیتابیس سرور و ارسال کردن و دریافت مقادیر یاد گرفتم.اما به نظر خودم روشی که در این پکیج آموزشی است خیلی راه وقت گیر است.احساس میکنم روش سریعتری باشه.
فرض کنید من یک دیتابیس دارم که دو فیلد به نام title و body داره.من میخوام برای بروز رسانی بیاد تمامی سطرهایی که مثلا از یه عددی هست رو بگیر و به سمت گوشی بفرسته.برای اینکار
درسمت php من کدهایی نوشتم که قسمتی از آن :

کد پی‌اچ‌پی:
$sqlQ="select * from T1 where ID>='$ id' ";
$result=mysql_Query($sqlQ);

while(
$row=mysql_fetch_assoc($result)){

print 
$row[0].'|';
print 
$row[1].'|';


درواقع من میام نتیجه کوئری که رو در یک حلقه میندازم و فیلدها رو با کارکتر | جدا میکنم و پرینت میکنم.

درسمت اندروید هم

کد پی‌اچ‌پی:
BufferedReader reader=new BufferedReader(new InputStreamReader(connect.getInputStream()));
            
StringBuilder sb=new StringBuilder();
            
            
String line=null;
            
            while((
line=reader.readLine()) !=null){
                
                
                
int f=0;
                
int c=0;
                
                for(
int i=0;i<line.length();i++){
                    if(
line.charAt(i)=='|'){
                        
String temp=line.substring(fi);
                        if(
c==0){
                            
                            
tid=temp;
                        }
                        if(
c==1){
                            
                            
tuser=temp;
                        }
                        if(
c==2){
                            
                            
                            
tmatn=temp.replace("^""\n");
                            
                            
                        }
                    
                    
f=i+1;
                    
c+=1;
                    }    
                }
                
                
index.count2++;
                
db.insert(tidtusertmatn); 

نمیخوام وارد جزئیات بشید .فقط بحث اینه که کد بالا میاد یک BufferReader تعریف میکنه. بعد میاد یه حلقه میزنه میگه تا زمانی که به انتهای نرسید خط به خط میگه و داخل متغیر line میریزه.
بعد روی این خط میاد یک حلقه دیگه میزنه و کارکتر به کارکتر میخونه تا برسه به کارکتر |  و فیلدها رو جدا میکنه.و داخل دیتابیس insert میکنه.
برنامه به درستی کار میکنه.ولی مشکل اینه اگر ما مثلا 30 مطلب و هرکدوم از آنها شامل چند 10 خط باشه .خب عملا تکرار حلقه ها خیلی زیاد میشه.
میخواستم بدونم اینکار منطقیه؟ آیا روش کوتاه تری هست؟
این روش مشکلی ندارد؟
آدمین جان چون میدونم شما روی دیتابیس تسلط زیاد دارید خوشحال میشم جواب بدید
یا بقیه دوستان اگر میدونند کمک کنند.مرسی
سلام.
در مورد مقایسه آن با روش های دیگر (از نظر میزان زمان اجرا) نمی توانم نظر بدهم (من از روش شما تاکنون استفاده نکرده ام بلکه بیشتر با json کار می کنم)، اما نکاتی را که معمولا در این موارد خود بنده رعایت می کنم، در اینجا می نویسم (فقط برای مورد شما نیست و به طور کلی برای سایر کاربران تذکر می دهم) :

1- برای انتقال اطلاعات متنی پیچیده (یعنی مقدار تعداد زیادی متغیر را می خواهیم از طریق متن دریافت کنیم)، از ساختارهای استانداردی مثل json استفاده کنید (کلید شماره 2651). اینگونه می توانید با کلاس های (Class) مرتبط با پردازش متن با ساختار json ، مقدار متغیرها را در آرایه ها (Array) یا لیست آرایه ای (ArrayList) ذخیره کنید (بعد هم این مقادیر را در database برنامه اندروید ذخیره می کنید). در غیر این صورت، باید کدهای زیادی برای استخراج مقدار متغیرها از متن دریافت شده بنویسیم که منطقی نیست (البته این مورد را به صورت کلی گفتم و برای مورد شما، نمی توانم بگویم کدام روش سریعتر است).
این بخش مربوط به دریافت متن هم در کلاس های json parser انجام می شود (که متن از خروجی صفحه دریافت شده و بعد یک JSONObject به ما داده می شود که بعد اطلاعات را به صورت آرایه از آن استخراج می کنیم).

2- اگر برای انتقال مقدار زیادی اطلاعات به صورت همزمان است، تعداد زیادی درخواست به یک صفحه نفرستید، بلکه تنها یک درخواست بفرستید که خروجی صفحه، شامل تمامی آن مقادیر به صورت متن به شکل json باشد.

3- در سمت سرور، انتخاب ردیف ها (rows) حتما در خود query باشد، نه اینکه همه ردیف ها با query انتخاب شود و بعد در یک حلقه for ، با شرط هایی ردیف های مورد نظر انتخاب شوند (زیرا همین حلقه for زمان زیادی را تلف می کند، در صورتی که انتخاب ردیف تنها باید در query باشد).

به هیچ عنوان این روش توصیه نمیشه .وشما درست حدس زدید.اینکه بیاد خط به خط بگیرید و روی هر خط هم یک حلقه دیگه بزنید خب عملا یه وقت زمان بری هست.مثلا فرض کنید شما 1000 رکورد داشته باشید که هرکدام 40 خط داشته باشه .که میشه 40000 خط حدودا.بعد شما روی هرکدوم از این 40000 خط یک حلقه دیگه برای پیدا کردن کارکتر بزنید .خب این روش به نظر نرمال نمیاد.
ایراد بعدی که این روش داره ممکنه کارکتری که برای جدا سازی انتخاب کردید در داخل متن باشه.اگر یک درصد احتمال بدید این کارکتر| بنابر دلایلی وارد متن بشه.تمامی رکوردهای شما رو بهم میریزه.
بهتره بعد از کوئری زدن روی دیتابیس اون به فرمت جیسون دربیارید و به صورت آرایه از جیسون پاس بدید.همون طور که آدمین گفت

 
سلام اگر بر نامه نویسی سوکتی انجام بدین سرعت بیشتری دارین و به نظر من بهتر است ار json هم استفاده کنید
(۱۳۹۴/۰۶/۲۹, ۰۱:۲۹ ب.ظ)'rayej.ir' نوشته: [ -> ]سلام اگر بر نامه نویسی سوکتی انجام بدین سرعت بیشتری دارین و به نظر من بهتر است ار json هم استفاده کنید
 

منابع زیادی برای یاد گیری برنامه نویسی سوکت در اندروید وجود نداره ممکنه یک پروژه یا راهنمایی کنید که چطوری میشه ی متن رو به صورت سوکت به سرور ارسال کرد و جواب را دریافت کرد؟
 
با سلام
دوستان بنده تازگی اندرود رو شروع کردم و به شدت میخام جیسون رو یاد بگیرم
بنده هم طبق راهی که بالا گفته شده برنامه نوشتم اما الان میخام با جیسون کار کنم اما هرچی میگردم نمیتونم اموزشی پیدا کنم(یوتوب و گوگل)
از طرفی نمیتونم با جیسون کار کنم و php بلد نیستم
اگه امکانش هست درمورد json در وردپرس توضیح بدید و اگه میشه اموزشی قرار بدید و همینطور کدوم پلاگین وردپرس برای استفاده از جیسون نیازه
ممنون از همگی
سلام دوست عزیز پیشنهاد میکنم لینک زیر رو ببینید،مشکلتون رو حل میکنه
http://openandroid.ir/2015/11/%D8%A2%D9%...%88%D8%B1/
 
تضمین میکنید به دردم بخوره؟
هزینش اصلا برام مهم نیست فقط میخام اموزش کار و ارسال مقادیر با جیسون و دریافتش توی اندروید رو داشته باشه
فیلم اموزشی زیاد گرفتم ولی چیزی که میخاستم نبود
توی توضیحات این فیلمم به نظر اموزش کاملی از جیسون نیست
(۱۳۹۴/۰۸/۳۰, ۱۲:۵۱ ب.ظ)'Michael.0858' نوشته: [ -> ]تضمین میکنید به دردم بخوره؟
هزینش اصلا برام مهم نیست فقط میخام اموزش کار و ارسال مقادیر با جیسون و دریافتش توی اندروید رو داشته باشه
فیلم اموزشی زیاد گرفتم ولی چیزی که میخاستم نبود
توی توضیحات این فیلمم به نظر اموزش کاملی از جیسون نیست

 

دقیقا چیزی که شما میخواید هستش،شک نکنید من خودم با این آموزش یاد گرفتم

 ویرایش توسط admin :
شما باید تذکر بدهید که صاحب سایت مورد نظر هستید. این نکته برای کاربرانی که اطلاعی ندارند، مهم می باشد. 
(۱۳۹۴/۰۸/۲۹, ۰۵:۳۸ ب.ظ)'davoodg' نوشته: [ -> ]سلام دوست عزیز پیشنهاد میکنم لینک زیر رو ببینید،مشکلتون رو حل میکنه
http://openandroid.ir/2015/11/%D8%A2%D9%...%88%D8%B1/
 

 

سلام.
اگر لینکی ذکر می شود، باید حتما تذکر بدهید که صاحب سایت مورد نظر خودتان هستید.
به هر حال بنده به عنوان مدیر سایت، مسئول شفاف بودن این مسائل هستم و به اجبار، اینگونه ارسال ها حذف خواهند شد. محدود ارسال هایی هم که حذف نمی شوند برای این است که نشان دهیم مشکلی با تبلیغات در انجمن نداریم، ولی به شرطی که موضوعی جداگانه برای آن نوشته شده و توضیحات در آن ذکر شوند و جدا از پرسش و پاسخ های انجمن باشند.

چشم آقای مدیر