# Native Code > برنامه نویسی موبایل > Android Studio >  آموزش ساخت وب سرویس و استفاده در اندروید

## harani

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

آموزشهایی که من قرار میدم مبتنی بر این موضوع است که دوستان اندروید رو بخوبی بلد هستن . چرا که بحث وب سرویس جز مباحث پیشرفته اندرویده .

خب برای وب سرویس لازمه که ابتدا ابزارهای آن را از جمله داشتن یک سرور (که ما چون میخواهیم لوکال کار کنیم بهتر است که نرم افزار wamp server را دانلود کنیم ) و یک محیط برنامه نویسی php & html مانند notepad++ و dreamviwer یا phpstorm و یا ... داشته باشیم .

دانلود wamp server : x86  حجم 38 m
دانلود wamp server : x64  حجم 41 m

پسورد *soft98.ir*

دانلود notepad++ حجم 6 m

پسورد *soft98.ir*

اگه استقبال شد بحث را ادامه میدیم .

----------


## slr560

عالیه دوست عزیز. ادامه بدین.

----------


## hamed_hossani

poster چگونه وب سرویس خود را تست کنیم.mp4
 Wcf_Tutorial درک بیشتر WCF به کمک مثال(ویدیو).mp4

----------


## mhn143

سلام این هم یک آموزش دیگه
http://developer.xamarin.com/guides/...king_with_WCF/

----------


## harani

> سلام این هم یک آموزش دیگه
> http://developer.xamarin.com/guides/...king_with_WCF/






> poster چگونه وب سرویس خود را تست کنیم.mp4
>  Wcf_Tutorial درک بیشتر WCF به کمک مثال(ویدیو).mp4



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

----------


## harani

*جلسه ی دوم رفع مشکلات در wamp* :

توجه بفرماید تنظیمات زیر بر حسب control panel ویندوز 7 ( که فکر کنم برای vista هم همینه ) برای xp اگه نمیدانید کلمات کلیدی آن را سرچ کنید و تنظیمات را انجام دهید .مطمئناً ویندوز های ویندوز 8 و 8.1 تفاوت خاصی با 7 نداره .

* 1- سبز نشدن wamp  :*

بسیاری از شما زمانیکه wamp  را نصب و اجرا میکنید بایستی آیکن آن (که در گوشه ی پایین سمت راست در  ناحیه task bar) ابتدا قرمز سپس نارنجی رنگ و در نهایت سبز رنگ شود اگر سبز رنگ نشد wamp شما بدرستی نصب شده است اما وجود یکسری از ابزارهای تحت سرور با wamp دچار تداخل شده اند . به عنوان مثال اگر شما از sql server استفاده میکنید ابتدا بایستی همه ی سرویس های آن را غیر فعال (stop) کنید و دوباره wamp را اجرا کنید . در حالت کلی برای stop کردن سرویس های نرم افزارها وارد (control panel => system and security => admistrative tools=>services) میشویم . سرویس مربوطه را پیدا میکنیم و چناچه status آن started بود روی آن راست کلیک کنید و آن را stop کنید . برای تمامی service ها فعال تحت server مانند sql server این عمل را تکرار کنید . در نهایت wamp را stop و start کنید بایستی آیکن wamp پس از گذشت چند ثانیه سبز رنگ شود .

*2- مشکل در ip :*

پس از اینکه wamp شما بدرستی start شد . برازر خود را بالا بیارین (من خودم firefox رو دوست دارم) سپس عبارت localhost را تایپ کنید بایستی صفحه ی مربوط به wamp نشون داده بشه اگه نشد یا wamp بدرستی نصب نشده یا همچنان سبز رنگ نیست . اگر درست بود به جای localhost تایپ کنید 127.0.0.1 (این عبارت دقیقاً معنی local host میده ) همچنین به جای local host اگر ip خودتون هم تایپ کنین بایستی صفحه مربوطه به wamp در برازر بیاد .

صفحه ی مربوط در wamp در برازر

http://dab1nmslvvntp.cloudfront.net/...07/wamp-02.jpg


*   چگونه ip خودمون را بفهمیم :*

     راه اول : در قسمت مربوط به network در پایین سمت راست کامپیوتر (در ناحیه task bar)  راست کلیک کنید کنید سپس open network and sharing center را انتخاب کنید .
یا به مسیر Control Panel\Network and Internet\Network and Sharing Center بروید قسمت connections را انتخاب کنید در قسمت بالا اومده details را کلیک کنید قسمت ipv4 address همان ip شماست .

  2- یه کار دیگه این که میتوان در پنجره start (که میتوان با کلید پنجره کیبورد رو بزنید) تایپ کنید . cmd سپس enrter و در پنجره ظاهر شده ipconfig رو تایپ کنید و enter رو بزنید مقدار ipv4 address آدرس ip شماست .

حال رسیدیم به این مشکل که ip زدیم و صفحه wamp ظاهر نشد . پوشه ی wamp رو که نصب کردیم باز میکنیم و به مسیر \wamp\bin\apache\Apache<version code>\conf\ میریم :

حال که به این مسیر رسیدن برروی فایل httpd.conf راست کلیک کنید سپس با notepad یا notepad++ (بهتره) ویرایش کنید . یا این فایل و درگ دراپ کنید تو یکی از محیط های ویرایش حال که این که باز کردید عبارت زیر رو بیابید :

<Directory "c:/wamp/www">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.4/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   AllowOverride FileInfo AuthConfig Limit
    #
    AllowOverride All

    #
    # Controls who can get stuff from this server.
    #
#    Require all granted
#   onlineoffline tag - don't remove
     Order Deny,Allow
     Deny from all
     Allow from 127.0.0.1
     Allow from ::1
     Allow from localhost
     Allow from 192.168.1
     Allow from 192.168.56
</Directory>


در این بالا همانطور که میبیند در قسمت هایی شامل Allow from هستید این دو گزینه Allow from 192.168.1   و    Allow from 192.168.56 ای پی خودتان هست . اگر با تایپ ip به جای localhost صفحه wamp باز نشد . کافی مانند این قسمت ip خودتان را به این صورت وارد میکنید Allow from +  ip (هر قسمت مربوط به Allow from  مانند بالا را نداشتید به همین صورت ثبت نمایید ) فایل را ذخیره کنید. یکبار wamp (یادم نمیاد ولی فکر کنم یکبارم باید سیستم رو هم) reset کنید . سپس با وارد کردن ip صفحه wamp ظاهر میشود . در غیر این صورت مراحل را نادرست دنبال کردید .
*
 اینهم از این قسمت ببینیم استقبالها چطوری تا ادامشو بعدن بدیم .*
 
حال داخل notepad++ بشیم قبل از کدنویسی از منوی encoding گزینه ی encoding in utf8 رو انتخاب کنید و  در قسمت language => p => php را انتخاب کنید .

----------


## ali-star

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

----------


## harani

*جلسه ی سوم وب نویسی با PHP* : *قسمت اول*

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

http://www.w3schools.com  هستش به طور گویا و جامع تمام موارد رو توضیح داده .
*

چرا php ?
*
php قابلیت سرعت اجرای بالا در صفحات در مقابل خیلی محیط ها ی دیگه مانند asp را دارد . سازگاری با بیشتر سیستم عامل ها و  server ها مانند apache و .. می باشد . و مهم تر آنکه برای کسانی با java (مانند ما اندروید کارها) و C کار کردند یادگیری بسیار ساده ای دارد .

خدا رو شکر از این بحث و جدل ها تو نت ریخته اگر دوستی میخواد تعصبی نشون بده  (که نمیدونم asb سرعت بالاتری داره و ...) تعصبش بی دلیل من نظر خودم و سایر اساتید رو نوشتم .

حال بریم بدنبال ادامه ی کار :

همانطور که گفتم شما به یک wamp نیاز دارید و یک محیط برنامه نویسی برای php .از سمت wamp که ok شدیم حال میریم بدنبال php :

من گفتم که میتونید از notepad++ استفاده کنید ولی notepad++ برای کد نویسی ابزار حرفه ای نیست چرا که نسبت به نرم افزارهای دیگه خیلی هوشمند نیست و قابلیت عیب یابی کد هم در آن وجود ندارد و معمولاً مانند note pad ابزار ویرایش هست .
 من خودم از intellij idea استفاده میکنم اگه شما هم مانند من نمیخواهید از note pad استفاده کنید کافی تو google سرچ کنید *php idea* یا *محیط برنامه نویسی php* یک لیست بلند بالا از محیط ها مختلف نشون داده میشن یکی از این محیط های قدرتمند محیط JetBrains  PhpStorm هستش که میتونید آن را از اینجا دانلود کنید http://www.p30world.com/6291/jetbrains-phpstorm/ محیط برنامه نویسی برای php خیلی هستش مثل    *dreamweaver ، netbeans* , *Zend Studio ، phpDesigner * والی ماشالا بسته به سلیقتون هر کدومشوم رو که دوست داشتید میتونید بدانلودید  :لبخند گشاده!: 

به هر حال خیلی ها شاید سرعت اینترنتشون کمه یا حجم دانلودشون محدوده ما از همون notepad++ استفاده میکنم .

اولین سایت لوکال خود را ایجاد کنید :

شما تو درایوی که wamp رو نصب کردید میان یه پوشه مثل /dev/projects/websites می سازید که همه ی پروژتون بریزین تو اون حالا اگه میخوای یه محیط برنامه نویسیم برای php داشته باشین میتونی توی dev/idea بریزین :

مسیر  پروژه بالا را داشته باشین حال میام سایت را ایجاد میکنیم . روی ایکن wamp سبز رنگ در نوار task bar کلیک کنید و مطابق شکل کار نمایید و یک alias جدید بسازید :


(Apache + alias directories +add an alias)

new alias.png


با این کار وارد یک محیط کنسول شکل مانند cmd ویندوز میشوید .

در این قسمت اسم سایتی که میخواهید ایجاد کنید را وارد کنید مثلاً samplesite و enter را بزنید .
سپس بایستی میسری که فایل ها پروژتون هست را در این قسمت وارد کنید که بهتر است مسیر پروژه (همان مسیر /dev/projects/websites/<YourSiteName> فولدر <YourSiteName> که در مسیر مربوطه باید بسازید) را تایپ کنید و enter را بزنید.

حال داخل notepad++ بشیم قبل از کدنویسی از منوی  encoding گزینه ی encoding in utf8 رو انتخاب کنید و  در قسمت language  => p => php را انتخاب کنید .

کد زیر را در آن میریزیم :


<؟php
echo "This is First My Site";
?>



من کد نویسی php را در جلسات بعد بیشتر توضیح خواهم داد :

حال آن را در مسیر مربوطه و با نام index ذخیره میکنید . 

browser خود را باز کنید و localhost را تایپ کنید . در قسمت your aliases بایستی نام پروژه ی شما آمده باشد و گرن شما به اشتباهی مراحل را دنبال کردید . زمانی که شما برروی سایتتون کلیک میکنید بایستی مقدار This is First My Site در برازر شما آمده باشد .

*حال یکسری از دوستان تمام مراحل را درست میرن و با خطای Forbidden مواجه میشن آن ها بایستی کاری کاملاً متفاوتی انجام دهند .

*و حالا راه حل چیست :

ابتدا اگر aliase ای ایجاد کردید را پاک کنید : به قسمت ساخت alias جدید ( که در بالا به همراه عکس نشون داده شد) بروید در این جا شما لیستی از دایرکتوری ها را میبنید پروژه خود را بیابید و delete alias رو میزنید و wamp دوباره reset میشود .پروژه خودتون رو از مسیر پروژتون cut کنید .

به مسیر C:\wamp\www  (یا هر دایرکتوری که wamp داره ) همینجا پروژتون رو همراه با فولدر مربوطش paste کنین  (از این پس برای ساخت پروژه هاتون به جای ساخت یک alias جدید کافی یه فولدر در اینجا بسازین و فایل های php و html را مستقیماً توش قرار بدین ) تو این مسیر یک فایل index.php است که این فایل در واقع همان صفحه ی wamp ای است که با تایپ local host ظاهر میشود .این فایل را با notepad یا notepad++ ویرایش کنید بدنبال کد

 $>projectContents .= '<li><a href="'.$file.'">'.$file.'</a></li>'; 
 باشید .این قطعه کد رو به اینصورت عوض کنین :
$projectContents .= '<li><a href="http://localhost/'.$file.'">'.$file.'</a></li>';

حال فایل را ذخیره کنین . و wamp را reset کنید .

پس از سبز شدن wamp عبارت loacal host را تایپ کنید حالا پروژه شما در قسمت your projects قرار دارد با انتخاب آن بایستی مقدار This is First My Site در برازر نمایان شود در غیر این صورت توالی مراحل را به اشتباه انجام دادید .

*دوستان من شاید تا مدتی به خاطر دغدغه های کاری نباشم .* من در جلسه ی بعد میخواهم به کدنویسی  php  بپردازم شما میتوانید خودتان از سایت http://www.w3schools.com   این دانش را فرابگیرین ولی اگه نخواستید در 

*جلسه ی چهارم وب نویسی با PHP* : *قسمت دوم  
*
  به این قسمت می پردازم :


