Android之利用HTTP网络通信实现与PHP的交互(三)
Android与PHP的交互是通过Http网络编程来实现的,利用php访问数据库,并且操作数据库中的数据,利用php作为接口,使Android连接数据库。
一般情况下,我们使用Json格式进行传输,利用php将数据封装为Json的形式,然后再Android上面在对Json数据进行解析。将解析好的数据显示在手机上。
为了跟前两篇的进行对接,我这篇博文就不给大家展示Json数据的解析了,等到下篇的时候我给大家讲一下Json数据的解析,以及怎么样将数据部署在布局文件中,我这次只是将获取到的Json数据显示在TextView中。为了方便大家观察,我这里设置了两个TextView进行对比,一个部署上数据,另一个是本地的数据。并且,通过跳转的方式实现。
效果图如下:
A:
B:
C:
操作步骤:
首先打开软件,然后点击提交跳转到另一个界面中进行显示数据。显示的直接是Json数据,并没有对其进行解析。
Java代码:
MainActivity:
1 package com.example.testregister; 2 3 4 import android.app.Activity; 5 import android.content.Intent; 6 import android.os.Bundle; 7 import android.view.View; 8 import android.view.View.OnClickListener; 9 import android.widget.Button; 10 import android.widget.EditText; 11 12 public class MainActivity extends Activity{ 13 14 private Button btn; 15 16 @Override 17 protected void onCreate(Bundle savedInstanceState) { 18 super.onCreate(savedInstanceState); 19 setContentView(R.layout.activity_main); 20 21 btn = (Button) findViewById(R.id.btn_tijao); 22 23 btn.setOnClickListener(new OnClickListener() { 24 25 @Override 26 public void onClick(View v) { 27 28 Intent intent = new Intent(getApplicationContext(),ShowTest.class); 29 startActivity(intent); 30 } 31 }); 32 } 33 34 35 36 }
布局文件activity_main.xml:
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:id="@+id/LinearLayout1" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 android:orientation="vertical" 7 tools:context=".MainActivity" > 8 9 <TextView 10 android:layout_width="wrap_content" 11 android:layout_height="wrap_content" 12 android:text="@string/hello_world" /> 13 14 <Button 15 android:id="@+id/btn_tijao" 16 android:layout_width="fill_parent" 17 android:layout_height="wrap_content" 18 android:text="提交" /> 19 20 </LinearLayout>
第二个界面ShowTest:
1 package com.example.testregister; 2 3 import android.app.Activity; 4 import android.os.Bundle; 5 import android.widget.TextView; 6 7 import com.example.interfaceHttp.HttpGetListener; 8 import com.example.service.HttpGetData; 9 10 public class ShowTest extends Activity implements HttpGetListener{ 11 12 private TextView textv1; 13 private TextView textv2; 14 15 //我的本地服务器的接口,如果在你自己的服务器上需要更改相应的url 16 private String url ="http://10.17.64.85:8080/testregister/JSONPars.php"; 17 18 private HttpGetData mhttpgetdata; 19 20 21 @Override 22 protected void onCreate(Bundle savedInstanceState) { 23 // TODO Auto-generated method stub 24 super.onCreate(savedInstanceState); 25 setContentView(R.layout.activitytwo); 26 mhttpgetdata = (HttpGetData) new HttpGetData(url,this).execute(); 27 textv1 = (TextView) findViewById(R.id.tv1); 28 textv2 = (TextView) findViewById(R.id.tv2); 29 30 31 } 32 33 34 @Override 35 public void GetDataUrl(String data) { 36 // TODO Auto-generated method stub 37 System.out.println(data); 38 textv1.setText(data); 39 40 } 41 42 }
第二个布局 activitytwo.xml:
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:orientation="vertical" > 6 7 <TextView 8 android:id="@+id/tv1" 9 android:layout_width="fill_parent" 10 android:layout_height="wrap_content" 11 android:text="ready..." /> 12 13 <TextView 14 android:id="@+id/tv2" 15 android:layout_width="fill_parent" 16 android:layout_height="wrap_content" 17 android:text="ready..." /> 18 19 </LinearLayout>
接下来就是利用HTTP进行网络的处理,这里使用的是get请求,这些代码我在http://www.cnblogs.com/bingbingliang-xiaomonv/p/5247223.html这篇文章中给大家讲过:
HttpGetData:
1 package com.example.service; 2 3 import java.io.BufferedReader; 4 import java.io.InputStream; 5 import java.io.InputStreamReader; 6 7 import org.apache.http.HttpEntity; 8 import org.apache.http.HttpResponse; 9 import org.apache.http.client.HttpClient; 10 import org.apache.http.client.methods.HttpGet; 11 import org.apache.http.impl.client.DefaultHttpClient; 12 13 import android.os.AsyncTask; 14 15 import com.example.interfaceHttp.HttpGetListener; 16 17 public class HttpGetData extends AsyncTask<String, Void, String>{ 18 19 private HttpClient mhttpclient; 20 private HttpGet mhttpget; 21 private HttpResponse mhttpResponse; 22 private HttpEntity mHttpEntity; 23 private InputStream in; 24 private StringBuffer sb; 25 26 27 28 29 //声明url变量 30 private String url; 31 //声明接口 32 private HttpGetListener listener; 33 34 public HttpGetData(){ 35 } 36 37 public HttpGetData(String url){ 38 this.url = url; 39 } 40 41 public HttpGetData(String url,HttpGetListener listener){ 42 this.url = url; 43 this.listener = listener; 44 } 45 46 /** 47 * 写后台需要执行的程序 48 */ 49 @Override 50 protected String doInBackground(String... params) { 51 52 try{ 53 //首先创建一个客户端实例 54 mhttpclient = new DefaultHttpClient(); 55 //设置传递的方法 56 mhttpget = new HttpGet(url); 57 //通过客户端进行发送 58 mhttpResponse = mhttpclient.execute(mhttpget); 59 //通过HttpResponse获取方法体 60 mHttpEntity = mhttpResponse.getEntity(); 61 //通过流获取具体的内容 62 in = mHttpEntity.getContent(); 63 //创建缓冲区 64 BufferedReader br = new BufferedReader(new InputStreamReader(in)); 65 sb = new StringBuffer(); 66 String line = null; 67 while((line = br.readLine())!= null){ 68 sb.append(line); 69 } 70 return sb.toString(); 71 72 73 }catch(Exception e){ 74 e.printStackTrace(); 75 } 76 77 return null; 78 } 79 80 @Override 81 protected void onPostExecute(String result) { 82 // TODO Auto-generated method stub 83 listener.GetDataUrl(result); 84 super.onPostExecute(result); 85 } 86 87 }
为了使更多的类方便的使用,实现了这个接口HttpGetListener:
1 package com.example.interfaceHttp; 2 3 public interface HttpGetListener { 4 void GetDataUrl(String data); 5 }
好了,这就是基本的Android端的代码了,比较简单,关于HTTP网络通信这一块不是很懂得话,建议参照http://www.cnblogs.com/bingbingliang-xiaomonv/p/5247223.html
注意:
在跳转的时候需要给Activity进行配置
配置文件如下:
1 <activity 2 android:name = "com.example.testregister.ShowTest"> 3 <intent-filter > 4 <action android:name="android.intent.action.VIEW" /> 5 6 <category android:name="android.intent.category.DEFAULT"/> 7 8 </intent-filter> 9 </activity>
因为涉及到网络的交互,所以还需要添加网络条件,在配置文件中配置:
1 <uses-permission android:name="android.permission.INTERNET" />
在讲php实现接口的时候,我先给大家看一下我的本地的数据库以及里面的数据
数据库:
添加的数据:
PHP代码:
首先先建立一个数据库的文件Conn.php
1 <?php 2 //连接本地数据库localhost以及数据库账户root密码为空 3 $con = mysql_connect("localhost","root",""); 4 5 //设置字符集 6 mysql_query("SET NAMES 'utf8'"); 7 mysql_query("SET CHARACTER SET utf8"); 8 9 if(!$con){ 10 die(mysql_error()); 11 } 12 mysql_select_db("testregister",$con); 13 // echo "测试成功"; 14 15 ?>
访问数据库php代码的简单实现JSONPars.php:
1 <?php 2 //用于连接文件 3 require 'Conn.php'; 4 5 //按照倒叙的顺序输出 6 $result = mysql_query("SELECT nickname,password FROM test_register ORDER BY user_id DESC"); 7 // $array = mysql_fetch_assoc($result); 8 //计算数据的条数 9 $num = mysql_num_rows($result); 10 //列出新添加的数据是在上面向下输出,如果$i<3,只是输出前三项 11 for($i=0;$i<$num;$i++){ 12 // print_r($array); 13 echo json_encode(mysql_fetch_assoc($result)); 14 } 15 16 ?>
对于上面的PHP代码进行测试,看是否成功,如果出现下面的效果图,就是成功,如果没有则会显示错误
效果图如下:
到这里基本的实现就已经完成了,如果大家有什么不懂得或者我的这篇文章有什么不好(不对)的地方,欢迎大家留言,我一定会在第一时间回复。