Android与PHP的交互是通过Http网络编程来实现的,利用php访问数据库,并且操作数据库中的数据,利用php作为接口,使Android连接数据库。

 一般情况下,我们使用Json格式进行传输,利用php将数据封装为Json的形式,然后再Android上面在对Json数据进行解析。将解析好的数据显示在手机上。

为了跟前两篇的进行对接,我这篇博文就不给大家展示Json数据的解析了,等到下篇的时候我给大家讲一下Json数据的解析,以及怎么样将数据部署在布局文件中,我这次只是将获取到的Json数据显示在TextView中。为了方便大家观察,我这里设置了两个TextView进行对比,一个部署上数据,另一个是本地的数据。并且,通过跳转的方式实现。

  效果图如下:

  A:

  Android之利用HTTP网络通信实现与PHP的交互(三)_第1张图片

  B:

  

  C:

  Android之利用HTTP网络通信实现与PHP的交互(三)_第2张图片

  操作步骤:

  首先打开软件,然后点击提交跳转到另一个界面中进行显示数据。显示的直接是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     @Override17     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             @Override26             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     <TextView10         android:layout_width="wrap_content"11         android:layout_height="wrap_content"12         android:text="@string/hello_world" />13 14     <Button15         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     //我的本地服务器的接口,如果在你自己的服务器上需要更改相应的url16     private String url ="http://10.17.64.85:8080/testregister/JSONPars.php";17     18     private HttpGetData mhttpgetdata;19     20     21     @Override22     protected void onCreate(Bundle savedInstanceState) {23         // TODO Auto-generated method stub24         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     @Override35     public void GetDataUrl(String data) {36         // TODO Auto-generated method stub37         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     <TextView14         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     @Override50     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     @Override81     protected void onPostExecute(String result) {82         // TODO Auto-generated method stub83         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实现接口的时候,我先给大家看一下我的本地的数据库以及里面的数据

数据库:

Android之利用HTTP网络通信实现与PHP的交互(三)_第3张图片

添加的数据:

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代码进行测试,看是否成功,如果出现下面的效果图,就是成功,如果没有则会显示错误

效果图如下:

到这里基本的实现就已经完成了,如果大家有什么不懂得或者我的这篇文章有什么不好(不对)的地方,欢迎大家留言,我一定会在第一时间回复。

更多相关文章

  1. Android源代码调试环境搭建
  2. 第五章 以数据为中心—数据存取(1)
  3. Android获取设备IP地址代码与分析
  4. Android 上的 Scala, 实战之路(三)——介个是数据库接口?
  5. android ui线程和数据的分离
  6. Android 数据缓存-文件存储
  7. 【Android】利用Java代码布局,按钮添加点击事件
  8. android 保存Json数据到本地
  9. Android OpenGL ES(六)----进入三维在代码中创建投影矩阵和旋转

随机推荐

  1. Mac 中eclipse 遇到的问题及简单设置
  2. AndroidHttp通信 HTTP Client与HttpURLCo
  3. Android内存泄露检测工具 LeakCanary 使
  4. Android(安卓)-- AdapterService之蓝牙启
  5. Android接口描述语言。
  6. 获取一个app的package名和activity名
  7. Android中Math常用的方法,包括pow、abs、r
  8. Android(安卓)Studio更新升级方法
  9. android studio编译警告:请使用 -Xlint:de
  10. Android中实现图文并茂的按钮实例代码