*امیدوارم که مطالب مفید بوده باشد به امید استقبال شما عزیزان .*

----------


## ali-star

در لینوکس ما به جای wamp از lamp استفاده می کنیم چطوری میتونیم یه alias directorie بسازیم؟

----------


## iman_beygi

لطفا ادامه بدین 
اگه امکانش هست برنامه نویسی با اکلیپس (eclipse) رو هم همراه با وب سرویس بذارید.
ممنون

----------


## harani

*جلسه ی چهارم وب نویسی با PHP* : *قسمت دوم  


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

با عرض پوزش به همه ی دوستان علاقه مند من دلیل مشغله زیاد کاری تاخیر زیادی در یادگیری ایجاد کردم امیدوارم من را بابت این موضوع عفو فرمایید

برخی از دوستان سوالاتی از من پرسیدن که من در ابتدا به سوالات دوستان پاسخ میدهم :

یکی از دوستان در مورد سرور واقعی صحبت کردن که باید بگم سرور در واقع یک کیس قدرتمند است که به یک lan پرسرعت وصل می باشد معمولاً سرورهای قیمت های زیادی دارند و زیاد مناسب برای کارهای فردی نیست و بیش تر در ارگان ها و سازمان ها مورد استفاده قرار میگیرد ولی اگه مصمم به خرید آن هستید سایت ایران اچ پی یکی از فروشگاه های که یک فروشگاه سرور آنلاین هستش میتوانید با مراجعه به سایت سرور مدنظرتون رو خریداری فرمایید .

یکی دیگر از دوستان در مورد lamp صحبت کردن lamp در واقع همون wamp در محیط سیستم عامل لینوکس هستش باید بگم این سرور مورد علاقه بسیاری از توسعه دهندگان و سازمانهای بزرگ جهانی است مانند یوتوب , ibm و ... من هر چقدر از خوبی آن بگم بازم کم گفتم . ولی دو موضوع یکی اینکه این مطلب موضوع بحث آموزشی ما نیست و متاسفانه من به شخصه با lamp کار نکردم . اما من چند سایت را به شما معرفی میکنم که میتونه شما را راهنمایی کند یا میتوانید در فوروم های زبان php مطلبتان را درج کنید .
سایت 1: http://www.ibm.com/developerworks/we...p/wa-lamp.html
سایت 2 : http://lamphowto.com/

حال برویم سراغ بحث آموزش :

تا اینجا رسیدیم که قرار شده در پیرامون کدهای php صحبت کنیم . سعی میکنم به صورت مقایسه با جاوا پیش برم که هم درک بهتر باشه هم سریعتر جلو بریم .

Php  همانند python یک زبان توصیفی است بدین معنا که این دسته از برنامه ها برای اجرا شدن نیازی به کامپایل کد ندارند .

آموزش شروع شد :

 کدهای php باید بین دو تگ 


<?php 

?>


باشن .

==============================================
تو جاوا میگیم :



String a = "salam";

int b = 2;

double c = 435.6;



تو php میگیم



 $a = "salam";

$b = 2;

$c = 435.6;



==============================================

تو جاوا میگیم :



String a = "this is" + "php";

int a = 2;
int b = 3;
int c = a + b;




تو php میگیم



 $a = "this is" . "php";

$a = 2;
$b=3;
$c=$a+$b;



تفاوت ها رو خوب بررسی کنید :

==============================================
تو جاوا میگیم :


String a = "HELLo";

System.out.print(a);



تو php میگیم



$a = "hello";
echo $a;



پس echo برای چاپ در php استفاده میشود البته php شاما print هم است شما میتوانید برای چاپ از ان نیز استفاده کنید اما جز مطالب ما نیست .
==============================================

تو جاوا میگیم :


String a = "Hello world!";
int b = a.lenght();



تو php میگیم



echo strlen("Hello world!");



==============================================

تو جاوا میگیم :


String a = "Hello world!";
int b = a.indexOf(world);



تو php میگیم



echo strpos("Hello world!","world");




==============================================

تو جاوا میگیم :


for (int i = 0 ; i <= 10 ;i++){
 System.out.print("The number is:  " + i);
}



تو php میگیم



for ($x=0; $x<=10; $x++) {
     echo "The number is: ".$x;
} 




==============================================
تو جاوا میگیم (تعریف متد) :


public void writeMsg(){
System.out.print("Hello world");
}


تو php میگیم


function writeMsg() {
  echo "Hello world!";
    }



متدهای php تایپ بازگشت مثل void , int ,... لازم ندارد . 
==============================================

کامنت ها هم دقیقاً مثل همند فقط برای کامنت یه خطی در php میتونید اول خط # بذارید اما از // نیز میتونید استفاده کنید .

بچه ها تا الان کدها رو دید ما تو جاوا برای تعریف متغیرها باید نوع تایپ آن را مشخص میکردیم ولی در php نیازی به اینکار نیست متغیر در php توسط یک $ تعریف میشود و نوع متغیر وابسته نیست .

بریم سر آرایه برای این قسمت دیگه نیازی به قیاس با جاوا نیست :


*

  <؟php


//یه آرایه new میکنیم .

$array1=array();

// 1 تا 10 رو توش اضافه میکنم :

for($i=0;$i<10;$i++)
{
    $array1[]=$i/5;
}


*

یک آرایه رو میتونید نیز new و طرق مختلف آن را مقدار دهی کنید .

*

<؟PHP

$myarray = array();

$myarray[] = 2;
$myarray[] = 3;
$myarray[] = 4;
$myarray[6] = 2;
$myarray["hello"] = 2;
$myarray["hello2"]="substring";
$myarray["another array"] =array(
  "hello5"=>3,"test"=>"r",3=>5, "For Loop" => $array1
);

 //$array1 را در کد بالا تعریف کردیم .


echo json_encode($array);


?>

*

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

{"0":2,"1":3,"2":4,"6":2,"hello":2,"hello2":"subst  ring","another  array":{"hello5":3,"test":"r","3":5,"For  Loop":[0,0.2,0.4,0.6,0.8,1,1.2,1.4,1.6,1.8]}}

در این کد باید بگم چیزی را که شما به شکل آرایه انتظار داشتید تحقق نیافت این آرایه به صورت  key-value   پر شده است . حتی خط آخر کد  "Key ، "another array یک   value  به شکل یک  آرایه key-value دارد و در داخل آن یک آرایه دارد $array1 (که در بالاتر با for آن را پر کردیم) 

همانطور که میبیند پر کردن آرایه دست خودمونه هرجوری که خودمون دوست داریم میتونیم آن را پر کنیم . آرایه ای که  در داخل {} قرار میگیرد در php در واقع یک شی است 

json_encode متدی در php است که مقدار آرایه را به یک مقدار قابل چاپ تبدیل میکنید چرا که مقدار این شی به خودی خود چاپ نمیشود   .

راستی یه چیز یادم رفت سایز array هم به شکل زیر است :


$a[0] = 1;
$a[1] = 3;
$a[2] = 5;
$result = count($a);


دوستان من دغدغه زیادی دارم ممکن است مجدد تا یه مدتی نباشم .

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


*

----------


## harani

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

من در ادامه ی جلسات بحثای تکمیلی مرتبط به کد نویسی php و ارتباط و استفاده در اندوید رو آموزش میدم ولی باز به استقبال شما دوستان داره .

----------


## poorman

harani عزیز تنها چیزی که از دست ما بر میاد همین فشار دادن دکمه تشکر هست

اگر تا حالا پست نذاشتم واسه این بود که نظم تاپیک حفظ بشه

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

من خودم هیچ آشناییتی با سرور ندارم و دوست دارم که شما آموزش ها رو ادامه بدید  :لبخند:  مرسی

----------


## star_game

دوست عزیز harani من شدیدا منتظر ادامه آموزش هستم و بسیار از شما متشکرم.
من مدتی است دنبال همچین آموزش کامل و جامعی بودم که امروز پست شما رو دیدم و استقبال می کنم . 
ما منتظریم :تشویق:  :تشویق:  :تشویق:

----------


## majnoon110

دوست عزیز لطفا ادامه بدید
مطلبی که شما مینویسید مطمئنا نه تنها الآن بلکه در آینده بارها با توجه و استفاده ی کاربرانی که درباره ی این مسئله جستجو میکنند مواجه میشه
امیدوارم که مارو همچنان بهره مند کنید

----------


## NeoFighT

harani جان ما بی صبرانه منتظر ادامه آموزش هستیم
لطفا ادامه بدا.

----------


## harani

*جلسه ی پنجم وب نویسی با PHP* : *قسمت سوم * 


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

در php بالغ بر 9 متغیر  Superglobals وجود دارد .
 این متغیر Superglobals  بدین معنی که این نوع متغیرها همیشه دردسترس و نامحدود در استفاده در هرجای کد مانند متدها و کلاسها می باشد .
مهمترین این متغیر ها :

$_GET برای گرفتن داده  و $_POST برای ارسال داده  و $_REQUEST می باشد  در واقع تلفیق دو متغیر قبلی است .

برای فهم بهتر  پروژه جدید به اسم siteTest ایجاد کنید و کد php زیر را در آن بنویسید :


<?php
 if (empty($_GET['name'])) {
      $a="empty";

   } else {
   $a = $_GET['name']; 
   }

echo $a;

?>


زمانیکه این کد رو اجرا کنید خروجی شما .empty دیده میشود . به شرط if دقت کنید $_GET['name'] در واقع مقدار name ای است که کاربر ارسال کرده و توسط $_GET['name']  گرفته میشود .

و empty موجود در شرط if که یک boolean برمیگرداند چک مکیند که کاربر آیا مقداری را وارد کرده است یا خیر .

* دقت کنید در php برای string هم میتونید از "" استفاده کنید هم ''*

در قسمت url برارز نام آدرس ساییتان را میبینید . در جلوی url مقدار زیر را وارد کنید و enter بزنید :

?name=ok%20get

میبینید که مقدار چاپ شده به ok get یک سوالی برای شما پیش میاد و اینکه با خود میگویید من که ok%20get پس چرا به جای %20 مقدار space چاپ شد در پاسخ بایستی گفته شود که شما در url نمیتوانید بظور عادی از برخی کاراکترها نظیر space استفاده کنید و بایستی از  URL Encoding Reference  استفاده کنید . %20 واقع معادل space در قسمت url است .

post را بیشتر در اندروید متوجه میشوید . چرا که فرآیند ارسال داده  را انجام میدهد .

REQUEST هم در واقع کار هر دو متغیر فوق رو میکنه . پس بهتره که کلاً به جای get و post از REQUEST استفاده کنیم .

*بریم سراغ دیتابیس :*

برای دیتابیس وارد phpMyAdim در wamp-server (آیکن موجود در نوار وظیفه) شوید .


phpadim.png

دو حالت داره یا مستقیم وارد صفحه ی mysql میشن یا وارد صفحه ای میشن که از شما user pass میخواد اگر user pass خواسته شد . در قسمت user تایپ کنید root و قسمت pass را خالی بذارید و go رو بزنید .

صفحه ای که شما میبنید صفحه ی mysql است .

mysql.jpg


برای ساخت دیتابیس جدید tab مربوط به  databse را نام دیتابیس و در قسمت collation باید utf مربوطه رو وارد کنید و برای ما فارسی زبانان مقدار utf8-general-ci بصرفه است . 
دیتابیس ساخته شده در پنل سمت چپ اضافه میشود . بالافاصله از شما میخواهد که یک table بسازید اگر چنین خواسته از شما پرسیده نشد در پنل سمت راست نام دیتابیس را بیابید و گره آن را باز کنید قسمت new را بزنید تا مرحله ساخت table ظاهر شود .

در این مرحله از شما یک نام و تعداد ستونی که نیاز دارید سوال میشوید آن را پر کنید و go را بزنید .

از اینجا به بعد دیگه ساخت table دیتابیس که همگی در این زمینه استادند .دیتابیستون حتماً یک id autoincrement داشته باشد . (نام id اختیاری هر چیز میتواند باشد) auto increment هم بصورت (فکر کنم ai در mysql نشون داده شده است .)  در این لینک هم میتوانید انواع متغیرهای مربوط به mysql را ببنید http://www.w3schools.com/sql/sql_datatypes.asp

حال دیتابیسو ساختیم و میخواهیم آن را در php استفاده کنیم کد php آن بدین صورت است .

برای استفاده mysql در php باسد از توابع mysqli استفاده کنیم . 

*PHP MySQLi = PHP MySQL Improved!*

The MySQLi functions allows you to access MySQL database servers.

به عنوان مثال میخواهیم توسط دستور select تمامی فیلدها را استخراج کنیم کد زیر این کار را میکنید .


<?php
$con=mysqli_connect("localhost","root","","my_db")  ;
    // Check connection
    if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }

$result = mysqli_query($con,"SELECT * FROM Persons");

while($row = mysqli_fetch_array($result)) {
  echo $row['FirstName'] . " " . $row['LastName'];
  echo "<br>";
    }

mysqli_close($con);
?>


