首页  >  文章  >  php教程  >  php开发app接口之android端的简易实现

php开发app接口之android端的简易实现

WBOY
WBOY原创
2016-06-06 19:42:181201浏览

对于很多新手来说,如何 实现 android端与服务器之间的通信还是一个难题。这里我提供一个比较好用的类 package org.crazyit.net; import java.io.*; import java.net.*; import java.util.*; /** * Description: * br/site: a href="http://www.crazyit.org"

对于很多新手来说,如何实现android端与服务器之间的通信还是一个难题。这里我提供一个比较好用的类

<code><span>package</span> org.crazyit.net;

<span>import</span> java.io.*; 
<span>import</span> java.net.*;
<span>import</span> java.util.*;

<span>/**
 * Description:
 * <br>site: <a href="http://www.crazyit.org">crazyit.org</a>
 * <br>Copyright (C), 2001-2014, Yeeku.H.Lee
 * <br>This program is protected by copyright laws.
 * <br>Program Name:
 * <br>Date:
 *<span> @author</span>  Yeeku.H.Lee kongyeeku@163.com
 *<span> @version</span>  1.0
 */</span>
<span>public</span> <span><span>class</span> <span>GetPostUtil</span>
{</span>
    <span>/**
     * 向指定URL发送GET方法的请求
     *<span> @param</span> url 发送请求的URL
     *<span> @param</span> params 请求参数,请求参数应该是name1=value1&name2=value2的形式。
     *<span> @return</span> URL所代表远程资源的响应
     */</span>
    <span>public</span> <span>static</span> String <span>sendGet</span>(String url, String params)
    {
        String result = <span>""</span>;
        BufferedReader in = <span>null</span>;
        <span>try</span>
        {
            String urlName = url + <span>"?"</span> + params;
            URL realUrl = <span>new</span> URL(urlName);
            <span>// 打开和URL之间的连接</span>
            URLConnection conn = realUrl.openConnection();
            <span>// 设置通用的请求属性</span>
            conn.setRequestProperty(<span>"accept"</span>, <span>"*/*"</span>);
            conn.setRequestProperty(<span>"connection"</span>, <span>"Keep-Alive"</span>);
            conn.setRequestProperty(<span>"user-agent"</span>,
                <span>"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"</span>);
            <span>// 建立实际的连接</span>
            conn.connect();  <span>//①</span>
            <span>// 获取所有响应头字段</span>
            Map<string list>> map = conn.getHeaderFields();
            <span>// 遍历所有的响应头字段</span>
            <span>for</span> (String key : map.keySet())
            {
                System.out.println(key + <span>"--->"</span> + map.get(key));
            }
            <span>// 定义BufferedReader输入流来读取URL的响应</span>
            in = <span>new</span> BufferedReader(
                <span>new</span> InputStreamReader(conn.getInputStream()));
            String line;
            <span>while</span> ((line = in.readLine()) != <span>null</span>)
            {
                result += <span>"\n"</span> + line;
            }
        }
        <span>catch</span> (Exception e)
        {
            System.out.println(<span>"发送GET请求出现异常!"</span> + e);
            e.printStackTrace();
        }
        <span>// 使用finally块来关闭输入流</span>
        <span>finally</span>
        {
            <span>try</span>
            {
                <span>if</span> (in != <span>null</span>)
                {
                    in.close();
                }
            }
            <span>catch</span> (IOException ex)
            {
                ex.printStackTrace();
            }
        }
        <span>return</span> result;
    }

    <span>/**
     * 向指定URL发送POST方法的请求
     *<span> @param</span> url 发送请求的URL
     *<span> @param</span> params 请求参数,请求参数应该是name1=value1&name2=value2的形式。
     *<span> @return</span> URL所代表远程资源的响应
     */</span>
    <span>public</span> <span>static</span> String <span>sendPost</span>(String url, String params)
    {
        PrintWriter out = <span>null</span>;
        BufferedReader in = <span>null</span>;
        String result = <span>""</span>;
        <span>try</span>
        {
            URL realUrl = <span>new</span> URL(url);
            <span>// 打开和URL之间的连接</span>
            URLConnection conn = realUrl.openConnection();
            <span>// 设置通用的请求属性</span>
            conn.setRequestProperty(<span>"accept"</span>, <span>"*/*"</span>);
            conn.setRequestProperty(<span>"connection"</span>, <span>"Keep-Alive"</span>);
            conn.setRequestProperty(<span>"user-agent"</span>,
                <span>"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"</span>);
            <span>// 发送POST请求必须设置如下两行</span>
            conn.setDoOutput(<span>true</span>);
            conn.setDoInput(<span>true</span>);
            <span>// 获取URLConnection对象对应的输出流</span>
            out = <span>new</span> PrintWriter(conn.getOutputStream());
            <span>// 发送请求参数</span>
            out.print(params);  <span>//②</span>
            <span>// flush输出流的缓冲</span>
            out.flush();
            <span>// 定义BufferedReader输入流来读取URL的响应</span>
            in = <span>new</span> BufferedReader(
                <span>new</span> InputStreamReader(conn.getInputStream()));
            String line;
            <span>while</span> ((line = in.readLine()) != <span>null</span>)
            {
                result += <span>"\n"</span> + line;
            }
        }
        <span>catch</span> (Exception e)
        {
            System.out.println(<span>"发送POST请求出现异常!"</span> + e);
            e.printStackTrace();
        }
        <span>// 使用finally块来关闭输出流、输入流</span>
        <span>finally</span>
        {
            <span>try</span>
            {
                <span>if</span> (out != <span>null</span>)
                {
                    out.close();
                }
                <span>if</span> (in != <span>null</span>)
                {
                    in.close();
                }
            }
            <span>catch</span> (IOException ex)
            {
                ex.printStackTrace();
            }
        }
        <span>return</span> result;
    }
}
</string></code>

