MySQL数据库工程师入门实战课程视频教程
4185 人在学
今天给大家介绍如何在Android系统通过php连接MySQL?在Android系统通过php连接mysql有两种方法,具体是怎样的流程,请看下面例子。
1.通过MySQL在windows下的配置中介绍第二种方法,在服务器机器上配置php和mysql环境,譬如我的服务器机器ip为:10.141.249.136
2.新建在test数据库下新建一个teacher表,表的内容如下:
Android通过PHP连接MySQL(读取)
3.在服务器机器上的phpnow安装目录E:\\PHPnow-1.5.5\\htdocs下新建一个test.php文件,文件内容如下:
<?php
$link=mysql_connect("127.0.0.1","root","123456");
mysql_query("SETNAMESutf8");
mysql_select_db("test",$link);
$sql=mysql_query("select*fromteacher",$link);
while($row=mysql_fetch_assoc($sql))
$output[]=$row;
print(json_encode($output));
mysql_close();
?>
4.新建一个AndroidjavaProject
需要修改的是一下三个文件:AndroidTestActivity.java、main.xml、AndroidManifest.xml
//AndroidTestActivity.java
packagecom.knight.android.test;//根据实际的工程需要,修改包的名称
importjava.io.BufferedReader;
importjava.io.InputStream;
importjava.io.InputStreamReader;
importjava.util.ArrayList;
importorg.apache.http.HttpEntity;
importorg.apache.http.HttpResponse;
importorg.apache.http.NameValuePair;
importorg.apache.http.client.HttpClient;
importorg.apache.http.client.methods.HttpGet;
importorg.apache.http.impl.client.DefaultHttpClient;
importorg.json.JSONArray;
importorg.json.JSONException;
importorg.json.JSONObject;
importandroid.app.Activity;
importandroid.net.ParseException;
importandroid.os.Bundle;
importandroid.util.Log;
importandroid.view.View;
importandroid.widget.Button;
importandroid.widget.EditText;
publicclassAndroidTestActivityextendsActivity{
JSONArrayjArray;
Stringresult=null;
InputStreamis=null;
StringBuildersb=null;
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Buttonb1=(Button)findViewById(R.id.button1);
b1.setOnClickListener(newButton.OnClickListener(){
@Override
publicvoidonClick(Viewv){
//TODOAuto-generatedmethodstub
EditTexttv=(EditText)findViewById(R.id.editView);
ArrayList<NameValuePair>nameValuePairs=newArrayList<NameValuePair>();
//httpget
try{
HttpClienthttpclient=newDefaultHttpClient();
HttpGethttpget=newHttpGet(
"http://10.141.249.136/test.php");
HttpResponseresponse=httpclient.execute(httpget);
HttpEntityentity=response.getEntity();
is=entity.getContent();
}catch(Exceptione){
Log.e("log_tag","Errorinhttpconnection"+e.toString());
}
//convertresponsetostring
try{
BufferedReaderreader=newBufferedReader(
newInputStreamReader(is,"iso-8859-1"),8);
sb=newStringBuilder();
sb.append(reader.readLine()+"\\n");
Stringline="0";
while((line=reader.readLine())!=null){
sb.append(line+"\\n");
}
is.close();
result=sb.toString();
}catch(Exceptione){
Log.e("log_tag","Errorconvertingresult"+e.toString());
}
//paringdata
intct_id;
Stringct_name;
try{
jArray=newJSONArray(result);
JSONObjectjson_data=null;
for(inti=0;i<jArray.length();i++){
json_data=jArray.getJSONObject(i);
ct_id=json_data.getInt("id");
ct_name=json_data.getString("name");
tv.append(ct_name+"\\n");
}
}catch(JSONExceptione1){
//Toast.makeText(getBaseContext(),"NoCityFound"
//,Toast.LENGTH_LONG).show();
}catch(ParseExceptione1){
e1.printStackTrace();
}
}
});
}
}
layout/main.xml
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="click"/>
<EditText
android:id="@+id/editView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="HI"
android:textSize="30dip"/>
</LinearLayout>
AndroidManifest.xml
<?xmlversion="1.0"encoding="utf-8"?>
<manifestxmlns:android="http://schemas.android.com/apk/res/android"
package="com.knight.android.test"
android:versionCode="1"
android:versionName="1.0">
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name">
<activity
android:name=".AndroidTestActivity"
android:label="@string/app_name">
<intent-filter>
<actionandroid:name="android.intent.action.MAIN"/>
<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
<!--授权访问网络-->
<uses-permissionandroid:name="android.permission.INTERNET"/>
</manifest>
5.运行结果如下图:
Android通过PHP连接MySQL(读取)
点击click以后,Android会向服务器发送一个HttpGet请求,服务器从mysql中读取数据后,传送给Android客户端,客户端编码数据包,然后返回如下结果:
Android通过PHP连接MySQL(读取)
注意:
(1)AndroidManifest.xml中不能出现<uses-sdkandroid:minSdkVersion="15"/>这种属性,否则Android客户端无法连接到远程服务器
(2)如果在本机搭建mysql和php环境,以上程序(AndroidTestActivity.java)中红色部分应更改为:
HttpGethttpget=newHttpGet("http://10.0.2.2/test.php");
127.0.0.1表示手机的本机ip,因为程序最终是在手机上跑的
(3)如果读者自定义的工程,需要修改一下几个地方:
第一个是AndroidTestActivity.java程序里面的package名称packagecom.knight.android.test;这个根据读者自己定义的包要做出相应的修改(绿色部分)
第二个是修改AndroidManifest.xml里面第三行的package="com.knight.android.test",要保持绿色部分和第一条中的绿色部分相对应
第三点是修改AndroidManifest.xml里面activity下面的android:name=".AndroidTestActivity",将绿色部分修改为AndroidTestActivity.java的红色部分(也就是类名)
(4)在MySQL中把编码设置成utf8_unicode_ci,在浏览器中输入:localhost/test.php,如果中文出现乱码,可以把输出的内容复制到http://tools.jb51.net/tools/json/json_editor.htm,如果在这里能显示正常,则说明实际上是的对的,因为浏览器输出的是json编码。
以上就在Android系统通过php连接mysql得方法,大家学会了么?