در اینجا توسط mysqli_connect ما connection به دیتابیس زدیم که چهار پارامتر میگیرد نام host نام کاربری پسورد و نام دیتابیس

$con=mysqli_connect("localhost","root","","my_db")  ;


شرط if در خط بعد چک میکنید که آیا ارتباط برقرار شد یا خیر در صورت عدم برقراری عبارت Failed to connect to MySQL: چاپ میشود .

در خط بعد شما query مورد نظر خودتان را میزنید در اینجا شما بایستی کوئری ها sql را کار کرده باشید .میتوانید از این سایت نیز راهنمایی بگیرید http://www.w3schools.com/sql/sql_select.asp

و توسط متد mysqli_fetch_array واقع در حلقه مربوطه تمامی اطلاعات کوئری مربوطه را استخراج میکنیم . و مقدار تعریف شده $row در واقع به آرایه تعریف میشود .

مقدار خروجی در هر بار خواندن بصورت    echo $row['FirstName'] . " " . $row['LastName'];  بهمراه یک enter چاپ میشود . (FirstName و LastName دقیقاً نام  ستونهای دیتابیس هستند ) و در نهایت connecton را میبندیم .

چیزی که ما میبینیم مثلاً به شکل .

a b
c d
e f
g h
اگر توجه کرده باشید ما در دیتابیس تماماً از توابع mysqli استفاده کردیم .

دیدید که چقدر راحت با دیتابیس کار کردیم .

جهت تمرین شما تمامی داده های دیتابیس را بگیرید و بصورت یک آرایه نمایش دهید .

اینهم از این جلسه 

دوستان من فکر کنم که وب دیگه تا اینجا بس است .
به خاطر دغدغه های کاری شاید تاخیری زیادی بین آموزش بیوفته .
 شما بایستی فقط تمرین و تمرین کنید برای راهنمایی میتوانید از سایت http://www.w3schools.com/PHP/ استفاده نمایید .

در جلسات بعد شروع به استفاده وب در اندروید میکنیم .

 به امید استقبال شما دوستان .

----------


## majnoon110

دوست عزیز ازونجایی که ما اطلاعات دسترسی به دیتابیسمون رو داخل این فایل مینویسیم، آیا این کار امنیت کافی رو داره؟

 لطفا در مورد امنیت این وب سرویس ها هم کمی توضیح بدید متشکرم

----------


## harani

> دوست عزیز ازونجایی که ما اطلاعات دسترسی به دیتابیسمون رو داخل این فایل مینویسیم، آیا این کار امنیت کافی رو داره؟
> 
>  لطفا در مورد امنیت این وب سرویس ها هم کمی توضیح بدید متشکرم


وقتی که دیتابیس  و وب سایت روی یک وب سایت باشه،اصلا امنیت اتصال نیازی به  بررسی نداره چون توی یه سرور اتفاق میفته.مثل نوشتن  localhost.
اگر روی سرور دیگه باشه هم امنیتش ربطی به php نداره.و امنیتش توی یه لایه دیگه انجام میشه.

در کل php که هزاران ارگان بین المللی از آن استفاده میکنن مشخص است که زبان امنی است . در هر صورت ما داریم برنامه های تحت لوکال میزنیم . تحت هاست هم اگر بگیرید به شما user-pass استاندارد خواهد شد .  اگر هم تحت سرور باشه که دیگه دست خودتونه .

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

من خودم تا به حال مشکل امنیتی نداشتم ولی اگر این موضوع شما را ناراحت میکند در فوروم های php و یا سایت های گوناگون میتوانید به دنبال خواستتون باشید .

----------


## star_game

harani عزیز ما همچنان منتظر ادامه آموزش هستیم.
با تشکر

----------


## harani

جلسه ی ششم دریافت داده از وب سرویس در اندروید : قسمت اول


خب در این جلسه میخوام انتظار را پایان بدم و از سایت هایی ایجاد کردیم بتوانیم داده بگیریم .

لازم به ذکر است بهتر است کسانی ماباقی آموزش ها را دنبال میکنند آموزش های ماقبل را درست متوجه شده باشند.

در ادامه ی آموزش هامون ما یک پروژه ی دفترچه تلفن  میسازیم و در اندرویدمان اطلاعات را دریافت و همچنین اطلاعاتی را به سرور ارسال میکنیم . پروژه ما شامل فیلدهای نام , نام خانوادگی , شماره تلفن , نشانی محل سکونت است . هر فیلدی را که شما خواستار آن باشید میتوانید اضافه کنید .
(عکس هم کار خاصی ندارد فقط یکم متفاوت است برای عکس کافی است که آن را در جایی آپلود کنیم و لینک دانلود مسقیم آن را به دیتابیس بدهیم و در اندرویدمان آن را دانلود و در حافظه گوشی ذخیره کنیم فکر کنم متوجه شدید ولی اگر فرصت شد آن را هم میگویم ولی فعلاًٌ بدون عکس پیش میریم)

خب بریم سراغ برنامه :
یک پروژه وب با نام TelBook ایجاد کنید .
در اگر با ساخت پروژه مشکل دارین *جلسه ی سوم وب نویسی با PHP* را مطالعه کنید .
بچه ها بیاد داشته باشید که صفحه ی اول php را همیشه با نام index ذخیره کنید .

خب در phpmy admin مربوط به wamp را انتخاب میکنیم تا وارد صفحه ساخت دیتابیس شویم .
در tab databse را انتخاب میکنیم تا دیتابیس جدید را ایجاد کنیم . نام دیتابیس را تایپ کرده (مثلاً teldb) 
و در قسمت بعدی utf8-general-ci انتخاب میکنیم .سپس برروی پنل چپ نام دیتابیس ساخته شده را میابید و روی آن کلیک میکنید تا بتوانید جدول آن را بسازید .اسم جدول را نیز teldata میگذارم .و تعداد ستونهای مورد نیاز را برابر 5 قرار میدهیم .



به ترتیب فیلدها را پر میکنیم 
1- name = person_id / type = mediumint / attributes = unsigned / index = primary / 
و تیک a_I به مهنای auto increment را فعال میکنیم .


و فیلد 2-3-4 بعدی را به ترتیب برابر person_name , person_family , person_tel بهمراه type برابر با varchar و lenght 255 قرار میدهیم .

و فیلد آخر هم  address و type برابر با Text میگذارید و در نهایت جدول نهایی را save میکنید .

اگر دوستان در مفاهیم دیتابیس مشکلی دارند این لینک را بررسی کنند http://www.w3schools.com/sql/sql_datatypes.asp

جدول دیتابیسمون هم ساختیم .حالا میخواهیم چند رکورد به دیتابیسمون اضافه کنیم .
در پنل سمت چپ در زیر شاخه دیتابسمون جدول ایجاد کرده را انتخاب میکنیم .

در tab ها browse و structure ,...  را بیابید تب insert را انتخاب کنید حال چند رکورد به جدولتان اضافه کنید .
طبیعتاً چون person_id از جنس autoincrement هست نیازی به پر کردن آن نیست .

در تب browse میتوانید داده های اضافه شده خودتان را ببینید و آنها را ویرایش و یا حذف و با کپی تهیه نمایید .

اینهم کمی توضیح بیشتر جلسه قبل برای اونایی که کمی مشکل داشتند .



حال بریم سراغ فایل php خودمان .

در این قسمت میام کل داده های دیتابیس را داخل یک آرایه میریزیم و در قالب json چاپ میکنیم .

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


<?php
$con = mysqli_connect("localhost","root","","teldb");
if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result = mysqli_query($con,"select * from teldata");

$output = array();
$fetch_data = array();

while ($row = mysqli_fetch_array($result)){
    $fetch_data['person_id'] = $row['person_id'];
    $fetch_data['person_name'] = $row['person_name'];
    $fetch_data['person_family'] = $row['person_family'];
    $fetch_data['person_tel'] = $row['person_tel'];
    $fetch_data['address'] = $row['address'];

    $output[] = $fetch_data;
}

echo json_encode($output);

mysqli_close($con);


خروجی که در قسمت localhost دیده میشود به شکل زیر است :(در اینجا تست کنید که بایستی توسط وارد کردن IP شما خروجی ظاهر شود .
چناچه توسط IP با مشکلی روبرو هستید به جلسه ی دوم مراجعه نمایید)

[{"id":"1","name":"ehsan","family":"harani","tel":"  09123456789","address":"Address1"},{"id":"2","name  ":"Site","family":"BarenameNevis","tel":"091978345  67","address":"mir mojtahedi"}]

(دوستان ما یک آرایه داریم که هر عضو آن داده های دیتابیس است در واقع [] نشان دهنده ی یک آرایه و {} در واقع  یک شی json است .)

از سمت وب ok شدیم حال همین مقادیری که چاپ میکنیم رو میخواهیم در اندروید نشون بدیم دیگه طراحی از طرف اندروید دست خودتان است من دوستان دارم تمام داده ها رو تو یه textview بگیرم .
یک سرور داریم و یک کلاینت ، سرور در حقیقت ارائه دهنده خدمات و کلاینت به معنای درخواست دهنده ی خدمات است پس وب لوکال ما یک سرور معرفی میشود و ما که اندروید هستیم کلاینتیم .

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

HttpClient client = new DefaultHttpClient();


در اینجا در مورد DefaultHttpClient باید بگویم برای ساخت یک httpclient باید شی ای را از آن new کنیم ولی خود apache کلاس DefaultHttpClient را ساخته و مقادیر پیش فرض مورد نیاز را در آن قرار داده و شما را از  زحمت آن فارغ کرده .

حال کلاینت مربوطه میخواهد به شیوه ای با سرور ارتباط برقرار کند .دو روش برای ارسال خواسته مان داریم یکی get و دیگری post است . که بهتر است از post استفاده شود چرا که به نوعی get نیز محسوب میشود.

برای ایجاد یک خواسته به روش post داریم :

HttpPost post = new HttpPost("http://192.168.2.212/telBook/");


همانطور که میبینید ما خواسته ی خودمان را از سایتی که ایجاد شد طلب کردیم . در اینجا بایستی از ip خودتان استفاده کنید و ن از localhost دلیلشم هم این است که وقتی که emulator ران میکنیم سایت telBook در emulator موحود نیست و برنامه کرش میکند پس برای همین ip کامپیوتر خودمان را وارد مکنید .

برای اجرای دستوراتمان از متد execute استفاده مکنیم (مانند اجرای query و دستورات در sql) که این اجرای از جنس HttpResponse می باشد .


try {
            HttpResponse response = client.execute(post);
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


این دستور شامل بلاک try-catch است که در catch اول نحوه ی ارتباط نادرست اتفاق میوفتد و در catch بعدی میگوید چنین سایت (مقصدی) وجود ندارد .

در صفحات اینترنتی چیزی با نام StatusCode وجود دارد درواقع این عدد به شما میگوید که ارتباط شما با وب مربوطه به چه شکل بوده به عنوان مثال شما خطای معروف 404 Not Found را میشناسید که در خواست شما موفقیت آمیز نبوده در این جا 404 Status Code می باشد .مثلاً اگه Status Code 200 باشد .  یعنی ارتباط درست و موفقیت آمیز بود . برای اطلاعات بیشتر http://en.wikipedia.org/wiki/List_of_HTTP_status_codes مراجعه کنید .

برای گرفتن status codes در اندروید میگویم .

int code = response.getStatusLine().getStatusCode();
   Log.i("Status Code", code + "");


حال برنامه را اجرا کنید برنامه کرش کرد ;-) چون permission اینترنت ندادی اگه دوباره کرش کرد بایستی کدهای نوشته شده ی بالا را در یک Thraed بیندازید چون thread network متفاوت است با thread برنامه . در نهایت باید در قسمت log ها به رنگ سبز (info) کد 200 را با tag  Status Code ببینید خب این جلسه هم تموم شد . جلسه ی بعد نحو ه ی گرفتن داده های وب ایجاد شده را در اندروید را میگم (که من در textview میریزم) به امید استقبال شما دوستان .

----------


## harani

*جلسه ی هفتم دریافت داده از وب سرویس در اندروید : قسمت دوم**

*وارد بحث گرفتن داده ها از وب سرویس ایجاد شده میشویم .
یکی از دوستان بپرسیده بود که من زمانی که در دیتابیسم از فارسی استفاده میکنم به شکل ؟؟؟ نشون داده میشود .
خب در اینجا میخواهیم یکی از فنون آخر بروسلی رو به شما بگم برای رفع این مشکل کافی است بعد از connection تون به صورت زیر عمل کنید 


<?php

$con = mysqli_connect("localhost","root","","teldb");

if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
mysqli_set_charset($con,"UTF8");

عبارت mysqli_set_charset داده های دیتابیس را به untf8 تبدیل میکند .
اگر خروجی شما به شکل unicode در آمد مشکلی وجود ندارد چرا که مفسر آن را به این شکل تبدیل کرده است و در اندروید خواهی دید . که داده ها به صورت درست ظاهر میشود .

تا اینجا دیدم که چحوری توانستیم به وب سرویسمان وصل بشیم .و توسط status code برابر با 200 متوجه شدیم که ارتباط موفقیت آمیز بوده است .
حال داده هایی را که در دیتابیس ذخیره کردیم میخواهیم مثلاً در یک textview نمایش دهیم .