在这里我们简单的做一个android的客户端

<code>这里是layout里的布局文件
<span><?xml version="1.0" encoding="utf-8"?></span>
<span>LinearLayout</span> <span>xmlns:android</span>=<span>"http://schemas.android.com/apk/res/android"</span>
    <span>android:orientation</span>=<span>"vertical"</span>
    <span>android:layout_width</span>=<span>"fill_parent"</span>
    <span>android:layout_height</span>=<span>"fill_parent"</span>
    >
<span>LinearLayout
</span>    <span>android:orientation</span>=<span>"horizontal"</span>
    <span>android:layout_width</span>=<span>"fill_parent"</span>
    <span>android:layout_height</span>=<span>"wrap_content"</span>
    <span>android:gravity</span>=<span>"center"</span>
    >
<span>Button
</span>    <span>android:id</span>=<span>"@+id/get"</span>  
    <span>android:layout_width</span>=<span>"wrap_content"</span> 
    <span>android:layout_height</span>=<span>"wrap_content"</span> 
    <span>android:text</span>=<span>"@string/get"</span>
    />
<span>Button
</span>    <span>android:id</span>=<span>"@+id/post"</span>  
    <span>android:layout_width</span>=<span>"wrap_content"</span> 
    <span>android:layout_height</span>=<span>"wrap_content"</span> 
    <span>android:text</span>=<span>"@string/post"</span>
    />      
<span><span>LinearLayout</span>></span> 
<span>TextView</span>  
    <span>android:id</span>=<span>"@+id/show"</span>
    <span>android:layout_width</span>=<span>"fill_parent"</span> 
    <span>android:layout_height</span>=<span>"fill_parent"</span> 
    <span>android:gravity</span>=<span>"top"</span>
    <span>android:background</span>=<span>"#ffff"</span>
    <span>android:textColor</span>=<span>"#f000"</span>
    <span>android:textSize</span>=<span>"16dp"</span>
    />
<span><span>LinearLayout</span>></span>
</code>

这里我们简单的写一下MainActivity

<code><span>package</span> org.crazyit.net;

<span>import</span> android.app.Activity;
<span>import</span> android.os.Bundle;
<span>import</span> android.os.Handler;
<span>import</span> android.os.Message;
<span>import</span> android.view.View;
<span>import</span> android.view.View.OnClickListener;
<span>import</span> android.widget.Button;
<span>import</span> android.widget.EditText;
<span>import</span> android.widget.TextView;

<span>/**
 * Description:
 * <br>site: <a href="http://www.crazyit.org">crazyit.org</a>
 * <br>Copyright (C), 2001-2014, Yeeku.H.Lee
 * <br>This program is protected by copyright laws.
 * <br>Program Name:
 * <br>Date:
 *<span> @author</span>  Yeeku.H.Lee kongyeeku@163.com
 *<span> @version</span>  1.0
 */</span>
<span>public</span> <span><span>class</span> <span>GetPostMain</span> <span>extends</span> <span>Activity</span>
{</span>
    Button get , post;
    TextView show;
    <span>// 代表服务器响应的字符串</span>
    String response;
    Handler handler = <span>new</span> Handler()
    {
        <span>@Override</span>
        <span>public</span> <span>void</span> <span>handleMessage</span>(Message msg)
        {
            <span>if</span>(msg.what == <span>0x123</span>)
            {
                <span>// 设置show组件显示服务器响应</span>
                show.setText(response);
            }
        }
    };
    <span>@Override</span>
    <span>public</span> <span>void</span> <span>onCreate</span>(Bundle savedInstanceState)
    {
        <span>super</span>.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        get = (Button) findViewById(R.id.get);
        post = (Button) findViewById(R.id.post);
        show = (TextView)findViewById(R.id.show);
        get.setOnClickListener(<span>new</span> OnClickListener()
        {
            <span>@Override</span>
            <span>public</span> <span>void</span> <span>onClick</span>(View v)
            {
                <span>new</span> Thread()
                {
                    <span>@Override</span>
                    <span>public</span> <span>void</span> <span>run</span>()
                    {
                        response = GetPostUtil.sendGet(
                            <span>"http://192.168.0.102/test/index.php"</span>
                            , <span>null</span>);
                        <span>// 发送消息通知UI线程更新UI组件</span>
                        handler.sendEmptyMessage(<span>0x123</span>);
                    }
                }.start();
            }
        });
        post.setOnClickListener(<span>new</span> OnClickListener()
        {
            <span>@Override</span>
            <span>public</span> <span>void</span> <span>onClick</span>(View v)
            {
                <span>new</span> Thread()
                {
                    <span>@Override</span>
                    <span>public</span> <span>void</span> <span>run</span>()
                    {
                        response = GetPostUtil.sendPost(
                            <span>"http://192.168.0.102/test/index.php"</span>
                            , <span>"name=帅&pass=leegang"</span>);
                    }
                }.start();
                <span>// 发送消息通知UI线程更新UI组件</span>
                handler.sendEmptyMessage(<span>0x123</span>);
            }
        });
    }
}</code>

php测试的部分很简单,只有一个页面

<code><span><span><?php </span>
header(<span>"content-type:text/html;charset=utf-8"</span>);
<span>echo</span> <span>"hellow world"</span>;
<span>echo</span> <span>$_POST</span>[<span>'name'</span>];</span></span></code>

对于很多新手来说,echo的作用像是c语言中的printf一样,事实上echo最重要的作用是把服务器产生的结果返回回来。

这里是效果图
php开发app接口之android端的简易实现

发送post请求后:
php开发app接口之android端的简易实现
这样简单的说明就完成了。

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn