安卓通过WebService读写MySQL
安卓通过WebService读写MySQL
- 安卓通过GET,POST提交数据到PHP操作MySQL
- 搭建PHP服务器
- 创建MySQL表
- 在网站目录新建php文件
- 安卓和WebService连接
- 总结
安卓通过GET,POST提交数据到PHP操作MySQL
前两天接了个毕设项目(一部分),需要安卓通过WebService读写MySQL。
因为之前自己写操作MySQL都是直连的,也没接触过PHP这方面,所以项目完成后来做个笔记和总结
搭建PHP服务器
这里我使用的是小皮面板“phpstudy”,操作起来很方便,不用自己去配置。
进去安装MySQL、php和phpMyAdmin就可以运行。
这里不细做赘述,毕竟大佬都是自己搭建,小皮对于新手还是是很容易搭建的。
创建MySQL表
点击要创建表的数据库,然后点击SQL栏目,在输入框输入代码,执行。
create table test(
number int(10) NOT NULL AUTO_INCREMENT,
name varchar(20),
phonenumber int,
PRIMARY KEY (id)
);
创建的表格样式如下:
| id | name | number |
|---|---|---|
| 1 | 小明 | 15866995522 |
| 2 | 中国移动 | 10086 |
| 3 | 李惬意 | 13855441166 |
在网站目录新建php文件
MySQL表创建好之后,就要写PHP来操作表格了。以小皮面板为例,安装盘/D:\xp.cn\www\wwwroot\admin\localhost_80\wwwroot\下新建一个get.php来读取MySQL表
<?php
$servername = "localhost";//数据库地址
$username = "root";//用户名
$password = "root";//密码
$sqlname = "test";//数据库// 创建连接
$conn = new mysqli($servername, $username, $password);// 检测连接
if ($conn->connect_error) {die("连接失败: " . $conn->connect_error);
}
//echo "连接成功";mysqli_select_db($conn, $sqlname);
mysqli_query($conn,"set names 'utf8';");
$sql = mysqli_query($conn, 'select * from phonelist;'); //查询test数据库下的phonelist表
if (!$sql) {printf("Error: %s\n", mysqli_error($conn));exit();
}
while( $row = mysqli_fetch_array($sql) )
$output[] = $row;
echo (json_encode($output));//编码成json并输出
mysqli_close($conn);
?>
再建一个post.php
<?php
$servername = "localhost";//数据库地址
$username = "root";//用户名
$password = "root";//密码
$sqlname = "test";//数据库名
// 创建连接
$conn = new mysqli($servername, $username, $password);// 检测连接
if ($conn->connect_error) {die("连接失败: " . $conn->connect_error);
}
//echo "连接成功";
mysqli_select_db($conn, $sqlname);
$sql = "INSERT INTO phonelist (name, phonenumber)
VALUES ('$_POST[name]',' $_POST[number]')";//获取传来的数据
if ($conn->query($sql) === TRUE) {echo "新记录插入成功";
} else {echo "Error: " . $sql . "
" . $conn->error;
}
mysqli_close($conn);
?>
PHP就这两页,会整合的话还可以放到一页里面,而且我有点懒… demo写完就直接用了,连个连接类都没写,一页一个连接… 想排版的可以自己把连接代码拖出去新建一个类
安卓和WebService连接
网络操作在主线程会崩溃,需要放到一个新线程来完成操作,然后UI更新又坑了我一下… 莫名其妙的报错,但是不耽误使用… 最后才发现是我放到子线程去更新ListView了…
TestActivity这里写的是查询MySQL表返回JSON到安卓,安卓这边再解析JSON并放到ListView显示
两个EditText用来提交数据到post.php插入到数据库表格中…
布局文件我就不放了,Activity代码简单易懂,而且总共也没几个控件
public class TestActivity extends AppCompatActivity {Button get;Button post;EditText name;EditText number;ListView contactsview;List<String> contactsList = new ArrayList<>();//存放数据ArrayAdapter<String> adapter;private String response;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initview();}private void initview(){name = findViewById(R.id.name);number = findViewById(R.id.number);contactsview = findViewById(R.id.contacts_view);adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, contactsList);contactsview.setAdapter(adapter);get = findViewById(R.id.get);get.setOnClickListener(new Button.OnClickListener() {@Overridepublic void onClick(View v) {new Thread(new Runnable(){@Overridepublic void run(){response=Get();}}).start();}});post = findViewById(R.id.post);post.setOnClickListener(new Button.OnClickListener() {@Overridepublic void onClick(View v) {Post();}});}private String Get(){contactsList.clear();HttpURLConnection con=null;InputStream in=null;String path="http://192.168.0.114/get.php";try {con= (HttpURLConnection) new URL(path).openConnection();con.setConnectTimeout(5000);con.setReadTimeout(5000);con.setDoInput(true);con.setRequestMethod("GET");if(con.getResponseCode()==200){in=con.getInputStream();BufferedReader br=new BufferedReader(new InputStreamReader(in));StringBuilder sb=new StringBuilder();String line=null;while ((line=br.readLine())!=null){sb.append(line+"\n");}try{JSONArray jsonArray = new JSONArray(sb.toString());for(int i = 0;i < jsonArray.length();i++){JSONObject jsonObject = (JSONObject) jsonArray.get(i);String fromName = jsonObject.getString("name");String fromNumber = jsonObject.getString("phonenumber");contactsList.add(fromName + "\n" + fromNumber);}updateView();Log.e("解析json数据", "内容已更新");}catch (Exception e){e.printStackTrace();Log.e("解析json数据", "解析网络数据异常");}return sb.toString();}} catch (IOException e) {e.printStackTrace();}return null;}private void updateView(){Thread.currentThread().setName("updateView");TestActivity.this.runOnUiThread(new Runnable() {@Overridepublic void run() {adapter.notifyDataSetChanged();}});}public void Post(){new Thread(new Runnable(){@Overridepublic void run(){String posname = name.getText().toString();String posnumber = number.getText().toString();StringBuilder sb = new StringBuilder();URLConnection conn;BufferedReader br = null;try{URL posturl = new URL("http://192.168.0.114/post.php");conn = posturl.openConnection();//创建连接conn.setDoInput(true);//post请求必须设置conn.setDoOutput(true);//post请求必须设置OutputStream out=conn.getOutputStream();out = new DataOutputStream(conn.getOutputStream());//输出流String params="name="+posname+'&'+"number="+posnumber;out.write(params.getBytes());//输出流写入请求参数out.flush();out.close();br = new BufferedReader(new InputStreamReader(conn.getInputStream()));//获取输入流String line;while ((line = br.readLine()) != null) {sb.append(line);}System.out.println(sb.toString());}catch(Exception e){e.printStackTrace();}}}).start();}
}
总结
一直写的都是安卓代码,一下接触到WebService还真的无从下手。 插入和查询都让我在网上翻了半天资料,大多都是过时的代码,放到网站上运行就报错… 相对于来说… 还是经常接触的安卓代码比较熟悉,知道该怎么去写… 但是还是会犯小错误… 继续努力吧…
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