پس از قبل داشتیم :


int code = response.getStatusLine().getStatusCode();
   Log.i("Status Code", code + "");



 
در این قسمت ما نیاز به توابعی از HttpResponse با نام getEntity() که در واقع دسترسی به محتوای سایت را برای ما امکان میسازد چیزی شبیه getintent خودمان است و برای اینکه محتویات سایت را ببینیم بایستی متد getcontent که از جنس inputstream هست را فرا بخوانیم .

پس به زبان کدی داریم 

    int code = response.getStatusLine().getStatusCode();

            if (code == 200) {

response.getEntity().getContent();
            }




برای آنکه آن این محتوی را داخل ui بیاوریم طبیعتاً بایستی آن را به string تبدیل کنیم . مقدار getcontent(); از جنس inputstream است و تبدیل کردن آن به string نیازمند کار با فایل در جاواست که همگی در آن استادند .اگرم کسی بلد نبود میتونه بصورت کلیشه ای از متد زیر استفاده کنه :


    String StreamToString(InputStream in)
    {
        BufferedReader r = new BufferedReader(new InputStreamReader(in));
        StringBuilder total = new StringBuilder();
        String line;
        try
        {
            while ((line = r.readLine()) != null) {
                total.append(line);
            }
            return total.toString();
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return "";
        }
         
    }


پس در نهایت داریم :

private String result;

//=============def class=======

if (code == 200) {

            result = StreamToString(response.getEntity().getContent());
            Log.d("GetText", result);
            }



الان همینو در textview مربوطه settext کنید چه میبینید ؟ خروجی ما چاپ می شود  .اگه برنامه کرش کرد یا permission ندادید یا اینکه باید کدهای net را تو thread بذارید .  حال میخواهیم داده ها را به تفکیک بگیریم .
داده ای که ما داریم به اندروید میفرستیم . به شکل

[{"id":"1","name":"ehsan","family":"harani","tel  ":"   09123456789","address":"Address1"},{"id":"2","name   ":"Site","family":"BarenameNevis","tel":"09197  8345  67","address":"mir  mojtahedi"}] 

می باشد . 
که ما آن را گرفتیم و در یک string result نمایش دادیم .

این داده ابتدا با [ و در  پایان با ] نشان داده شده است .و هر عضو آن با , جدا شده به این نوع داده JSONArray میگویند . هر عضو داده با } شروع و با  { تمام میشود و هر عضو به صورت key-value پر میشود و با , از هم جدا میشود به این نوع داده که بصورت {"key1":"value1","key2":"value2"} نمایش داده میشود JSONObject میگوند . پس JSONArray آرایه ای است که هر عضو آن یک JSONObject است که مابین []  قرار میگیرد .

اگر پردازش و ظاهر این خروجی json برای شما گیج کننده است میتوانید تو گوگل سرچ کنید json viewer آنگاه هزاران سایت برای شما باز میشود با انتخاب هر کدام شما وارد سایتی میشوید که میتوانید این text ناخوانا را بصورت گرافیکی و خوانا مشاهده نمایید .در اینجا خواهی دید که کاراکترهایی که بصورت unicode در پنجره برازر شما بوده به شکل فارسی رویت میشود .

حالا که با json آشنا شدیم برای تفکیک داده ی string result از آن استفاده میکنیم .
خود من میخواهم تمام داده ها را در یک string بریزم شما میتونید آن را در دیتابیس بریزید یا هرجوری که میخواین آن را ذخیره کنید .
من برای اینکار از متد زیر استفاده میکنم .


public  String getData() {
    
        final StringBuilder sb = new StringBuilder();
        try {
            JSONArray array = new JSONArray(result);
            for (int i = 0 ; i < array.length() ; i++){
                JSONObject object = array.getJSONObject(i);
                sb.append(object.getLong("person_id"));
                sb.append(object.getString("person_name"));
                sb.append(object.getString("person_family"));
                sb.append(object.getString("person_tel"));
                sb.append(object.getString("address"));
                
                
            }
            return sb.toString();
            
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        return null;

    }


حالا من اینو متد را در یک کنترل تکست ویو settext میکنم . بازم میگم دیگه این قسمت سلیقه ای هر جوری که خواستید میتونید رفتار کنید میتونید برای زیباتر شدن یک structure بسازید و داده ها رو تو دیتابیس بریزید . و مثلاً هر قسمت رو تو یک cell در لیست ویو لود کنید . 

 بحث گرفتن داده رو گفتیم فقط میمونه که بحثه ارسال آن نیز را بگیم .

----------


## majnoon110

ممنون از شما دوست عزیز
من خیلی خوشحالم که افرادی مثل شما هستند که اینقدر وقت میگذارند برای آموزش

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

سپاس

----------


## m.a.d1992

سلام مهندس

آموزشات بی نظیره، واقعا دمت گرم که وقت میزاری و اینقد با حوصله و خوب توضیح میدی، هر چی بگم کم گفتم، خیلی خیلی خیلی ممنون


 :تشویق:  :تشویق:  :تشویق:  :تشویق:  :تشویق:  :تشویق:  :تشویق:  :تشویق:  :تشویق:  :تشویق:

----------


## Nevercom

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


بعضی وقتا ممکنه تنها با تنظیم Charset مربوط به کانکشن دیتابیس، باز هم حروف درست نمایش داده نشن
در این حالت خط زیر رو در ابتدای فایلی که قراره نتیجه ی نهایی رو echo کنه قرار بدید:

header('Content-type: text/html; charset=UTF-8');

----------


## smemamian

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


من بدین صورت عمل می کنم:

ini_set('default_charset',"UTF-8");
mysql_set_charset('utf8');
header('Content-type: text/html; charset=UTF-8') ;

همچنین قبل از اضافه کردن مقادیربه DB از حرف *N* استفاده می کنم:

insert into yourtable (fname) values (N'$fname')

----------


## harani

بسیار عالی من از همه ی دوستان درخواست دارم برای بهتر شده آموزش هر کس نکته ای به ذهنش میرسه حتماً بیان کنه 




> من بدین صورت عمل می کنم:
> 
> 
> mysql_set_charset('utf8');


من خودم از توابع mysql استفاده نمیکنم معمولاً از توابع mysqli استفاده میکنم . توابع mysqli در واقع بهینه شده ی mysql است احتمال اینکه داده ها با توابع mysqli مورد injection قرار بگیرد خیلی کمتر از myql است .

نهایت تشکر از شما دوستان را دارم .

----------


## Nevercom

حالا که بحث درمورد دریافت داده هست، بد نیست به مشکلاتی که ممکنه پیش بیاد و دیباگ کردنش خیلی اعصاب خوردی داره هم اشاره بشه.

موضوع اینه که سرورهای مختلف، کانفیگ متفاوتی دارن و البته ممکنه نسخه های متفاوتی از PHP و Apache و... نصب باشه (یا حتی سیستم عامل ها متفاوت)، این باعث میشه بعضی وقتا در ابتدای پاسخی که دریافت می کنید، کاراکترهایی اضافه بشه که باعث میشه پارس کردن نتیجه (و بخصوص تبدیلش به JSONObject) با مشکل مواجه بشه.
 درمورد من فقط یک کاراکتر اضافه میشد و من این قسمت رو به کدها اضافه کردم:
final int ascii = out.charAt(0); return ascii >= 33 & ascii <= 126 ? out : out.substring(1);
درستش اینه که در یک حلقه چک کنید تا زمانی که به یک کاراکتر معنی دار نرسیدید، اون کاراکتر رو حذف کنید.

در PHP اگر قبل از تگ <?Php کاراکتری (مثلاً Space) وجود داشته باشه، باعث میشه اول اون چاپ بشه و بعد خروجی شما که اون هم میتونه مشکل ساز بشه.

----------


## MSHService

من یه سوال دارم تو این مبحث اون قسمت JSON ، اگه داده ها فارسی بوذن اندروید چطور اونا رو نشون بده؟!!

----------


## harani

> من یه سوال دارم تو این مبحث اون قسمت JSON ، اگه داده ها فارسی بوذن اندروید چطور اونا رو نشون بده؟!!


اگه متدهای فارسی کردن من 
mysqli_set_charset($con,"UTF8");

 
و سایر دوستان  پس از connection درج کنید .
مشکلی از در خصوص نشون دادن فارسی وجود ندارد
فارسی نشون میده

----------


## gilas1368

کدی ک ب من میده 500ه، دلیلش چیه؟
البته من دارم از وب سرویسی ک با دات نت نوشتم استفاده میکنم

----------


## harani

> کدی ک ب من میده 500ه، دلیلش چیه؟
> البته من دارم از وب سرویسی ک با دات نت نوشتم استفاده میکنم


کد 500 خطای سرور است . اگر شما از هاست استفاده میکنید بهتر است با پشتیبانی هاست خود ارتباط برقرار کنید 
میتوانید از لینک زیر جهت راهنمایی استفاده کنید 
http://www.takwd.ir/joomla/%D8%A2%D9...ver-error.html

----------


## harani

*جلسه ی هشتم ارسال داده از اندروید به وب سرویس :* *پایان مقاله آموزشی قسمت اول**

*خب در اینجا نیز بخش پایانی بحث آموزشیمون رو مطرح میکنیم : بحث ارسال داده از دستگاه به وب سایت :

ارسال داده رو فقط من حالت insert شو میگم که خودتون delete , update , سایر کوئری ها دیگه میتونید مدیریت کنید :

در این قسمت ما میتوانیم یک فایل جدا php به نام insert (به عنوان مثال) و یا function  ای ایجاد کنیم و عملیات اضافه کردنو تو اون بریزیم . بر حسب راحتی و سلیقه هر کدام را که خواستید میتوانید انتخاب کنید : که من روش function ای(همون متد خودمون در php) را انتخاب میکنم :

کد php من بصورت زیر میشود :


    <?php

    if (isset($_REQUEST['action'])){
    $action = $_REQUEST['action'];
    }else{
    echo "Error";
    exit();
    }

    if ($action=="read"){
    read();
    }else if ($action == "insert"){
    insert();
    }

    function connection(){
    $con = mysqli_connect("localhost","root","","teldb");

    if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }
    mysqli_set_charset($con,"UTF8");

    return $con;
    }
    function read(){
    $con = connection();
    $result = mysqli_query($con,"select * from teldata");

    $output = array();
    $fetch_data = array();

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

    $fetch_data['person_id'] = $row['person_id'];
    $fetch_data['person_name'] = $row['person_name'];
    $fetch_data['person_family'] = $row['person_family'];
    $fetch_data['person_tel'] =$row['person_tel'];
    $fetch_data['address'] = $row['address'];

    $output[] = $fetch_data;
        }
        echo json_encode($output);

        mysqli_close($con);
    }

    function insert(){

        $name = $_REQUEST['person_name'];
        $family = $_REQUEST['person_family'];
        $tel = $_REQUEST['person_tel'];
        $address = $_REQUEST['address'];


    if (!empty($name) &&  !empty($family) && !empty($tel) && !empty($address)){
    $con = connection();
        $result = mysqli_query($con,"insert into teldata values (0,'$name','$family','$tel','$address')");
       mysqli_close ($con) ;

    }

    }



    ?>



    ببنید من تمامی کدهای بالا را تماماً توضیح دادم اگه جای ابهامی دارین بدانید که تمرین شما کافی نبوده .

در اینجا isset هم مثل empty که چک مکنه که مقدار ارسالی طرف خالی نباشه :

فقط یه توضیح مختصر از کد بالا بگم :

متغیر action را به وب سایت با مقادیر read و یا insert به وب ما میفرستد که اگر این متغیر read باشد متد read و در غیر اینصورت اگر insert باشد متد مربوط به insert نمایش داده میشود .

در جلسه ی پنجم گفتیم که $_REQUEST در واقع تلفیقی از  $_GET و هم $_POST است .
در لوکال هاست را بالا بیاورید و در قسمت url اضافه کنید :

?action=read


میبینید که تمام داده ها نمایش به شکل json نمایش داده شد .

حال بیایم سراغ اندروید یک اکتیوتی new کنید و لایوت آن را مثل فرم طراحی کنید (جهت اضافه کردن داده ها به وب پس 4 تا ادیت تکس داریم با یک دکمه send) 

برای ساخت یک json object در  php ما چه کار میکردیم ؟(امیدوارم json object و json array را از جلسات پیش بیاد داشته باشید  در واقع json object یک آرایه ای بود که بدون هیچ نظم و ترتیبی پر میشد و بصورت json  
encode  میشد در جلسه ی قبلی توضیح داده شد)


مثلاً میگفتیم :

$arry = array();
$arry['name']="me";
$arry[3]=125;
$arry['code']=200;


این آرایه چون هیچ نظم خاصی ندارد (یعنی ایندکس هاش از 0 تا n به ترتیب پر نشده) پس این آرایه در واقع یک شی محسوب میشود .

همین را داشته باشید دقیقاً تو اندروید هم میام به همین صورت عمل میکنیم :

