因为最近在更新我的项目,就想着把自己在项目中用到的一些的简单的与网络交互的方法总结一下,所以最近Android网络编程方面的博文会比较多一些,我尽量以最简单的方法给大家分享,让大家明白易懂。如果有什么不对的地方,还请大家留言指出。

这次是利用PHP操作MySql,将Android上面输入的数据插入到MySql中,这里我已经给大家写好了PHP端的代码,如果大家想要自己测试,只需要将php端的代码复制即可,Android端的代码得换包。OK,下面我先给大家贴出来效果图:

Android端:

MySql数据库:

执行程序之后的数据库:

Android端的代码:

MainActivity类:

 package com.example.insertphp;

 import java.util.ArrayList;
import java.util.List; import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONObject; import android.app.Activity;
import android.os.Bundle;
import android.os.StrictMode;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText; public class MainActivity extends Activity { //声明接口地址
private String url = "http://10.17.64.8:8080/testregister/register.php"; private String a;
private String b; private EditText et1;
private EditText et2;
private Button btn; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); et1 = (EditText) findViewById(R.id.edtv);
et2 = (EditText) findViewById(R.id.edt);
btn = (Button) findViewById(R.id.bt); btn.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) { List<NameValuePair> params = new ArrayList<NameValuePair>();
//获取输入框中的内容
a = et1.getText().toString();
b = et2.getText().toString(); //替换键值对,这里的键必须和接口中post传递的键一致
params.add(new BasicNameValuePair("name", a));
params.add(new BasicNameValuePair("password", b)); JSONParser jsonParser = new JSONParser(); try{
JSONObject json = jsonParser.makeHttpRequest(url,"POST", params);
Log.v("uploadsucceed", "uploadsucceed"); }catch(Exception e){
e.printStackTrace();
} System.out.println("输入的第一个内容:" + a);
System.out.println("输入的第二个内容:" + b); }
}); //下面的代码是必须加上的,具体的意义还需要大家去探索吧,这里不是主要讲的 StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork() // or .detectAll() for all detectable problems
.penaltyLog()
.build()); StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.detectLeakedClosableObjects()
.penaltyLog()
.penaltyDeath()
.build()); } }

注意:这里的接口地址是我个人的本地服务器的地址,你如果在自己电脑上测试必须更改地址,查看自己本地的地址方法:win键+R 然后输入cmd,之后在执行框中输入ipconfig/all,在执行之后的结果中招IPv4就可以了。testregister是我的项目包,register.php是我的php文件。

特别注意:在将数据添加在list中时,键值对中的键名必须与接口中POST传递的名称一致才可以,不然会出现空数据的情况。

下面的代码是使用网络编程连接服务端的,其中里面代码的意义我在http://www.cnblogs.com/bingbingliang-xiaomonv/p/5247223.html已经介绍过。

JSONParser类代码:

 package com.example.insertphp;

 import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.List; import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.HTTP;
import org.json.JSONException;
import org.json.JSONObject; import android.util.Log; public class JSONParser { static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
public JSONObject makeHttpRequest(String url, String method,
List<NameValuePair> params) {
// Making HTTP request
try {
//使用POST请求
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "UTF-8"));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
Log.d("json", json.toString());
}
//转变为Json类型
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
} }

注意:必要忘了在配置文件添加访问网络权限的代码:

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

布局代码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" > <EditText
android:id="@+id/edtv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10" > <requestFocus />
</EditText> <EditText
android:id="@+id/edt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10" /> <Button
android:id="@+id/bt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="提交" /> </LinearLayout>

服务端代码:

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 "测试成功"; ?>

操作数据库的代码:

register.php:

 <?php

     require 'Conn.php';

     $response = array();

     //注意:这里的POST传递的name必须和android端的键一致,否则不会插入数据
if(isset($_POST['name'])){
$nickname = $_POST['name'];
$password = $_POST['password'];
//执行Mysql插入语句
$query = mysql_query("INSERT INTO test_register(nickname,password) VALUES ('$nickname','$password')");
// echo $query;
// echo "测试query";
if ($query) {
// successfully inserted into database
$response["success"] = 1;
$response["message"] = "Product successfully created.";
echo json_encode($response); } else {
// failed to insert row
$response["success"] = 0;
$response["message"] = "Oops! An error occurred.";
// echoing JSON response
echo json_encode($response);
} } ?>

说明:echo只是为了当时测试用的。

如果在执行程序的过程中Logcat中出现下面情况,就差不多对了。

为了测试方便我使用的是英文,如果有使用中文的,上述代码也可以,如果你的不可以的话,你就更改你的编码方式,我这里是用的UTF-8,这是最普遍的,一般不会出现问题。

本人的水平有限,就先写这些了,如果有什么问题,或者更好的方法,还需要大神留言。我感激不尽。

