Rest api va android client. 1-qism
Xayrli kun!
Bilamizki ko’pgina applar internet tarmog’I bilan birgalikda ishlaydi. Buni biz client server applar toifasiga kiritamiz. Ushbu maqolamizda Client Server ko’rinishidagi app yaratamiz.
Keling bo’lajak yaratilaydigan appimiz haqida qisqacha tushuncha olaylikda amalyotga o’taylik. Aytaylik saytimizda aksiya ketmoqda. Ayni shu aksiyada qatnashish uchun client appimiz orqali ro’yxatdan o’tsin. Ro’yxatdan o’tishda u ismi, familiyasi, telefon nomeri, emaili ni kiritsin.
Demak ushbu appni yozishimiz uchun server kerak bo’ladi va ushbu serverimizni php da yozamiz.
Server qismiga quydagicha talablarni qo’yamiz.
1. http post orqali ma’lumotlarni olsin.
2. Olingan ma’lumotlarni mysql bazaga saqlab borilsin
3. Post orqali yuborilgan ma’lumotlarni ma’lumotlar bazasiga saqlanganligi haqida json orqali javob qaytsin.
Client qismiga qo’yiladigan talablar:
1. Post orqali familiya, ism, tel, email larni junatsin.
2. Post so’rovining natijasini toast orqali ko’rsatsin.
3. Listbox bo’lsin va list boxga userlar ro’yxatini chiqarsin.
Server qismini yoazamiz.
db.php:
Add.php
Users jadvali:
Yuqoridagi php kodimizda hosil bo’layotgan appimizning server qismiga ma’lumotlarni bazaga qo’shishni ko’rdik.
Client qismida ma’lumotlarni junatishni ko’rib chiqamiz.
Yangi loyiha hosil qilamiz:
Application name: HttpPost_get
Project Name: HttpPost_get
Package Name: uz.projects.httppost_get
Target SDK: API 17 Android 4.2(Jelly Bean)
Create Activity: MainActivity
Activity_main.xml
MainActivity.java ga o’tamiz va u yerda Button(Junatish uchun), EditText(Familiya, Ism, Tel, Emailni kiritish uchun), TextView(Server qismidan kelgan xabarni chiqarish uchun) obyektlarini yaratib olamiz.
View elementlar bilan birlashtiramiz.
Ma’lumotlarni yuborish uchun post_metod() metodini yaratamiz.
Yozgan kodimizni mulohaza qilaylik:
Http protokolidan foydalanishimiz uchun HttpClient classining obyektini yaratib olamiz.
Http protokolining post metodidan foydalanishimiz uchun HttpPost classining obyektini yaratamiz va uning konstruktirida 3 ta (bush, uri classi obyekti, string) kiruvchi parametric bor va biz string kiruvchi parametiridan foydalanib post so’rovning manzilini ko’rsatamiz.
List massiv obyektimizning add metoddiga BasicNameValuePair classi orqali postimizni nomi va qiymatini belgilaymiz.
HttpPost obyektimizning setEntity metodi orqali List obyektimizniUTF-8 kodirovkasiga o’tkazib post so’rovni yuboramiz.
HttpResponse classimizning obyektini yaratib uning qiymatiga HttpClient classimizning obyektini execute metodiga httppost obyektimizni ko’rsatib so’rovimizning javobini olamiz.
Httpdan kelgan habarlar bilan ishlashimiz uchun HttpEntity classimizning obyektini yaratib unga qiymat qilib HttpResponse obyektimizning getEntity() metodini qiymat qilib beramiz.
Xabarni chiqarishimiz uchun String tipiga o’girib olishimiz kerak bo’ladi va biz string tipidagi xabar o’zgaruvchisini e’lon qilamiz.
Agar HttpEntity classimizning obyekti bo’sh bo’lmasa EntityUtils orqali string turuga o’girib xabar o’zgaruvchimizga qiymat qilib beramiz.
Button tugmasini onclick hodisasini yaratamiz. OnClick hodisasini yaratishni Android darslarimizda keltirganmiz.
Mana maqolamizning birinchi qismiga qo’yilgan talablarni bajardik endi AVD da test qilib ko’ramiz.