برای ایجاد یک مقدار key-value از کلاس BasicNameValuePair که در واقع از جنس NameValuePair می باشد (مثل اینکه میگفتیم  
 List<?> l = new ArrayList<?>(); 
) استفاده میکنیم :

پس از call کردن کنترل هامون تو کلاس activity تو onclick دکمه میگیم :



NameValuePair name =  new BasicNameValuePair("person_name", txtName
                        .getText().toString());


NameValuePair family =  new BasicNameValuePair("person_family", txtFamily.getText().toString());

    NameValuePair tel =    new BasicNameValuePair("person_tel", txtTel.getText().toString());
    NameValuePair address =    new BasicNameValuePair("address", txtAddress.getText().toString());


حالا قبول دارید که تو php ما این عناصر را در یک آرایه میرختیم که مثلاً میشد :
{"code":"123","name":"ehsan} ما هم باید یک آرایه ای از key-value ها را پاس بدیم پس یک ArrayList<NameValuePair> باید درست کنیم و مقادیر بالا را توش اضافه میکنیم :

حال این آرایه ایجاد شده را بایستی به وب پاس بدیم :
از قبل یادتو هست دو خط کد زیر رو :( من اینا رو جلسات پیش کامل توضیح دادم )

        HttpClient client = new DefaultHttpClient();
    HttpPost post = new HttpPost("http://192.168.2.222/telBook/");


و در ابتدا با هم دیدم که زمانی که در قسمت url برازر اضافه میکنیم ؟action=read متد read کلاس php مان صدا زده میشد و خروجی json به نمایش در میامد :

حال متد insert رو در اینجا استفاده مکنیم دقیقاً به همین روش : پس داریم :


 HttpPost post = new HttpPost("http://192.168.2.222/telBook/?action=insert");


همه چی اماده است که این آرایه پر شده رو به وب پاس بدیم براحتی توسط متد setEntity که بلاک try-catch هست اینکار رو میکنیم :


HttpPost post = new HttpPost("http://192.168.2.222/telBook/?action=insert");

            try {

//item = ArrayList<NameValuePair>
                post.setEntity(new UrlEncodedFormEntity(item));
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    


از خود میپرسید کلاس UrlEncodedFormEntity چیست جلسه ی پنجم را بیاد آورید گفتم که وارد کردن مقادیری نطیر spce در url امکان پذیر نیست و باید از %20 (URL Encoding Reference) استفاده کنیم پس آیا در اندروید راهی وجود ندارد که این کاراکترها رو خودش به طور اتومات جایگذاری کند این همان کاری است که توسط کلاس UrlEncodedFormEntity  انجام میشود پس از ارسال داده حتماً mysql مربوط به phpMyadmin wamp رو رفرش و چک کنید که ببنید داده اضافه شده است یا خیر .اگر ok نبود یک جای از مسیر را نادرست رفتید . یادتو باشه که بهتره کدهای نت تون رو تو یک thread بذارید
delete و update و سایر کوئری هام که دیگه خودتون میتونید بزنید .

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


و من دو خواسته از دوستان دارم یکی اینکه ذکات علمتون بدید اگه چیزی بلدید و میتونید به دیگران کمک کنید حتماً این کار رو بکنید چرا که واقعاً برکتش به زندگیتون میاد .
و خواسته دیگم اینکه مباحث این مقاله را حتی شده بارها بارها تمرین کنید تا بتوانید پروژه های سمت وب سرویس هم خودتون handle کنید .
اگه میخواهید مطالب بیشتری سمت php را فرا یگیرد بهترین رفرنس سایت 
http://www.w3schools.com/PHP/
*می باشد .

دوستان سلام من شاید خیلی وقت که سر نزدم . که پوزش میطلبم .و مجبور شدم برای اینکه همه باز ببینند آن را در مبحث آموزشی بگنجانم
خیلی از کدهای گفته شده در اندروید و هم php ورژنهای جدیدتر تقریبا منسوخ شدند شما میتوانید در خصوص مبحث وب سرویس android برای موارد جدیدتر از مفاهیم زیر استفاده کنید .
 ۱- استفاده از HttpUrlConnection / HttpsUrlConnection
2- استفاده از کتابخانه volley
3- استفاده از کتابخانه retrofit
۴- استفاده از کتابخانه ساده و سربع Fast-Android-Networking 

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

**
*

----------


## NeoFighT

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

----------


## c0mmander

خوب مقاله خوب و کاربردیت به پایان رسید. یک خسته باشید حسابی که داخل این سه مال با توجه به مشغله ها اومدی و زکاتت رو دادی.. خدا قبول کنه. :تشویق:

----------


## r_khan

اگر ارسال اطلاعات به وب سرویس و دریافت اطلاعات  ازوب سرویس را درمونو اندروید هم توضیح بدهید ممنون میشم

----------


## harani

دوستان اینم سورس مقاله آموزشی اگه خواستید میتونید استفاده کنید . http://uploadazad.com/uploads/tov4_telbook.rar




> اگر ارسال اطلاعات به وب سرویس و دریافت اطلاعات  ازوب سرویس را درمونو اندروید هم توضیح بدهید ممنون میشم


من از مونو استفاده نکردم ولی خود سایت xamarin توضیحاتی در این رابطه داده است این لینک را نگاه کنید . http://developer.xamarin.com/guides/.../web_services/

----------


## NeoFighT

harani جان اگه میشه یه توضیحه کوچیکی هم در رابطه با برنامه نویسی سوکت بدین.
سرور چطور میتونه اطلاعاتی رو با استفاده از tcp بفرسته؟
با تشکر

----------


## harani

ارتباط سوکت از طریق دورن شبکه و توسط ip صورت میگرد .
من لینک زیر را برای راهنمایی بیشتر که توضیحات جامع تری نیز هست پیشنهاد میدهم :
http://en.wikipedia.org/wiki/Network_socket
و مثال اندرویدیشم بصورت زیر است :
http://examples.javacodegeeks.com/an...ocket-example/

----------


## star_game

ضمن تشکر از harani عزیز بابت آموزش بسیار خوبش من هنوز موفق به دریافت اطلاعات از سرور نشدم و ارور میده(جلسه ششم قسمت اول)
میشه راجع به thread هم توضیح بدهید من نمی دونم مشکل از کجاست؟؟
[2014-08-31 10:34:06 - telbook] ActivityManager: Warning: Activity not started, its current task has been brought to the front

----------


## harani

> ضمن تشکر از harani عزیز بابت آموزش بسیار خوبش من هنوز موفق به دریافت اطلاعات از سرور نشدم و ارور میده(جلسه ششم قسمت اول)
> میشه راجع به thread هم توضیح بدهید من نمی دونم مشکل از کجاست؟؟
> [2014-08-31 10:34:06 - telbook] ActivityManager: Warning: Activity not started, its current task has been brought to the front


اینی که شما زدی ارور برنامه س و به این دلیل که برنامه ای که دارید اجرا میکنید در حال حاضر اجراست خطای خاصی نیست . مشکل را در پنجره ی logcat ببینید ن پنجره consol
thread هم چز مباحث جاواست شما بایستی در جاوا به یک مهارتی برسید سپس بحث وب سرویس را دنبال نمایید فکر کنم برای شما زود باشد .

----------


## harani

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

----------


## mjnikbn

*منتظر* آپلود و یا گرقتن عکس وب سرویس

----------


## barnamenevisjavan

سلام دوستان من یه نمونه پیدا کردم و الان بصورت عالی کار میکنه فقط با حروف فارسی مشکل داره تمام توضیحاتو هم خوندم اما جواب نداد و بصورت علامت ؟ ذخیره میشه این کدهای php هستش:
کانفیگ :
<?php


/*
 * All database connection variables
 */


define('DB_USER', "root"); // db user
define('DB_PASSWORD', ""); // db password (mention your db password here)
define('DB_DATABASE', "androidhive"); // database name
define('DB_SERVER', "localhost"); // db server
?>

اتصال :
<?php


/**
 * A class file to connect to database
 */
class DB_CONNECT {


    // constructor
    function __construct() {
        // connecting to database
        $this->connect();
    }


    // destructor
    function __destruct() {
        // closing db connection
        $this->close();
    }


    /**
     * Function to connect with database
     */
    function connect() {
        // import database connection variables
        require_once __DIR__ . '/db_config.php';


        // Connecting to mysql database
        $con = mysql_connect(DB_SERVER, DB_USER, DB_PASSWORD) or die(mysql_error());


        // Selecing database
        $db = mysql_select_db(DB_DATABASE) or die(mysql_error()) or die(mysql_error());


        // returing connection cursor
        return $con;
    }


    /**
     * Function to close db connection
     */
    function close() {
        // closing db connection
        mysql_close();
    }


}


?>


اینسرت :

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title></title>
</head>
<body>
<?php
/*
 * Following code will create a new product row
 * All product details are read from HTTP Post Request
 */


// array for JSON response
$response = array();


// check for required fields
if (isset($_POST['name']) && isset($_POST['price']) && isset($_POST['description'])) {
    
    $name = $_POST['name'];
    $price = $_POST['price'];
    $description = $_POST['description'];


    // include db connect class
    require_once __DIR__ . '/db_connect.php';


    // connecting to db
    $db = new DB_CONNECT();
    // mysql inserting a new row




    $result = mysql_query("INSERT INTO products(name, price, description) VALUES(N'$name', N'$price', N'$description')");
    // check if row inserted or not
    if ($result) {
        // successfully inserted into database
        $response["success"] = 1;
        $response["message"] = "Product successfully created.";


        // echoing JSON response
        echo json_encode($response);
    } else {
        // failed to insert row
        $response["success"] = 0;
        $response["message"] = "Oops! An error occurred.";
        
        // echoing JSON response
        echo json_encode($response);
    }
} else {
    // required field is missing
    $response["success"] = 0;
    $response["message"] = "Required field(s) is missing";


    // echoing JSON response
    echo json_encode($response);
}
?>
</body>
</html>

----------


## harani

دوست عزیز شما اگر شما قصد کمک داشته باشید خیلی عالی . اینی را که شما نوشتید خوب بود که توضیحی در هر قسمت آن درج کنید این چیزی را که شما نوشتید من در 8 قسمت به دوستان آموزش دادم دوستانی که این تایپک را دنبال میکنن افراد علاقه مندی بودند که با در رابطه با بحث وب سرویس آشنایی نداشتند و یا کم آشنا بودن این کد شما را به عنوان یک مثال خوب برای آموزشها میتوان در نظر گرفت ولی جاش اینجا نبود .چرا که ممکن باعث گیج شدن دوستان شود .
توابع mysql در حال حاضر استفاده ای ندارد و جایگزین آن توابع mysqli است . که در واقع بهبود یافته ی توابع mysql است . 
اگه میخواین آموزشی بذارید یک آموزش با توضیحات کامل باشه ن copy-paste   مطلب

در نهایت من تشکر فراوان را از شما دارم .برای رفع مشکل فارسی در صفحه ی 1 همین تاپیک توضیح داده شده است .میتوانید به آن مراجعه کنید

----------


## barnamenevisjavan

> دوست عزیز شما اگر شما قصد کمک داشته باشید خیلی عالی . اینی را که شما نوشتید خوب بود که توضیحی در هر قسمت آن درج کنید این چیزی را که شما نوشتید من در 8 قسمت به دوستان آموزش دادم دوستانی که این تایپک را دنبال میکنن افراد علاقه مندی بودند که با در رابطه با بحث وب سرویس آشنایی نداشتند و یا کم آشنا بودن این کد شما را به عنوان یک مثال خوب برای آموزشها میتوان در نظر گرفت ولی جاش اینجا نبود .چرا که ممکن باعث گیج شدن دوستان شود .
> توابع mysql در حال حاضر استفاده ای ندارد و جایگزین آن توابع mysqli است . که در واقع بهبود یافته ی توابع mysql است . 
> اگه میخواین آموزشی بذارید یک آموزش با توضیحات کامل باشه ن copy-paste   مطلب
> 
> در نهایت من تشکر فراوان را از شما دارم .برای رفع مشکل فارسی در صفحه ی 1 همین تاپیک توضیح داده شده است .میتوانید به آن مراجعه کنید


ممنون اما همونطور که گفتم از روش های گفته شده استفاده کردم اما متاسفانه مشکل داره و فارسی ؟ ثبت میشه اگر ممکنه شما کدهارو اصلاح کنید

----------


## harani

ابتدا تگ title رو پاک کن و به جای تگ meta بنویس <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

دوماً شما بایستی زمانی که دیتابیس را میسازید در قسمت callation مقدار utf خود را به utf8-general-ci تغییر دهید .
سوماً در قسمت php بایستی مقادیر زیر را درج کنید (پس از کانکشن) 
ini_set('default_charset',"UTF-8");
mysql_set_charset('utf8');
header('Content-type: text/html; charset=UTF-8') ;

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

----------


## barnamenevisjavan

> ابتدا تگ title رو پاک کن و به جای تگ meta بنویس <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
> 
> دوماً شما بایستی زمانی که دیتابیس را میسازید در قسمت callation مقدار utf خود را به utf8-general-ci تغییر دهید .
> سوماً در قسمت php بایستی مقادیر زیر را درج کنید (پس از کانکشن) 
> ini_set('default_charset',"UTF-8");
> mysql_set_charset('utf8');
> header('Content-type: text/html; charset=UTF-8') ;
> 
> اگر این نکات را رعایت کنید نباید در خصوص فارسی نشان دادن مشکلی پیش اید .
> از این پس سعی کنید از توابع mysqli استفاده کنید .


ممنون دوست عزیز با این کار الان اطلاعات رو از دیتابیس بدون مشکل میخونه فقط وقتی که از برنامه اندروید یه رکورد اضافه میکنم اطلاعات بصورت علامت ? ذخیره میشه توی کدهای جاوا هم باید کد خاصی قرار بدم؟

-------------------------------------------------------------
Update

تو کدهای جاوا توی متد POST باید یه تیکه کد utf-8 رو اضافه میکردم :D
میزارم اینجا شاید کسی لازمش شد
httpPost.setEntity(new UrlEncodedFormEntity(params,"utf-8"));

----------


## harani

این رو هم استفاده کردید ؟ که در قسمت callation مقدار utf خود را به utf8-general-ci تغییر

تنها پیشنهادی به شما دارم این است که توابع mysql را به mysqli تغیر دهید (که مثل mysql فقط یک متغیر con اضافه تر میگرد)
ممکن است قسمت admin شما از فونت فارسی پشتیبانی نمیکند .
اگه ام جواب نگرفتید دیگه باید تو فوروم php سوالتون رو بپرسید .
یه سوال شما برای وب تون رابط کاربری میخواین ؟ اگه لازم نیست پس مشکلی نداره خود داده ها در وب بصورت ? باشد

----------


## barnamenevisjavan

> این رو هم استفاده کردید ؟ که در قسمت callation مقدار utf خود را به utf8-general-ci تغییر
> 
> تنها پیشنهادی به شما دارم این است که توابع mysql را به mysqli تغیر دهید (که مثل mysql فقط یک متغیر con اضافه تر میگرد)
> ممکن است قسمت admin شما از فونت فارسی پشتیبانی نمیکند .
> اگه ام جواب نگرفتید دیگه باید تو فوروم php سوالتون رو بپرسید .
> یه سوال شما برای وب تون رابط کاربری میخواین ؟ اگه لازم نیست پس مشکلی نداره خود داده ها در وب بصورت ? باشد


ممنون تو پست بالا هم گفتم مشکل دیگه به کلی رفع شده فقط الان توی سی پنل هاست شخصیم فایل هارو آپلود کردم و اطلاعات رو تغییر دادم ولی برنامه کار نمیکنه آیا روی هاست شخصی کار نمیکنه؟
الان این خطارو میده
*Warning: mysql_connect() [function.mysql-connect]: Unknown MySQL server host 'http' (25) in /home/shadoowi/public_html/login/android_connect/db_connect.php on line 28
Unknown MySQL server host 'http' (25)
Warning: mysql_close(): no MySQL-Link resource supplied in /home/shadoowi/public_html/login/android_connect/db_connect.php on line 42*

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

----------


## harani

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

----------


## singel

با تشکر از دوست عزیزمان که زحمت کشیدند و این مطالب را در اینجا قرار دادن 
من دو تا سوال داشتم
یک اینکه من هم مثل بعضی از دستان توی حروف فارسی مشکل دارم ، فقط در هنگام نمایش ، در دیتابیس درست ذخیره میشه ، تمام کارهای بالا را هم انجام دادم
دوم اینکه روشی که شما گفتید برای امنیتش که کار باید کرد که اطلاعات به صورت رمز نگاری رد و بدل بشه
باز هم ممنون

----------


## barnamenevisjavan

> با تشکر از دوست عزیزمان که زحمت کشیدند و این مطالب را در اینجا قرار دادن 
> من دو تا سوال داشتم
> یک اینکه من هم مثل بعضی از دستان توی حروف فارسی مشکل دارم ، فقط در هنگام نمایش ، در دیتابیس درست ذخیره میشه ، تمام کارهای بالا را هم انجام دادم
> دوم اینکه روشی که شما گفتید برای امنیتش که کار باید کرد که اطلاعات به صورت رمز نگاری رد و بدل بشه
> باز هم ممنون


بزودی اگه فرصت کنم یه نمونه کامل کامل (ثبت/حذف/ویرایش) بصورت کاملا آنلاین بدون مشکل فارسی قرار میدم

----------


## singel

دوست عزیز در مورد امنیت استفاده از این روش هم بحث کنید

----------


## esideli

*harani* عزیز واقعا لطف کردین که این آموزش رو گزاشتین.

من فعلا قصد استفاده از وب سرویس رو ندارم ولی از اونجا که کمی php بلدم، فقط می خوام بدونم وقتی که از این کد استفاده میشه:

```
HttpPost post = new HttpPost("http://192.168.2.222/telBook/?action=insert");
```

مقدار متغیر action به صورت post ارسال میشه دیگه؟

*یه توضیح هم درباره مشکلات حروف فارسی در php بدم و روش حل مشکلاتش :*

موارد زیرطبق تجربه شخصی بوده و امتحان شدس:

 برای استفاده از زبان فارسی در صفحات وب باید به نحوه ذخیره و بازیابی اطلاعات توجه کنیم. 

* 1_ ذخیره صفحات با رمزنگاری Encoding UTF-8 : 

*برای اینکه صفحات با محتوای فارسی به درستی ذخیره بشن باید با انکدینگ یو تی اف 8 ذخیره بشن. برای تعین انکدینگ صفحه ، قبل از ذخیره صفحه باید اون رو انتخاب کنیم که توی شکل نحوه تعیین انکدینگ در ویرایشگر phpDesigner رو نشون دادم:

utf-8.png

*2_تعیین نحوه خواندن اطلاعات صفحه برای مرورگر:* 

   برای اینکه صفحات فارسی بدرستی در مرورگر قابل مشاهده باشن باید از تگ      <meta>      درون تگ <head> به صورت زیر استفاده کنیم: 



```
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
```

*3_ ذخیره و بازیابی اطلاعات فارسی از بانک اطلاعاتی:

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


* برای بازیابی اطلاعات هم قبل از  زدن کوئری و بعد از اتصال به بانک از دو قطعه کد زیر جهت تعین رمزنگاری استفاده کنید:
  mysql_query('SET NAMES \'utf8\''); 

  mysql_set_charset('utf8');

البته اگه از دستورات  mysqli  استفاده می کنید i  رو هم خودتون اضافه کنید.

----------


## singel

سلام 
دوستان فرق بین api  و  وب سرویس چیه ؟؟؟

----------


## mfaridi

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

----------


## harani

> سلام 
> دوستان فرق بین api  و  وب سرویس چیه ؟؟؟


api یا Application Programming Interface در واقع رابط پیاده سازی توسط نرم افزار است که به دیگر برنامه ها اجازه میدهد با آن ارتباط  برقرار کند . 

در واقع وب سرویس نوعی api است که از http استفاده میکند (البته در برخی مانند soap از روشهای دیگری برای ارتباط مانند SMTP  استفاده میکنند )

----------


## harani

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


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

----------


## ho3ein.3ven

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

----------


## harani

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


من خواستم آموزش آپلود و گرفتن عکس رو بگم ولی استقبال زیاد خوب نبود شما میتوانید از سایت w3schools آموزش خودتون رو ببنید

----------


## singel

دوست عزیز *harani* 
با تشکر از راهنمایی ها و آموزش های خوبتون   :تشویق:  :تشویق:  :تشویق:  :تشویق:  :تشویق: 
 در صورتی که براتون مقدوره به اموزشاتون ادامه بدین تا همه بتونیم از اطلاعات شما استفاده کنیم

----------


## علی اکبر

سلام دوست عزیز
یه سئوال دارم این نرم افزارهای وایبر واتس اپ از وب سرویس استفاده می کنن یا سوکت؟

----------


## harani

> سلام دوست عزیز
> یه سئوال دارم این نرم افزارهای وایبر واتس اپ از وب سرویس استفاده می کنن یا سوکت؟


از هر دوش
برای چت کردن از سوکت برای ارائه خدمات از وب سرویس .

----------


## amin_a_y

سلام دوستان 
ممنون بابت آموزش های خوبتون
فقط مشکل Forbidden برای من حل نشده 
حتی پروژه رو بردم داخل www  باز خطای Forbidden میده

----------


## harani

> سلام دوستان 
> ممنون بابت آموزش های خوبتون
> فقط مشکل Forbidden برای من حل نشده 
> حتی پروژه رو بردم داخل www  باز خطای Forbidden میده


عرض شود خدمت حضرت عالی که اولاً  شما فایلای وب تون رو باید داخل یک فولدر (با نام پروژتون) بکنید و سپس در www   کپی کنید  اینکار را کردید ؟
سپس wamp رو بالا بیارین لوکال هاست رو تو url بنویسید سپس پروژتون رو انتخاب کنید . 
پس از انتخاب به من بگید در قسمت url اسم پروژتون فقط میاد یا میزنه localhost/project name ? اگر اسم پروژتون فقط میاد شما یک / + localhost (یا ip تون) رو قبل از آن بیندازید .

----------


## dalmif

سلام دوستان. ببخشید من توی بخش:



> حال برنامه را اجرا کنید برنامه کرش کرد ;-) چون permission اینترنت ندادی اگه دوباره کرش کرد بایستی کدهای نوشته شده ی بالا را در یک Thraed بیندازید چون thread network متفاوت است با thread برنامه . در نهایت باید در قسمت log ها به رنگ سبز (info) کد 200 را با tag Status Code ببینید خب این جلسه هم تموم شد . جلسه ی بعد نحو ه ی گرفتن داده های وب ایجاد شده را در اندروید را میگم (که من در textview میریزم) به امید استقبال شما دوستان .


من چجوری باید Thread کنم؟
php رو بلدم کاملا اما توی اندروید چون 1 ماه دارم کار میکنم حرفه ای نیستم.
لطفا کمکم کنید کارم گیره.
البته من کلاسم رو اینطوری public class MainActivity extends Thread نوشتم اما به onCreate گیر میده
خیلی ممنون میشم کمکم کنید

----------


## virus2009

با تشکر از Harani عزیز بابت آموزش خوبشون




> سلام دوستان. ببخشید من توی بخش:
> 
> من چجوری باید Thread کنم؟
> php رو بلدم کاملا اما توی اندروید چون 1 ماه دارم کار میکنم حرفه ای نیستم.
> لطفا کمکم کنید کارم گیره.
> البته من کلاسم رو اینطوری public class MainActivity extends Thread نوشتم اما به onCreate گیر میده
> خیلی ممنون میشم کمکم کنید


به صورت پیش فرض تمامی کد هایی که شما داخل اکتیویتی ها قرار میدید بر روی Main thread اجرا میشن، به main thread بعضی مواقع UI Thread هم می گویند یعنی کار اون ساخت رابط کاربری اکتیویتی شما است، یعنی هرچی شما کد بیشتری داخل اکتیویتی اجرا کنید یا مثلا یک خط کد اجرا شدنش طول بکشد ( مثل گرفتن اطلاعات از دیتابیس ) زمان ساخته شدن رابط کاربری یا همان UI افزایش می یابد.
حال به دلیل اینکه وصل شدن به اینترنت و گرفتن اطلاعات از آن ممکنه بعضی اوقات بسته به سرعت کاکنشن کم و زیاد شود، اندروید به شما اجازه اجرا کردن کد های مربوط به اتصال به اینترنت را نمی دهد به همین دلیل شما با خطا مواجه میشوید.
در کل شما باید همیشه کارهایی که ربطی به UI ـتون ندارند رو در یک Thread جداگانه از Main Thread اجرا کنید تا از تاخیر در کارکرد نرم افزار جلوگیری شود.

حال برای ساخت یک Thread جدا گانه میتوانید از کد زیر استفاده کنید :

new Thread() {
          
            @Override
            public void run() {

// کدهای خود را در این قسمت قرار دهید.

            }
        }.start();

----------


## badname

سلام دوستان ،
کسی هست با وب سرویس آقای کمالان کار کرده باشه منو راهنمایی کنه ؟ 
سابمیت میکنم "Error happened. Please try it later :(" بهم میده
log:

11-16 18:17:14.622: W/System.err(26145):     at java.lang.Thread.run(Thread.java:841)
11-16 18:17:47.814: D/FragmentForm(26145): Response code is: 200
11-16 18:17:47.844: D/Server response:(26145): -1<br />
11-16 18:17:47.844: D/FragmentForm(26145): SendFormTask finished its task.



هر جوری تست میکنم نمیشه ، یسری ام 404 میداد



رفع شد پورت MySQL رو تنظیم نکرده بودم :)