Android之网络编程利用PHP操作MySql插入数据(四)的更多相关文章

  1. Python3 多线程(连接池)操作MySQL插入数据

    1.主要模块DBUtils : 允许在多线程应用和数据库之间连接的模块套件Threading : 提供多线程功能 2.创建连接池PooledDB 基本参数: mincached : 最少的空闲连接数, ...

  2. Linux服务器使用命令操作MySQL插入数据乱码问题

    服务器上使用MySQL命令方式进行插入数据时,很多时候会遇到插入数据乱码问题,导出一个sql执行文件,再倒入到unbutn中,结果出现乱码,折腾7-8分钟, 解决方式 在导出mysql sql执行文件 ...

  3. node操作mysql插入数据异常,incorrect string value

    产生的原因 我在创建表的时候,并没有设定字符编码,所以,默认的字符编码是 latin1 在我插入数据的时候,我的一个字段name设定的是varchar(20) 其实,这时的编码就是 latin1 所以 ...

  4. Android 的网络编程

    android的网络编程分为2种:基于socket的,和基于http协议的. 基于socket的用法 服务器端: 先启动一个服务器端的socket     ServerSocket svr = new ...

  5. 利用TPC-H为MYSQL生成数据

    ## 利用TPC-H为MYSQL生成数据 导言 这篇文章是看了joyee写的TPC-H数据导入MySQL教程以及另一篇网上的MySQL TPCH测试工具简要手册 后写的,有些内容是完全转载自以上两篇文 ...

  6. mysql 插入数据失败防止自增长主键增长的方法

    mysql设置了自增长主键ID,插入失败的那个自增长ID也加一的,比如失败5个,下一个成功的不是在原来最后成功数据加1,而是直接变成加6了,失败次数一次就自动增长1了,能不能让失败的不增长的? 或者说 ...

  7. shell脚本获取mysql插入数据自增长id的值

    shell脚本获取mysql插入数据自增长id的值 在shell脚本中我们可以通过last_insert_id()获取id值,但是,需要注意的是,该函数必须在执行插入操作的sql语句之后,立即调用,否 ...

  8. mysql插入数据后返回自增ID的方法,last_insert_id(),selectkey

    mysql插入数据后返回自增ID的方法 mysql和oracle插入的时候有一个很大的区别是,oracle支持序列做id,mysql本身有一个列可以做自增长字段,mysql在插入一条数据后,如何能获得 ...

  9. mysql函数之六:mysql插入数据后返回自增ID的方法,last_insert_id(),selectkey

    mysql插入数据后返回自增ID的方法 mysql和oracle插入的时候有一个很大的区别是,oracle支持序列做id,mysql本身有一个列可以做自增长字段,mysql在插入一条数据后,如何能获得 ...

随机推荐

  1. 55人班37人进清华北大的金牌教师之32条教育建言! z

    他带的一个55人的班,37人考进清华.北大,10人进入剑桥大学.耶鲁大学.牛津大学等世界名校并获全额奖学金,其他考入复旦.南开等大学.不仅 如此,校足球冠军.校运动会总冠军.校网页设计大赛总冠军等6项 ...

  2. myeclipse10 安装 testng插件

    下载插件: http://pan.baidu.com/s/1c0pghFE 放到dropins目录

  3. [NOIP2013]转圈游戏

    题目描述 Description n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 ...

  4. 【译】 AWK教程指南 附录B-Actions

    Actions 是由下列指令(statement)所组成: 表达式 ( 函数调用,赋值...) print 表达式列表 printf( 格式化字符串, 表达式列表) if( 表达式 ) 语句 [els ...

  5. windows7 ubuntu双系统采用windows7 mbr引导方法

    在安装有Windows7系统上的机器,安装用Ubuntu后,开机会自动用grub2 引导.对于使用双系统的用户来说,用MBR和grub2都差不多,但是,我的机器上有三个系统,需要用MBR来引导变色龙, ...

  6. 广州大学华软软件学院——NA视频下载

    准备工具: 360极速浏览器(不要认错图标了): 浏览器视频下载插件: 第一步:安装浏览器插件 1.打开浏览器 2.解压,找到插件文件: 3.把插件拖到浏览器中: 4.添加,然后就完成了插件安装 查看 ...

  7. nginx变量

    nginx的全局变量参数解释: $arg_PARAMETER#这个变量包含GET请求中,如果有变量PARAMETER时的值. $args   #这个变量等于请求行中(GET请求)的参数,例如foo=1 ...

  8. ASP.NET中的注释 .

    之前只知道<!-- -->可以注释掉html页面中的某些部分,或者添加注释说明.今天又看到<%----%>也能添加注释,于是我不解了,google一下. <!--注释-- ...

  9. IAR stm8带库的工程模板

    下载:http://pan.baidu.com/share/link?shareid=2243555626&uk=2483252218

  10. 刚制作完的SAP Sybase ASE15.7 [Sybase Central] 客户端

    支持32位和64位windows系统.无需其它任何包.原汁原味. 支持的数据库版本,应该从15.0开始都支持. 下载地址: http://download.csdn.net/detail/iihero ...