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:
<?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:
Localhost androidda 10.0.2.2
List massivini params obyektini yaratamiz va uning tipini NameValuepair qilib belgilaymiz.
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.
natijasi
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 комментария