----------


## badname

> *جلسه ی هفتم دریافت داده از وب سرویس در اندروید : قسمت دوم**
> 
> *وارد بحث گرفتن داده ها از وب سرویس ایجاد شده میشویم .
> یکی از دوستان بپرسیده بود که من زمانی که در دیتابیسم از فارسی استفاده میکنم به شکل ؟؟؟ نشون داده میشود .
> خب در اینجا میخواهیم یکی از فنون آخر بروسلی رو به شما بگم برای رفع این مشکل کافی است بعد از connection تون به صورت زیر عمل کنید 
> 
> 
> <?php
> 
> ...


سلام خسته نباشید ، این فن بروسلی تونو  :لبخند گشاده!:  زدیم رو این وب سرویس سایت کمالان ولی درست نشد ، راهنمایی میکنید چیکار کنم  :لبخند: ؟
ممنون

----------


## badname

دوستان کمک کنید لطفا ، خیلی وقته درگیره فارسی کردنشم ... کسی نیست مارو یاری کنه  :ناراحت:

----------


## harani

اولاً مطمئن شوید که unicode محیط idea شما utf8 است یعنی مثلاً اگه از notepad++ است از قسمت encooding گزینه utf8 رو انتخاب کنید .
دوماً شما بایستی زمانی که دیتابیس را میسازید در قسمت callation مقدار utf خود را به utf8-general-ci تغییر دهید .
سوماً در قسمت php بایستی مقادیر زیر را درج کنید (پس از کانکشن) 
ini_set('default_charset',"UTF-8");
mysqli_set_charset($con,'utf8');
header('Content-type: text/html; charset=UTF-8') ;

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

