使用HttpURLConnection 与 sae 进行数据交互

来源:互联网 发布:正规淘宝刷砖 编辑:程序博客网 时间:2024/05/14 04:48

使用android post 数据给服务器有很多种方式,本人第一次使用的是 HttpURLConnection,感兴趣的可以看HttpClient,不过Apache 的 HttpClient 在 安卓 5.0之后已经废弃,当然我们可以通过各种方法继续使用 HttpClient,接下来上代码:
首先是布局,就一个按钮:

    <Button        android:id="@+id/btn"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="传数据给数据库" />

接下来是 Activity 类:

    private final String url = "******";        btn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                new Thread()                {                    public void run()                    {                        try                        {                            String s = editText.getText().toString();                            JSONObject jsonObject = new JSONObject();                            JSONObject jsonObject2 = new JSONObject();                            try {                                jsonObject.put("username", s);                                jsonObject2.put("person", jsonObject);                                //Log.v("hlsjfl",jsonObject2.toString());                            } catch (JSONException e) {                                e.printStackTrace();                            }                            String content = String.valueOf(jsonObject2);                            post(url, content);                        }                        catch (Exception e)                        {                            e.printStackTrace();                        }                    }                }.start();            }        });    public static void post(String path2, String content) {        try {            URL url = new URL(path2);            HttpURLConnection conn = (HttpURLConnection) url.openConnection();            conn.setConnectTimeout(5000);            conn.setDoOutput(true);            conn.setRequestMethod("POST");            conn.setRequestProperty("Uer-Agent", "Fiddler");            conn.setRequestProperty("Content-Type", "application/json");            conn.setRequestProperty("Charset", "utf-8");            OutputStream os = conn.getOutputStream();            os.write(content.getBytes());            os.close();            int code = conn.getResponseCode();            if(code == 200)            {                Log.v("hlkfjlasd","Post成功啦"+code);            }        } catch (Exception e) {            e.printStackTrace();        }    }}

客户端的数据 post 给服务器,服务器用什么来接收都是可以的,只要符合规则,即可以成功获取,在做这个测试的时候,我用的是 sae,使用php来接受数据,当然这里的 php 地址也就是上面的 url 啦:

<?phpheader("Content-type: text/html; charset=utf-8");// 连主库,这是 sae 要求的$db = mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);$post_array = file_get_contents('php://input');  //接收POST数据if(empty($post_array)){    echo "post过来的数据为空"."<br/>";}else{    echo "post过来的数据不是空的"."<br/>";    $obj=json_decode($post_array,TRUE);    $order_id = $obj['person']['username'];//获取用户名    $sql4 = "插入语句";    mysql_query($sql4);}

接下来,如果数据传递成功,客户端可以接收来自服务器 的数据:

InputStream is = conn.getInputStream();//获取输入流byte [] data = revStream(is);//把输入流转换成字符串组String json = new String(data);//把字符串组转换成字符串Log.v("sldkjflkasjf",json);
private static byte[] revStream(InputStream inputStream) throws Exception    {        ByteArrayOutputStream ba = new ByteArrayOutputStream();        byte[] b = new byte[1024];        int len;        while ((len = inputStream.read(b)) != -1)        {            ba.write(b, 0, len);        }        ba.close();        inputStream.close();        return ba.toByteArray();    }

而想要传递数据给 客户端,php 只需将相应的数据 echo 即可,当然要注意一下json的格式,本次测试使用的是 json,比较麻烦的是需要将一个个输入的数据转换成json格式再传,Android Studio 提供的GsonFormat 可以非常方便地进行 json 与 Java Bean 的转换,同时 谷歌的 OkHttp实现了几乎和java.net.HttpURLConnection一样的API,所以使用 Okhttp 也是非常不错的。

温馨提示:
    如果运行遇到 java.net.UnknownHostException: Unable to resolve host ” 这里是你的url地址”: No address associated with hostname ,大部分情况是没有联网,或者url 地 址没有写对。
    另外,每次如果你想单独运行 php file 企图得到输出时,获取的数据永远为空,因为数据只有在客户端 post 的时候 通过php传到数据库,php在这里这是中介,如果只是单独运行 php 文件,并没有与客户端有什么联系,得到的结果当然也是空的咯。

0 0
原创粉丝点击