Android cliente para comunicarse con el PHP del lado del servidor (b) --- interacción JSON

contorno

    En esta sección se ofrece un programa de demostración sencilla introdujo un simple cliente de Android somete una orden al servidor a través de PHP JSON, servidor de post-procesamiento de órdenes de PHP, devuelve los resultados al cliente de Android a través de JSON. Ahora, normalmente, el servidor de PHP para procesar los pedidos en proceso, la necesidad de interactuar con la base de datos MySQL, aquí por simplicidad, Guardar temporalmente MySQL.

formato de comunicación

En primer lugar, la necesidad de establecer el formato de comunicación entre el cliente y el servidor, la siguiente tabla


Android cliente

    El cliente y el servidor se comunican utilizando el formato de datos JSON, durante el uso de la interacción protocolo de comunicación HTTP, usando el método POST para enviar los resultados. También tenga en cuenta que el proceso de comunicación con otras necesidades servidor web para abrir un hilo para la adquisición de datos, que pueden prevenir Después de adquirir el programa falla, el hilo principal puede correr, comenzó a experimentar cuando no se tiene noticia de esto, debido a un fallo en las comunicaciones causado el programa para dejar de correr.

    Al mismo tiempo, debido a la necesidad de comunicación de la red, tenemos que añadir los siguientes permisos de instrucción en AndroidManifest.xml


<Usos permiso-android: name = "android.permission.INTERNET" />

<Usos permiso-android: name = "android.permission.ACCESS_NETWORK_STATE" />

    Figura procedimiento es estructura relativamente simple, solamente un MainActivity.java.


    Resultados de operación para el


MainActivity.java sigue

package com.lygk.jsontest;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.protocol.HTTP;
import org.json.JSONObject;

import com.example.jsontest.R;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {
    
	private static final String TAG="LYGK";
	Button BtnRequest;
	
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Log.i(TAG, "启动程序 ");
		BtnRequest = (Button)findViewById(R.id.BtnRequest);
		//绑定事件源和监听器对象
		BtnRequest.setOnClickListener(new ButtonRequestListener());
	}
	
	//内部类,实现OnClickListener接口
    //作为第二个按钮的监听器类
    class ButtonRequestListener implements OnClickListener
    {
        public void onClick(View v)
        {        	
        	Log.i(TAG, "按钮按下 ");
        	StartRequestFromPHP();
        	Log.i(TAG, "执行完毕 ");
        }

    }
    
    private void StartRequestFromPHP() 
    { 
    	//新建线程
    	new Thread(){
    		public void run(){

    			try { 
    				SendRequest();  				
    			} catch (Exception e) { 
    				e.printStackTrace(); 
    			} 
    		}
    	}.start();
    }
    
    private  void SendRequest(){
    	//通过HttpClient类与WEB服务器交互
    	HttpClient httpClient = new DefaultHttpClient();
    	//定义与服务器交互的地址
        String ServerUrl = "http://www.bigbearking.com/study/guestRequest.php";
        //设置读取超时,注意CONNECTION_TIMEOUT和SO_TIMEOUT的区别
        httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 5000);
        //设置读取超时
        httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 5000);
        //POST方式
        HttpPost httpRequst = new HttpPost(ServerUrl);        
        //准备传输的数据
        List<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>();
                
        params.add(new BasicNameValuePair("CMDID", "1"));
        params.add(new BasicNameValuePair("CUserName", "lygk"));
        params.add(new BasicNameValuePair("COrderName", "Apple"));
        params.add(new BasicNameValuePair("COrderNum", "2"));
        
        try{
        	//发送请求
            httpRequst.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
            //得到响应
            HttpResponse response = httpClient.execute(httpRequst);            
            //返回值如果为200的话则证明成功的得到了数据
            if(response.getStatusLine().getStatusCode() == 200)
            {
                      StringBuilder builder = new StringBuilder();                      
                      //将得到的数据进行解析
                      BufferedReader buffer = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
                      //readLine()阻塞读取
                      for(String s =buffer.readLine(); s!= null; s = buffer.readLine())
                      {
                    	  builder.append(s);                               
                      }
                      
                      System.out.println(builder.toString());
                      //得到Json对象
                      JSONObject jsonObject   = new JSONObject(builder.toString());
                      
                      //通过得到键值对的方式得到值
                     int CmdId = jsonObject.getInt("CMDID");
                     String SResult = jsonObject.getString("SResult");
                     String SUserName = jsonObject.getString("SUserName");
                     int SResultPara = jsonObject.getInt("SResultPara");

                     Log.i(TAG, "读取到数据 ");
                     Log.i(TAG, "RequestResult:"+SResult);
                     Log.i(TAG, "UserName:"+SUserName);
                     //在线程中判断是否得到成功从服务器得到数据
                                         
            }
            else{
            	Log.e(TAG, "连接超时 ");
            }
        }catch (Exception e)
        {
            e.printStackTrace();
            Log.e(TAG, "请求错误 ");
            Log.e(TAG, e.getMessage());
        }

    	return ;
    }

}


código fuente del servidor Web

guestRequest.php contenido:

<?php
	
	//获取客户端发来的请求信息
	$CmdId = $_POST['CMDID'];
	$UserName = $_POST['CUserName'];
	$OrderName = $_POST['COrderName'];
	
	
	if($UserName != 'lygk')
	{
		$result = 'Fail';
		$resultpara = 2;
		//将数据存储到数据中
		$arr = array(			
			'CMDID' => $CmdId,
			'SUserName' => $UserName,
			'SResult'=>$result,
			'SResultPara' =>$resultpara
			);
				//将数组转成json格式进行传递
		$strr = json_encode($arr);
	}
	else
	{
		$result = 'Success';
		$resultpara = 1;
		//将数据存储到数据中
		$arr = array(			
			'CMDID' => $CmdId,
			'SUserName' => $UserName,
			'SResult'=>$result,
			'SResultPara' =>$resultpara
			);
				//将数组转成json格式进行传递
		$strr = json_encode($arr);
	}

	echo($strr);

?>

    Ejecutar el software, haga clic en el botón "Enviar Solicitud", se puede ver información acerca del funcionamiento de LogCat, el servidor web ha procesado con éxito la respuesta de solicitud enviada por el cliente de Android.


fin

    En este capítulo se describe la interacción con el cliente de Android y el servidor WEB, que se adjunta a la fuente más, encontramos menos sobre principios, uno de los cuales los detalles, revise junio propio gusto. Android de código de origen del cliente, haga clic aquí para descargar

/ ************************************************* ************************************************** **

* Artículo original, reproduce, por favor indique la URL: http: //blog.csdn.net/mybelief321/article/details/45423143

* Lu Yang Tech Estudios

* Sitio web: www.bigbearking.com

* La cooperación empresarial QQ: 1519190237

Alcance del servicio: obras de construcción, el desarrollo de software de escritorio, el desarrollo de Android \ IOS, el procesamiento posterior de las imágenes de cine y televisión, diseño de PCB

************************************************** ************************************************** /


Publicados 143 artículos originales · ganado elogios 161 · Vistas 1,21 millones +

Supongo que te gusta

Origin blog.csdn.net/mybelief321/article/details/45423143
Recomendado
Clasificación