----------


## badname

> اولاً مطمئن شوید که unicode محیط idea شما utf8 است یعنی مثلاً اگه از notepad++ است از قسمت encooding گزینه utf8 رو انتخاب کنید .
> دوماً شما بایستی زمانی که دیتابیس را میسازید در قسمت callation مقدار utf خود را به utf8-general-ci تغییر دهید .
> سوماً در قسمت php بایستی مقادیر زیر را درج کنید (پس از کانکشن) 
> ini_set('default_charset',"UTF-8");
> mysql_set_charset('utf8');
> header('Content-type: text/html; charset=UTF-8') ;
> 
> اگر این نکات را رعایت کنید نباید در خصوص فارسی نشان دادن مشکلی پیش اید .
> از این پس سعی کنید از توابع mysqli استفاده کنید .


تو notepad++  روی utf8-with BOM تنظیم کردم  رو utf8 جواب نمیده .
دیتابیسم رو روی utf8-general-ci  تنظیم کردم 
my sqli ام هستم بدین صورت :

    public function __construct() {
        // CONNECT TO THE DATABASE
        $this->mysqli = new mysqli($this->DB_HOST, $this->DB_USER, $this->DB_PASS, $this->DB_NAME,"3306");
        if (mysqli_connect_errno()) {
            throw new Exception("Unable to connect to the database. Error number: " . $this->mysqli->connect_errno);
  }
ini_set('default_charset',"UTF-8");
mysql_set_charset('utf8');
header('Content-type: text/html; charset=UTF-8');
    }