Full code:
Source ni yuklab olish
Bilamizki ko’pgina applar internet tarmog’I bilan birgalikda ishlaydi. Buni biz client server applar toifasiga kiritamiz. Ushbu maqolamizda Client Server ko’rinishidagi app yaratamiz.
Keling bo’lajak yaratilaydigan appimiz haqida qisqacha tushuncha olaylikda amalyotga o’taylik. Aytaylik saytimizda aksiya ketmoqda. Ayni shu aksiyada qatnashish uchun client appimiz orqali ro’yxatdan o’tsin. Ro’yxatdan o’tishda u ismi, familiyasi, telefon nomeri, emaili ni kiritsin.
Demak ushbu appni yozishimiz uchun server kerak bo’ladi va ushbu serverimizni php da yozamiz.
Server qismiga quydagicha talablarni qo’yamiz.
1. http post orqali ma’lumotlarni olsin.
2. Olingan ma’lumotlarni mysql bazaga saqlab borilsin
3. Post orqali yuborilgan ma’lumotlarni ma’lumotlar bazasiga saqlanganligi haqida json orqali javob qaytsin.
Client qismiga qo’yiladigan talablar:
1. Post orqali familiya, ism, tel, email larni junatsin.
2. Post so’rovining natijasini toast orqali ko’rsatsin.
3. Listbox bo’lsin va list boxga userlar ro’yxatini chiqarsin.
Server qismini yoazamiz.
db.php:
<?php
$db=mysql_connect("localhost", "root", "");
mysql_select_db("android", $db) or die("bog'lanishda xato");
?>
Add.php
<?php
if(isset($_POST['lostname']))
{
$surname=$_POST['lostname'];
$firstname=$_POST['firstname'];
$tel=$_POST['tel'];
$email=$_POST['email'];
include 'db.php';
$query="INSERT INTO users(surname, first_name, tel, email) VALUES ('$surname', '$firstname', '$tel', '$email')";
if(mysql_query($query, $db))
{
echo "Muffaqiyatli qo'shildi";
}else
{
echo mysql_error($db);
}
}
else
{
echo "Kechirasiz :(((((";
}
?>
Users jadvali:
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`surname` varchar(255) NOT NULL,
`first_name` varchar(255) NOT NULL,
`tel` varchar(15) NOT NULL,
`email` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ;
Yuqoridagi php kodimizda hosil bo’layotgan appimizning server qismiga ma’lumotlarni bazaga qo’shishni ko’rdik.
Client qismida ma’lumotlarni junatishni ko’rib chiqamiz.
Yangi loyiha hosil qilamiz:
Application name: HttpPost_get
Project Name: HttpPost_get
Package Name: uz.projects.httppost_get
Target SDK: API 17 Android 4.2(Jelly Bean)
Create Activity: MainActivity
Activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<TextView
android:id="@+id/status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/button1"
android:layout_alignLeft="@+id/button1"
android:layout_alignRight="@+id/button1"
android:layout_marginBottom="16dp"
android:text="Status" />
<EditText
android:id="@+id/firstname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/surname"
android:layout_below="@+id/surname"
android:layout_marginTop="20dp"
android:ems="10" >
<requestFocus />
</EditText>
<EditText
android:id="@+id/phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/firstname"
android:layout_below="@+id/firstname"
android:layout_marginTop="16dp"
android:ems="10"
android:inputType="phone" />
<EditText
android:id="@+id/email"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/phone"
android:layout_below="@+id/phone"
android:layout_marginTop="22dp"
android:ems="10"
android:inputType="textEmailAddress" />
<EditText
android:id="@+id/surname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="24dp"
android:layout_marginTop="21dp"
android:ems="10" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/email"
android:layout_alignParentBottom="true"
android:layout_marginBottom="17dp"
android:layout_marginLeft="67dp"
android:text="Junat" />
</RelativeLayout>
MainActivity.java ga o’tamiz va u yerda Button(Junatish uchun), EditText(Familiya, Ism, Tel, Emailni kiritish uchun), TextView(Server qismidan kelgan xabarni chiqarish uchun) obyektlarini yaratib olamiz.
Button btn;// yuborish
TextView tv;//statusni ko'rsatish
EditText surname;//familiya
EditText fristname;//ism
EditText tel;//telefon raqam
EditText email;//emaili
View elementlar bilan birlashtiramiz.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
surname=(EditText)findViewById(R.id.surname);
fristname=(EditText)findViewById(R.id.firstname);
email=(EditText)findViewById(R.id.email);
tel=(EditText)findViewById(R.id.phone);
btn=(Button)findViewById(R.id.button1);
tv=(TextView)findViewById(R.id.status);
btn.setOnClickListener(this);
}
Ma’lumotlarni yuborish uchun post_metod() metodini yaratamiz.
public void post_metod()
{
try{
HttpClient htclient=new DefaultHttpClient();
HttpPost htpost=new HttpPost("http://10.0.2.2/user/add.php");
List<NameValuePair> params=new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("lostname", surname.getText().toString()));
params.add(new BasicNameValuePair("firstname", fristname.getText().toString()));
params.add(new BasicNameValuePair("tel", tel.getText().toString()));
params.add(new BasicNameValuePair("email", email.getText().toString()));
htpost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
HttpResponse respon=htclient.execute(htpost);
HttpEntity ent=respon.getEntity();
String dilshod="";
if(ent!=null)
{
dilshod=EntityUtils.toString(ent);
}
tv.setText(dilshod);
Toast.makeText(this, xabar, Toast.LENGTH_LONG).show();
}
catch(Exception ex)
{
tv.setText(ex.toString());
Log.d("Dilshod", ex.toString());
}
}
Yozgan kodimizni mulohaza qilaylik:
Http protokolidan foydalanishimiz uchun HttpClient classining obyektini yaratib olamiz.
HttpClient htclient=new DefaultHttpClient();
Http protokolining post metodidan foydalanishimiz uchun HttpPost classining obyektini yaratamiz va uning konstruktirida 3 ta (bush, uri classi obyekti, string) kiruvchi parametric bor va biz string kiruvchi parametiridan foydalanib post so’rovning manzilini ko’rsatamiz.
HttpPost htpost=new HttpPost("http://10.0.2.2/user/add.php");
Eslatma:List massivini params obyektini yaratamiz va uning tipini NameValuepair qilib belgilaymiz.
Localhost androidda 10.0.2.2
List<NameValuePair> params=new ArrayList<NameValuePair>();
List massiv obyektimizning add metoddiga BasicNameValuePair classi orqali postimizni nomi va qiymatini belgilaymiz.
params.add(new BasicNameValuePair("lostname", surname.getText().toString()));
params.add(new BasicNameValuePair("firstname", fristname.getText().toString()));
params.add(new BasicNameValuePair("tel", tel.getText().toString()));
params.add(new BasicNameValuePair("email", email.getText().toString()));
HttpPost obyektimizning setEntity metodi orqali List obyektimizniUTF-8 kodirovkasiga o’tkazib post so’rovni yuboramiz.
htpost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
HttpResponse classimizning obyektini yaratib uning qiymatiga HttpClient classimizning obyektini execute metodiga httppost obyektimizni ko’rsatib so’rovimizning javobini olamiz.
HttpResponse respon=htclient.execute(htpost);
Httpdan kelgan habarlar bilan ishlashimiz uchun HttpEntity classimizning obyektini yaratib unga qiymat qilib HttpResponse obyektimizning getEntity() metodini qiymat qilib beramiz.
HttpEntity ent=respon.getEntity();
Xabarni chiqarishimiz uchun String tipiga o’girib olishimiz kerak bo’ladi va biz string tipidagi xabar o’zgaruvchisini e’lon qilamiz.
String xabar="";
Agar HttpEntity classimizning obyekti bo’sh bo’lmasa EntityUtils orqali string turuga o’girib xabar o’zgaruvchimizga qiymat qilib beramiz.
if(ent!=null)
{
xabar=EntityUtils.toString(ent);
}
Kelgan xabarni <strong>TextView</strong> elementiga chiqaramiz.
<code>tv.setText(xabar);<code>
<strong>Toast</strong> orqaliy chiqarish:
<code>Toast.makeText(this, xabar, Toast.LENGTH_LONG).show();
Button tugmasini onclick hodisasini yaratamiz. OnClick hodisasini yaratishni Android darslarimizda keltirganmiz.
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId())
{
case R.id.button1 :
post_metod();
break;
}
}
Mana maqolamizning birinchi qismiga qo’yilgan talablarni bajardik endi AVD da test qilib ko’ramiz.

