Android 通过PHP连接Mysql_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 1877 | 回复: 0   主题: Android 通过PHP连接Mysql        下一篇 
    本主题由 koei123 于 2015-2-6 5:10:13 移动
malu
注册用户
等级:列兵
经验:90
发帖:5
精华:0
注册:2014-4-29
状态:离线
发送短消息息给malu 加好友    发送短消息息给malu 发消息
发表于: IP:您无权察看 2015-1-9 15:51:07 | [全部帖] [楼主帖] 楼主

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("SET NAMES utf8");
mysql_select_db("test",$link);
$sql=mysql_query("select * from teacher ",$link);
while($row=mysql_fetch_assoc($sql))
$output[]=$row;
print(json_encode($output));
mysql_close();
?>


4. 新建一个Android Java Project
需要修改的是一下三个文件:AndroidTestActivity.java、main.xml、AndroidManifest.xml

//AndroidTestActivity.java
package com.knight.android.test;//根据实际的工程需要,修改包的名称
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.net.ParseException;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class AndroidTestActivity extends Activity {
      JSONArray jArray;
      String result = null;
      InputStream is = null;
      StringBuilder sb = null;
      @Override
      public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            Button b1 = (Button) findViewById(R.id.button1);
            b1.setOnClickListener(new Button.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                        // TODO Auto-generated method stub
                        EditText tv = (EditText) findViewById(R.id.editView);
                        ArrayList<NameValuePair> nameValuePairs = newArrayList<NameValuePair>();
                        // http get
                        try {
                              HttpClient httpclient = new DefaultHttpClient();
                              HttpGet httpget = new HttpGet(
                              "http://10.141.249.136/test.php");
                              HttpResponse response = httpclient.execute(httpget);
                              HttpEntity entity = response.getEntity();
                              is = entity.getContent();
                        } catch (Exception e) {
                              Log.e("log_tag", "Error in http connection" + e.toString());
                        }
                        // convert response to string
                        try {
                              BufferedReader reader = new BufferedReader(
                              new InputStreamReader(is, "iso-8859-1"), 8);
                              sb = new StringBuilder();
                              sb.append(reader.readLine() + "\n");
                              String line = "0";
                              while ((line = reader.readLine()) != null) {
                                    sb.append(line + "\n");
                              }
                              is.close();
                              result = sb.toString();
                        } catch (Exception e) {
                              Log.e("log_tag", "Error converting result " + e.toString());
                        }
                        // paring data
                        int ct_id;
                        String ct_name;
                        try {
                              jArray = new JSONArray(result);
                              JSONObject json_data = null;
                              for (int i = 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 (JSONException e1) {
                              // Toast.makeText(getBaseContext(), "No City Found"
                              // ,Toast.LENGTH_LONG).show();
                        } catch (ParseException e1) {
                              e1.printStackTrace();
                        }
                  }
            });
      }
}
layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns: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
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns: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>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<!-- 授权访问网络 -->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>


5. 运行结果如下图:
Android通过PHP连接MySQL(读取)

点击click以后,Android会向服务器发送一个Http Get请求,服务器从mysql中读取数据后,传送给Android客户端,客户端编码数据包,然后返回如下结果:

Android通过PHP连接MySQL(读取)
注意:
(1)AndroidManifest.xml中不能出现<uses-sdk android:minSdkVersion="15" />这种属性,否则Android客户端无法连接到远程服务器
(2)如果在本机搭建mysql和php环境,以上程序(AndroidTestActivity.java)中红色部分应更改为:

HttpGet httpget = new HttpGet("http://10.0.2.2/test.php");


    127.0.0.1表示手机的本机ip,因为程序最终是在手机上跑的
(3)如果读者自定义的工程,需要修改一下几个地方:

    第一个是 AndroidTestActivity.java 程序里面的package名称package com.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编码
(5)更多内容还可以参考: http://blog.sptechnolab.com/2011/02/10/android/android-connecting-to-mysql-using-php/ ,这个网站中部分内容是错的,择其善者而从之。

--转自 北京联动北方科技有限公司

该贴由koei123转至本版2015-2-6 5:06:15
该贴由koei123转至本版2015-2-6 5:10:13



赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论