ولی باز مشکلش حل نشد ، فارسی مشکل داره هنوز :((

----------


## harani

> تو notepad++  روی utf8-with BOM تنظیم کردم  رو utf8 جواب نمیده .
> دیتابیسم رو روی utf8-general-ci  تنظیم کردم 
> my sqli ام هستم بدین صورت :
> 
>     public function __construct() {
>         // CONNECT TO THE DATABASE
>         $this->mysqli = new mysqli($this->DB_HOST, $this->DB_USER, $this->DB_PASS, $this->DB_NAME,"3306");
>         if (mysqli_connect_errno()) {
>             throw new Exception("Unable to connect to the database. Error number: " . $this->mysqli->connect_errno);
> ...


utf8-with BOM نزارین رو utf8 بزارین . اگه درست نشد فایلها رو آپلود کنید لینکشو بزارین تو اینجا تا من بررسیش کنم .

----------


## badname

رو utf-8 که میزارم کلا سیستم از کار میوفته
*بفرمایید فایل

ممنون

*

----------


## harani

فارسی از سمت وب ساپروت نمیشه یا کلاینت ؟؟ آیا به سرور مقدار فارسی ارسال میکنید ؟؟
من تو فایل class dbhandler متدهای utf8 نمی بینم :

class DBHandler {

    public function __construct() {
        // CONNECT TO THE DATABASE
        $this->mysqli = new mysqli($this->DB_HOST, $this->DB_USER, $this->DB_PASS, $this->DB_NAME);
        if (mysqli_connect_errno()) {
            throw new Exception("Unable to connect to the database. Error number: " . $this->mysqli->connect_errno);
    }
    }

اگه واقعاً متدهای utf8 کارنمیکنن تو فورم php هم مطرح کنید .

من برای اطمینان و امنیت کار شما پروژه شما را پاک کردم خیالتان راحت .

----------


## badname

> فارسی از سمت وب ساپروت نمیشه یا کلاینت ؟؟ آیا به سرور مقدار فارسی ارسال میکنید ؟؟


کلا  ساپورت نمیکنه همه جوره تستش کردم همه ش ؟؟؟ ذخیره میشه تو دیتابیس :ناراحت: 
فک کنم این گره به دست شما باز میشه رفتم کل فروم PHP رو به چالش کشیدم کسی نتونست حلش کنه

----------


## harani

باشه ولی من دغدغه ی کاری زیادی دارم . میتونم بپرسم وب سایتتون چیکار میکنه چی میدین و میفرستین ؟؟ بگید که من سر فرصت روش کار میکنم یه فایل php براتون درست میکنم مفرستم .

----------


## badname

بعضی جاهام گفتن این مطالب شاید کمک کنه ولی نکرد شمام یه نگاه بندازید بد نیست :
_یک
دو_

----------


## badname

> باشه ولی من دغدغه ی کاری زیادی دارم . میتونم بپرسم وب سایتتون چیکار میکنه چی میدین و میفرستین ؟؟ بگید که من سر فرصت روش کار میکنم یه فایل php براتون درست میکنم مفرستم .


والا رو اندروید کار میکنم ، دارم device id و comment و زمان ارسال نظر و rate یا vote یا همون لایک  رو میفرستم  و همه اینارو نمایش میدم (دقیقا مثل نظرات  و لایک و time زیر یه مطلب تو شبکه اجتماعی) ...، همین پروژه که دانلود کردین آماده ست همه اینکارارو انجام میده فقط مشکل فارسی داره ،،،،،
با اینکه سرتون حسابی شلوغه ولی اگه بتونین کمک کنید حل شه این مشکل کمک بزرگی کردیدن .... 
با تشکر

----------


## harani

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

برخی اوقات کاراکترهای فارسی به صورت کاراکتر در وب دیده میشه که مشکل نیستند .

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

----------


## badname

خیلی وقته دنبالشم خودم که خیلی وقته پوستم در اومده نتونستم ، هر جا هم پرسیدیم همه اومدن پاسخ دادن ولی در نهایت اونام تسلیم شدن ، :ناراحت: 
اولی کار نکردم باهاش چجوری باید ست کنم ، شمام نذاشته بودید فک کنم تو آموزشاتون  :متفکر:

----------


## badname

سلام بلاخره یه اتفاقی افتاد کدی که پایین میزارمو ست کردم و الان با browser دیتایی که میفرستم خیلی قشنگ بصورت فارسی در دیتابیس ذخیره میشه ، ولی هنوز یه مشکل بزرگ هست اندروید نمیتونه باهاش ارتباط برقرار کنه فک کنم بصورت byte باید دیتا بفرستم یا بگیرم با اندروید. یا اینکه charset uft-8 تنظیم کنم براش ....  میتونید راهنمایی کنید چجوری انجامش بدم
ممنون

/* change character set to utf8 */
if (!$this->mysqli->set_charset("utf8")) {
    printf("Error loading character set utf8: %s\n", $this->mysqli->error);
} else {
    printf("Current character set: %s\n", $this->mysqli->character_set_name());
}

----------


## harani

دوستان پروژه ی جامع تری که نوشتم رو براتون میزارم :

https://barnamenevis.org/showthread.p...88%DB%8C%D8%AF

----------


## mz6488

سلام.من از کدهای زیر استفاده کردم ولی هنوز مشکل نمایش فارسی رو دارم.تو دیتابیس درست ذحیره میشه.وقتی از اون دستور ست utf8 استفاده نکنم حروف فارسی به صورت علامت سوال دیده میشن.وقتی هم اون دستور رو میذارم حروف فارسی به صورت یه سری کاراکترهای انگلیسی نمایش داده میشن

<?php

$con = mysqli_connect("localhost","user","pass","dbName")  ;if (mysqli_connect_errno()) {    echo "Failed to connect to MySQL: " . mysqli_connect_error();}mysqli_set_charset($con,"U  TF8");

$result = mysqli_query($con,"select * from daryaft_pardakht");
$output = array();$fetch_data = array(); while ($row = mysqli_fetch_array($result)){    $fetch_data['aid1'] = $row['aid1'];    $fetch_data['aid2'] = $row['aid2'];    $fetch_data['name1'] = $row['name1'];    $fetch_data['name2'] = $row['name2'];    $fetch_data['price'] = $row['price'];     $output[] = $fetch_data;} echo json_encode($output); mysqli_close($con);

خروجی که با این کد میده

[{"aid1":"1103-3-3","aid2":"1101-1-1","name1":"\ufeb3\ufee0\ufef4\ufee2 \ufeaf\ufef3\ufeee\ufead\ufef1","name2":"\ufebb\uf  ee8\ufeaa\ufeed\ufed5 1","price":"2500000"}]

----------


## harani

> سلام.من از کدهای زیر استفاده کردم ولی هنوز مشکل نمایش فارسی رو دارم.تو دیتابیس درست ذحیره میشه.وقتی از اون دستور ست utf8 استفاده نکنم حروف فارسی به صورت علامت سوال دیده میشن.وقتی هم اون دستور رو میذارم حروف فارسی به صورت یه سری کاراکترهای انگلیسی نمایش داده میشن
> 
> <?php
> 
> $con = mysqli_connect("localhost","user","pass","dbName")  ;if (mysqli_connect_errno()) {    echo "Failed to connect to MySQL: " . mysqli_connect_error();}mysqli_set_charset($con,"U  TF8");
> 
> $result = mysqli_query($con,"select * from daryaft_pardakht");
> $output = array();$fetch_data = array(); while ($row = mysqli_fetch_array($result)){    $fetch_data['aid1'] = $row['aid1'];    $fetch_data['aid2'] = $row['aid2'];    $fetch_data['name1'] = $row['name1'];    $fetch_data['name2'] = $row['name2'];    $fetch_data['price'] = $row['price'];     $output[] = $fetch_data;} echo json_encode($output); mysqli_close($con);
> 
> ...


header('Content-type: text/html; charset=UTF-8') ;

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

----------


## mz6488

باز هم درست نشد.همون نتیجه رو میده.این کدی که گفتید رو بعد از دستور mysqli_set_charset($con,"U  TF8") گذاشتم

----------


## gilas1368

نمیدونم بیان این سوال اینجا درسته یا خیر
من میخوام بدونم غیز از JSON و HTML آیا میشه از سرویس خروجی های دیگ ای گرفت یا ن؟
اگ واضحتر بخوام بگم اینطوری میتونم بیان کنم ک دنبال روشی هستم ک سرعتش ب مراتب از گرفتن JSON بالاتر باشه

----------


## harani

> باز هم درست نشد.همون نتیجه رو میده.این کدی که گفتید رو بعد از دستور mysqli_set_charset($con,"U  TF8") گذاشتم


ببنید این حالت یونیکدی که است که برازر نشان میدهد در واقع داده های فارسی درست است و سمت کلاینت مشکلی در نمایش ندارد .




> نمیدونم بیان این سوال اینجا درسته یا خیر
> من میخوام بدونم غیز از JSON و HTML آیا میشه از سرویس خروجی های دیگ ای گرفت یا ن؟
> اگر واضحتر بخوام بگم اینطوری میتونم بیان کنم ک دنبال روشی هستم ک سرعتش ب مراتب از گرفتن JSON بالاتر باشه


اگر منظورتون از سرعت بحث ارائه خدمات وب سرویس ربطی به جیسون یا soap بودن نداره با آنکه هر کدوم مزیت و معایب خودشون رو دارن . نحوه ی کدنویسی در وب نوع سرور خدمات دهنده سرعت اینترنت همگی اینها در سرعت ثاتیر دارن .

اگه ام دارین چتینگ راه میاندازین اونم سرور چت میخواد و ارتباط از طریق سوکت و ای پی  .

----------


## gilas1368

> اگر منظورتون از سرعت بحث ارائه خدمات وب سرویس ربطی به جیسون یا soap بودن نداره با آنکه هر کدوم مزیت و معایب خودشون رو دارن . نحوه ی کدنویسی در وب نوع سرور خدمات دهنده سرعت اینترنت همگی اینها در سرعت ثاتیر دارن .
> 
> اگه ام دارین چتینگ راه میاندازین اونم سرور چت میخواد و ارتباط از طریق سوکت و ای پی  .



من دارم ی دیتای وحشتناک زیاد رو در قالب json میگیرم و میخوام ایناها رو توی دیتابیس ذخیره کنم
منظورم از زیاد ی چیزی نزدیک ب 5000 و بیشتر هستش
حالا من دوتا سوال دارم
یکی اینک سریعترین روش برای دخیره سازی این حجم دیتا در یتابیس SQLite چیه؟
و دوم اینک آیا امکان داره ب علت تراکنش های بالا روی دیتابیس Sqlite این دیتابیس Lock بشه یا پاسخ نده یا کرش بکنه؟

----------


## harani

5000 داده خیلی نیست اکثر برنامه های دیکشنری چیزی بیشتر از این عدد دارن و هیچی کرشی انجام نمیشه.

ببنید این بحث کد نویسی شماس . شما نبایستی همه ی 5000 داده رو یه جا نشون بدید حتما بایستی limit کنین یعنی داده ها رو 5 تا 5 تا یا 10 تا 10 تا و غیره نشون بدید .

----------


## gilas1368

> 5000 داده خیلی نیست اکثر برنامه های دیکشنری چیزی بیشتر از این عدد دارن و هیچی کرشی انجام نمیشه.
> 
> ببنید این بحث کد نویسی شماس . شما نبایستی همه ی 5000 داده رو یه جا نشون بدید حتما بایستی limit کنین یعنی داده ها رو 5 تا 5 تا یا 10 تا 10 تا و غیره نشون بدید .


آره حرفتون دسته، میدونم ک دیتا رو باید تکه تکه نمایش بدم
بحث نمایش دیتا نیست
من دیتا رو در قالب ی فایل JSON میگیرم و مشکلی هم ندارم اما گاها در زمانی ک میخوام این دیتا رو توی بانک ذخیره کنم با دو تا خطا مواجه میشم:
 یا ای خطا رو میده 
SQLiteDatabseLockedException: database is locked: , while compiling: PRAGMA journal_mode=TRUNCATE
و یا این خطا رو میده:
android.database.sqlite.SQLiteCantOpenDatabaseExce  ption: unable to open database file (code 14): , while compiling: PRAGMA journal_mode

و من دقیقا نمیدونم علت این خطاها چیه و چرا اتفاق میوفته

----------


## harani

من تا حالا چنین مشکلی پیدا  نکرده بودم شما بایستی درستی کانکشن خود را بررسی کنید . یه نکته هم برای شما هم برای سایر دوستان برای داده ها با حجم بالا بهتر است از ormlite استفاده شود ن sqllite هم سرعت بالاتری داره حتی از خود sqlite حجم کمتری داره .

----------


## c0mmander

> آره حرفتون دسته، میدونم ک دیتا رو باید تکه تکه نمایش بدم
> بحث نمایش دیتا نیست
> من دیتا رو در قالب ی فایل JSON میگیرم و مشکلی هم ندارم اما گاها در زمانی ک میخوام این دیتا رو توی بانک ذخیره کنم با دو تا خطا مواجه میشم:
>  یا ای خطا رو میده 
> SQLiteDatabseLockedException: database is locked: , while compiling: PRAGMA journal_mode=TRUNCATE
> و یا این خطا رو میده:
> android.database.sqlite.SQLiteCantOpenDatabaseExce  ption: unable to open database file (code 14): , while compiling: PRAGMA journal_mode
> 
> و من دقیقا نمیدونم علت این خطاها چیه و چرا اتفاق میوفته


این مشکل از اینکه در سری قبلی که دیتا بیس رو باز کردید (چه برای خوندن و چه برای نوشتن) دیتا بیس به درستی بسته نشده ولی شما دارید یک کانکشن جدید باز میکنید.

----------


## mz6488

سلام.من خروجی رو از سایت گرفتم .ولی اجازه ایجاد jasonArray رو نمیده.میگه خروجی که داری فرمتش json نیست.
این هم خروجی
[{"aid1":"1101-1-1","aid2":"1102-1-1"}]

----------


## mz6488

برنامه رو تریس کردم متوجه شدم که به اول رشته ] رو اضافه نمیکنه.ولی از طریق سایت خروجیش کاملا درسته.فعلا به اولش خودم یه ] اضافه کردم.این مشکل رو چجوری حلش کنم؟

----------


## harani

من خودم بارها با این مشکل برخورد داشتم برای اینکه برنامه هنگام پارس کردن به مشکل میخوره شما مجبورین دستی خودتون چک کنین :

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

if (!jsonArrayResponse.startWith("[")){
jsonArrayResponse="["+jsonArrayResponse;
}

if (!jsonArrayResponse.endWith("]")){
jsonArrayResponse=jsonArrayResponse+"]";
}

----------


## mz6488

با اجازه من کد زیر رو میذارم.از این کد استفاده کردم مشکلی نداشت

String StreamToString(InputStream in)
	{
		BufferedReader r = new BufferedReader(new InputStreamReader(in));
		StringBuilder total = new StringBuilder();
		String line;
		try
		{
			while ((line = r.readLine()) != null) {
			    total.append(line);
			}
			return total.toString();
		}
		catch (IOException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
			return "";
		}
		
	}

----------


## pbm_soy

سلام
کسی ميتون. درمورد ارسال فایل به همراه چند فیلد متنی و عددی  راهنمایی  کنه 
یعنی یک پست که انواع دادها را داشته باشد 
اغلب سرچ کردم اینا را جدا جدا پست کردن یا حداقل فایل را به تنهایی پست کرده 
چیزی که هست تو مثالها پارامترهای پست برای فایل و غیر فایل باهم در یک پست ست نکردن و باهم execut نکردن 
ممنون میشم اگه دوستان نظرشون را بگن

----------


## program2vb

با عرض سلام خدمت دوستان عزیز 

اینم فایل php برای آپلود کردن فایلهاتون .


<?php
$target_path1 = "uploads/";
/* Add the original filename to our target path.
Result is "uploads/filename.extension" */
$target_path1 = $target_path1 . basename( $_FILES['uploaded_file']['name']);
if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $target_path1)) {
    echo "The first file ".  basename( $_FILES['uploaded_file']['name']).
    " has been uploaded.";
} else{
    echo "There was an error uploading the file, please try again!";
    echo "filename: " .  basename( $_FILES['uploaded_file']['name']);
    echo "target_path: " .$target_path1;
}
?>


موفق و پیروز باشید در پناه حق . یاعلی

----------


## tara1367

سلام
ضمن تشکر فراوان از آموزش دقیق و خوب و آرزوی موفقیت.
من تمام آموزش رو دقیق دنبال کردم و متوجه شدم. اما مساله اینجاست که من قرار است برای یک شرکت که خودش وب سایت داره یک اپلیکیشن بنویسم. و وب رو با asp.net طراحی کردند. حالا من باید چه اطلاعاتی از اون ها بگیرم؟؟ ip سایتشون ، یوزر و پسوردشون؟؟
و با توجه به اینکه کل آموزشات شما بر مبنای php بوده من چگونه باید با سایت اون ها که با زبان asp.net نوشته شده، ارتباط برقرار کنم؟؟
با درود و سپاس فراوان

----------


## so2011

*باسلام,*من میخواهم از تعداد عکس های مختلف در پست هام  استفاده کنم و در  هرجایی در بین متن هام که می خوام نه به صورت پیش فرض در  قسمتی که  imageview قرار دادم.لطفا کمک کنیـد

----------


## singel

> *باسلام,*من میخواهم از تعداد عکس های مختلف در پست هام  استفاده کنم و در  هرجایی در بین متن هام که می خوام نه به صورت پیش فرض در  قسمتی که  imageview قرار دادم.لطفا کمک کنیـد


سلام من هم این مشکل را دارم  و این سوال من هم هست ، لطفا راهنمایی کنید

----------


## so2011

> سلام من هم این مشکل را دارم  و این سوال من هم هست ، لطفا راهنمایی کنید


درخواست کمک!!!
لطفا

----------


## tara1367

> سلام
> ضمن تشکر فراوان از آموزش دقیق و خوب و آرزوی موفقیت.
> من تمام آموزش رو دقیق دنبال کردم و متوجه شدم. اما مساله اینجاست که من قرار است برای یک شرکت که خودش وب سایت داره یک اپلیکیشن بنویسم. و وب رو با asp.net طراحی کردند. حالا من باید چه اطلاعاتی از اون ها بگیرم؟؟ ip سایتشون ، یوزر و پسوردشون؟؟
> و با توجه به اینکه کل آموزشات شما بر مبنای php بوده من چگونه باید با سایت اون ها که با زبان asp.net نوشته شده، ارتباط برقرار کنم؟؟
> با درود و سپاس فراوان



هیچ کس نمی تونه راهنمایی کنه؟؟

----------


## mohammada12

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

به عنوان مثال آدرس

 taskRead.execute(new String[]{"http://app.xzn.ir/show.php"}); 

webView1.loadUrl("http://app.xzn.ir"); 

به نظر شما مشکل از کجاست ، اگه از آدرس هست باید چه تغییری بکنه
دوستان کسی به این مشکل بر نخورده - مرسی

----------


## yasinpuladi

واقعا ممنون بابت این پکیج عالی

----------


## Amin-rz

من یه دیتابیس تو سی پنل سایتم ساختم.با یوزر و پسورد جهت دسترسی.
ولی از کجا باید آدرس (url)دیتابیسو بدست بیارم تا تو برنامم بذارم؟

----------


## hassanmosavi

با سلام و خسته نباشید
برنامه من HttpClient client = new DefaultHttpClient();
رو نمیشناسه و خطا میده با اینپور و... راه نیوفتاد
کتاب خونه ش رو از کجا باید بگیرم و چطور اضافه کنم
من از اندروید استدیو استفاده میکنم.
با تشکر

----------


## loo30fer

بیاین روی HttpClient و دکمه ترکیبی ALT + Enter فشار بدین خودش کتابخانش رو اضافه میکنه

----------


## hassanmosavi

> بیاین روی HttpClient و دکمه ترکیبی ALT + Enter فشار بدین خودش کتابخانش رو اضافه میکنه


نمیشه مهندس
از اون کارا گذشته
اصلا نمیشناسه

----------


## Nevercom

کلاس HttpClient در API 23 به کلی حذف شده
http://developer.android.com/about/v...he-http-client

همونطور که در لینک بالا توضیح داده شده، بجای اون از HttpUrlConnection استفاده استفاده کنید.

اگر هنوز می خواید از HttpClient استفاده کنید، دو راه دارید
پروژه تون رو با API 22 کامپایل کنیداین عبارت رو به build.gradle اضافه کنید:


android {
    useLibrary 'org.apache.http.legacy'
}

----------


## harani

> کلاس HttpClient در API 23 به کلی حذف شده
> http://developer.android.com/about/v...he-http-client
> 
> همونطور که در لینک بالا توضیح داده شده، بجای اون از HttpUrlConnection استفاده استفاده کنید.
> 
> اگر هنوز می خواید از HttpClient استفاده کنید، دو راه دارید
> پروژه تون رو با API 22 کامپایل کنیداین عبارت رو به build.gradle اضافه کنید: 
> 
> android {
> ...


 :تشویق:  :تشویق:  :تشویق:  :تشویق:  :تشویق:

----------


## hassanmosavi

ممنون مهندس
چک میکنم

----------


## siamak_derakhshany

سلام. با تشکر از مطالب خوبتون. من تاره با این سایت اشنا شدم. مطالب این تاپیک رو خوندم و مرحله به مرحله می خوام پیش برم.
ایکن wamp server  سبز رنگه و صفحه مدیریتش با تایپ localhost بالا میاد .در همون ابتدای کار  متاسفانه بعد از کلیک روی نام وبسایتم در wamp server  با پیام Server not  found مواجه میشم. ایراد کار کجاست؟ پیشاپیش از راهنماییتون سپاسگزارم.

----------


## hassanmosavi

از تنظیمات ومپ هست
یک راهش اینه ومپ رو دوباره نصب کنی
یه راهش اینه
ادرس رو دستی بنویسی
localhost/test
test اسم وب سایت هست

----------


## harani

دوستان من سلام .
خیلی از کدهای گفته شده در اندروید و هم php جدید تقریبا منسوخ شده اند شما میتوانید برای موارد جدیدتر از مفاهیم زیر استفاده کنید .
 ۱- استفاده از HttpUrlConnection / HttpsUrlConnection
2- استفاده از کتابخانه volley
3- استفاده از کتابخانه retrofit
۴- استفاده از کتابخانه ساده و سربع *Fast-Android-Networking* 

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

----------


## harani

> ضمن تشکر از harani عزیز بابت آموزش بسیار خوبش من هنوز موفق به دریافت اطلاعات از سرور نشدم و ارور میده(جلسه ششم قسمت اول)
> میشه راجع به thread هم توضیح بدهید من نمی دونم مشکل از کجاست؟؟
> [2014-08-31 10:34:06 - telbook] ActivityManager: Warning: Activity not started, its current task has been brought to the front



سلام این لینک ها را مشاهده فرمایید با تشکر


http://www.aparat.com/v/EtuLm

www.servicerayaneh.ir/joomla-pages/آموزش-برنامه-نویسی-اندروید/229-استفاده-مطمئن-از-کلاس-asynctask.html

http://www.tahlildadeh.com/ArticleDe...nchTask-Loader

----------

