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

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

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

  效果图如下:

  A:

  

  B:

  

  C:

  

  操作步骤:

  首先打开软件,然后点击提交跳转到另一个界面中进行显示数据。显示的直接是Json数据,并没有对其进行解析。

  Java代码:

  MainActivity:

  

 package com.example.testregister;

 import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText; public class MainActivity extends Activity{ private Button btn; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); btn = (Button) findViewById(R.id.btn_tijao); btn.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) { Intent intent = new Intent(getApplicationContext(),ShowTest.class);
startActivity(intent);
}
});
} }

布局文件activity_main.xml:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" /> <Button
android:id="@+id/btn_tijao"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="提交" /> </LinearLayout>

第二个界面ShowTest:

 package com.example.testregister;

 import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView; import com.example.interfaceHttp.HttpGetListener;
import com.example.service.HttpGetData; public class ShowTest extends Activity implements HttpGetListener{ private TextView textv1;
private TextView textv2; //我的本地服务器的接口,如果在你自己的服务器上需要更改相应的url
private String url ="http://10.17.64.85:8080/testregister/JSONPars.php"; private HttpGetData mhttpgetdata; @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activitytwo);
mhttpgetdata = (HttpGetData) new HttpGetData(url,this).execute();
textv1 = (TextView) findViewById(R.id.tv1);
textv2 = (TextView) findViewById(R.id.tv2); } @Override
public void GetDataUrl(String data) {
// TODO Auto-generated method stub
System.out.println(data);
textv1.setText(data); } }

第二个布局 activitytwo.xml:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <TextView
android:id="@+id/tv1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="ready..." /> <TextView
android:id="@+id/tv2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="ready..." /> </LinearLayout>

接下来就是利用HTTP进行网络的处理,这里使用的是get请求,这些代码我在http://www.cnblogs.com/bingbingliang-xiaomonv/p/5247223.html这篇文章中给大家讲过:

HttpGetData:

 package com.example.service;

 import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader; import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient; import android.os.AsyncTask; import com.example.interfaceHttp.HttpGetListener; public class HttpGetData extends AsyncTask<String, Void, String>{ private HttpClient mhttpclient;
private HttpGet mhttpget;
private HttpResponse mhttpResponse;
private HttpEntity mHttpEntity;
private InputStream in;
private StringBuffer sb; //声明url变量
private String url;
//声明接口
private HttpGetListener listener; public HttpGetData(){
} public HttpGetData(String url){
this.url = url;
} public HttpGetData(String url,HttpGetListener listener){
this.url = url;
this.listener = listener;
} /**
* 写后台需要执行的程序
*/
@Override
protected String doInBackground(String... params) { try{
//首先创建一个客户端实例
mhttpclient = new DefaultHttpClient();
//设置传递的方法
mhttpget = new HttpGet(url);
//通过客户端进行发送
mhttpResponse = mhttpclient.execute(mhttpget);
//通过HttpResponse获取方法体
mHttpEntity = mhttpResponse.getEntity();
//通过流获取具体的内容
in = mHttpEntity.getContent();
//创建缓冲区
BufferedReader br = new BufferedReader(new InputStreamReader(in));
sb = new StringBuffer();
String line = null;
while((line = br.readLine())!= null){
sb.append(line);
}
return sb.toString(); }catch(Exception e){
e.printStackTrace();
} return null;
} @Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
listener.GetDataUrl(result);
super.onPostExecute(result);
} }

为了使更多的类方便的使用,实现了这个接口HttpGetListener:

 package com.example.interfaceHttp;

 public interface HttpGetListener {
void GetDataUrl(String data);
}

好了,这就是基本的Android端的代码了,比较简单,关于HTTP网络通信这一块不是很懂得话,建议参照http://www.cnblogs.com/bingbingliang-xiaomonv/p/5247223.html

注意:

在跳转的时候需要给Activity进行配置

配置文件如下:

  <activity
android:name = "com.example.testregister.ShowTest">
<intent-filter >
<action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT"/> </intent-filter>
</activity>

因为涉及到网络的交互,所以还需要添加网络条件,在配置文件中配置:

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

在讲php实现接口的时候,我先给大家看一下我的本地的数据库以及里面的数据

数据库:

添加的数据:

PHP代码:

首先先建立一个数据库的文件Conn.php

 <?php
//连接本地数据库localhost以及数据库账户root密码为空
$con = mysql_connect("localhost","root",""); //设置字符集
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET utf8"); if(!$con){
die(mysql_error());
}
mysql_select_db("testregister",$con);
// echo "测试成功"; ?>

访问数据库php代码的简单实现JSONPars.php:

 <?php
//用于连接文件
require 'Conn.php'; //按照倒叙的顺序输出
$result = mysql_query("SELECT nickname,password FROM test_register ORDER BY user_id DESC");
// $array = mysql_fetch_assoc($result);
//计算数据的条数
$num = mysql_num_rows($result);
//列出新添加的数据是在上面向下输出,如果$i<3,只是输出前三项
for($i=0;$i<$num;$i++){
// print_r($array);
echo json_encode(mysql_fetch_assoc($result));
} ?>

