因为最近在更新我的项目,就想着把自己在项目中用到的一些的简单的与网络交互的方法总结一下,所以最近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. VC6.0的工程设置解读Project--Settings

    [原文:http://wenku.baidu.com/view/f10a241dff00bed5b9f31ddd.html] 做开发差不多一年多了,突然感觉对VC的工程设置都不是很清楚,天天要和VC见 ...

  2. IO_REMOVE_LOCK使用方法小结(转载加改正)

    原文链接:http://www.programlife.net/io_remove_lock.html IO_REMOVE_LOCK(删除锁)的具体结构没有公开,WDK的文档中中查不到IO_REMOV ...

  3. mysql fetch 系列函数

    浏览器输出内容同上. 当使用 MYSQL_BOTH 或省略该参数是,将同时具有 MYSQL_NUM 与 MYSQL_ ASSOC 的特性. MySQL mysql_fetch_array 函数取得查询 ...

  4. 【转】Linux 技巧: Bash 参数和参数扩展

    重点看下清单7 现在,很多 Linux® 和 UNIX® 系统上都有 bash shell,它是 Linux 上常见的默认 shell.通过本文,您将了解到如何在 bash 脚本中处理参数和选项,以及 ...

  5. 【转载】linux strace

    简介 strace常用来跟踪进程执行时的系统调用和所接收的信号. 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核 ...

  6. [iOS基础控件 - 6.3] 使用可视化连线方式指定dataSource、delegate

    对着要指定dataSource或者delegate的控件右击,然后拖动线到指定的控制器上

  7. RC522天线匹配参数【worldsing笔记】

    图为Device读卡器的参数值 EMC电路对读写距离影响不大:                   L3 和L4 固定为2.2uH:                  C11和C12也是固定值,如果P ...

  8. 如何计算ModBus超时时间?

    波特率:每秒钟通过信道传输的信息量称为位传输速率,也就是每秒钟传送的二进制位数,简称比特率.比特率表示有效数据的传输速率,用b/s .bit/s.比特/秒,读作:比特每秒. 如9600b/s:指总线上 ...

  9. 通过dbcc page来查看表中的数据

    --1.先建表 CREATE TABLE test(idd INT NOT NULL,name VARCHAR(10) NULL) INSERT INTO TEST SELECT 1,'abcdefg ...

  10. hdu 1520 (树形DP)

    dp[i][0]表示i不参加 dp[i][1]表示i参加 简单的树形dp #include<stdio.h> #include<string.h> #define N 6100 ...