Full code:
package uz.projects.httppost_get;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity implements OnClickListener {
Button btn;// yuborish
TextView tv;//statusni ko'rsatish
EditText surname;//familiya
EditText fristname;//ism
EditText tel;//telefon raqam
EditText email;//emaili
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
surname=(EditText)findViewById(R.id.surname);
fristname=(EditText)findViewById(R.id.firstname);
email=(EditText)findViewById(R.id.email);
tel=(EditText)findViewById(R.id.phone);
btn=(Button)findViewById(R.id.button1);
tv=(TextView)findViewById(R.id.status);
btn.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId())
{
case R.id.button1 :
post_metod();
break;
}
}
public void post_metod()
{
try{
tv.setText("get");
HttpClient htclient=new DefaultHttpClient();
HttpPost htpost=new HttpPost("http://10.0.2.2/user/add.php");
List<NameValuePair> params=new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("lostname", surname.getText().toString()));
params.add(new BasicNameValuePair("firstname", fristname.getText().toString()));
params.add(new BasicNameValuePair("tel", tel.getText().toString()));
params.add(new BasicNameValuePair("email", email.getText().toString()));
htpost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
HttpResponse respon=htclient.execute(htpost);
HttpEntity ent=respon.getEntity();
String xabar="";
if(ent!=null)
{
xabar=EntityUtils.toString(ent);
}
tv.setText(xabar);
Toast.makeText(this, xabar, Toast.LENGTH_LONG).show();
}
catch(Exception ex)
{
tv.setText(ex.toString());
Log.d("Dilshod", ex.toString());
}
}
}
Source ni yuklab olish
2 комментария