对于上面的PHP代码进行测试,看是否成功,如果出现下面的效果图,就是成功,如果没有则会显示错误

效果图如下:

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

Android之利用HTTP网络通信实现与PHP的交互(三)的更多相关文章

  1. Android中利用Handler实现消息的分发机制(三)

    在第二篇文章<Android中利用Handler实现消息的分发机制(一)>中,我们讲到主线程的Looper是Android系统在启动App的时候,已经帮我们创建好了,而假设在子线程中须要去 ...

  2. android firmware 利用UDP socket发送Magic Packet--python版本

    android firmware 利用UDP socket发送Magic Packet--python版本 #!/usr/bin/python import sys, time from struct ...

  3. android firmware 利用UDP socket发送Magic Packet--c语言版本

    android firmware 利用UDP socket发送Magic Packet 1 Magic Packet格式: 6个0xFF + 16个Dst Mac Address 2 代码需要设置目的 ...

  4. Android下利用Bitmap切割图片

    在自己自定义的一个组件中由于需要用图片显示数字编号,而当前图片就只有一张,上面有0-9是个数字,于是不得不考虑将其中一个个的数字切割下来,需要显示什么数字,只需要组合一下就好了. 下面是程序的关键代码 ...

  5. android 下 利用webview实现浏览器功能

    android 下 利用webview实现浏览器功能(一): 1.界面添加WEBVIEW控件. 2.在界面.JAVA代码页面(protected void onCreate(Bundle savedI ...

  6. Android中利用ant进行多渠道循环批量打包

    公司负责Android开发的小伙伴学习能力稍微偏弱,交代给他的自动化打包的任务,弄了好久依然没有成效.无奈只好亲自出手. 没有想到过程很顺利,我完全按照如下文章的步骤进行: 主要参考: Android ...

  7. 【Android】利用安卓的数据接口、多媒体处理编写内存卡Mp3播放器app

    通过调用安卓的MediaPlayer能够直接完毕Mp3等主流音频的播放,同一时候利用ContentResolver与Cursor能够直接读取安卓内在数据库的信息.直接获取当前sdcard中全部音频的列 ...

  8. Android开发利用shareSDK等第三方分享,弹出的是英文名称。例如Genymotion模拟器

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 Android开发利用shareSDK等第三方分享,弹出的是英文名称.例如Genymotion模拟器就 ...

  9. 第一次使用Android Studio时你应该知道的一切配置(三):gradle项目构建

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

随机推荐

  1. NGINX(七)分段下载

    前言 nginx分段下载通过ngx_http_range_filter_module模块进行处理,关于HTTP分段下载过程,可以参考HTTP分段下载一文,主要分为一次请求一段和一次请求多段 涉及数据结 ...

  2. umask设置导致程序权限不足的问题

    这几天邮件告警总是发不了邮件,查看了下zext_msmtp.sh的日志,发现总是提示权限不足…… 于是切换为zabbix的账户,发现在msmtp的目录下连ls都无法执行. 之后发现是umask的问题, ...

  3. [九度OJ]1078.二叉树的遍历(重建)

    原题链接:http://ac.jobdu.com/problem.php?pid=1078 题目描述: 二叉树的前序.中序.后序遍历的定义:前序遍历:对任一子树,先访问跟,然后遍历其左子树,最后遍历其 ...

  4. East Central North America Region 2015

    E 每过一秒,当前点会把它的值传递给所有相邻点,问t时刻该图的值 #include <iostream> #include <cstdio> #include <algo ...

  5. uva 2572 Viva Confetti

    思路: 小圆面是由小圆弧围成.那么找出每条小圆弧,如果小圆弧,在小圆弧中点上下左右进行微小位移的所得的点一定在一个小圆面内. 找到最后覆盖这个小点的圆一定是可见的. 圆上的点按照相邻依次排序的关键量为 ...

  6. centos修改时区,设置时间

    在我们使用CentOS系统的时候,也许时区经常会出现问题,有时候改完之后还是会出错,下面我们就来学习一种方法来改变这个状况.如果没有安装,而你使用的是 CentOS系统 那使用命令 yum insta ...

  7. Android权威编程指南读书笔记(1-2章)

    第一章 Android应用初体验 1.4用户界面设计 <?xml version="1.0" encoding="utf-8"?> ADT21开发版 ...

  8. android应用的界面编程----View与ViewGroup的概念

    1 UI OverView Android中所有的UI元素都是通过View与ViewGroup来构建的,View是指屏幕中一块可与用户进行交互的空白,类似于java界面编程中的JPanel.为了界面布 ...

  9. 剑指OFFER之栈的压入、弹出序列(九度OJ1366)

    题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈 ...

  10. ASP终极防下载(转)

    自从搞ASP+ACCESS没少为避免数据库下载而伤过神,网上的奇淫技巧更是数不胜数,本文就是同大家共同探讨各路前辈的留下的秘笈并指中其中的优劣,最后为大家提供一种最佳的解决方案. 一.开篇 自从搞AS ...