2016年3月2日 星期三

android 由PHP抓mysql資料 (使用HttpURLconnection)

這篇是從android透過php連結到mysql,並抓出mysql的資料
注意:請先在AndroidManifest.xml中加入
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
這用來開啟連網功能


activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"
>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="抓資料"
android:id="@+id/btn1"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
<TableLayout
android:id="@+id/user_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_below="@+id/btn1" />
</RelativeLayout>

////////////////////////////////////////////////////////////////////////////////////

abc.php

<?
$host='資料庫位置';//ex:120.105.132.80
$name='帳號';
$pwd='密碼';
$db='資料庫名稱';
$con=mysql_connect($host,$name,$pwd) or die("connection failed");
mysql_select_db($db,$con) or die("db selection failed");

$result=mysql_query("SELECT * FROM user",$con);//user資料表名稱
while($row=mysql_fetch_assoc($result)){
$tmp[]=$row;
}
echo json_encode($tmp);
mysql_close($con);
?>

////////////////////////////////////////////////////////////////////

DBConnector.java

package com.example.user.mysql_test;
import android.util.Log;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class DBConnector {
public static String executeQuery(String query_string) {
     String result = "";
     HttpURLConnection urlConnection=null;
     InputStream is =null;
     try {
             URL url=new URL("http://120.105.132.39/app_link/abc.php");                       //php的位置
             urlConnection=(HttpURLConnection) url.openConnection();//對資                料庫打開連結
             urlConnection.setRequestMethod("POST");
             urlConnection.connect();//接通資料庫
             is=urlConnection.getInputStream();//從database 開啟 stream

             BufferedReader bufReader = new BufferedReader(new                                    InputStreamReader(is, "utf-8"), 8);
             StringBuilder builder = new StringBuilder();
             String line = null;
             while((line = bufReader.readLine()) != null) {
              builder.append(line + "\n");
            }
              is.close();
              result = builder.toString();
            } catch(Exception e) {
            Log.e("log_tag", e.toString());
            }

            return result;
           }
}
////////////////////////////////////////////////////////////////////////////////////////////////////

MainActivity.java

package com.example.user.mysql_test;
import android.os.StrictMode;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import org.json.JSONArray;
import org.json.JSONObject;
public class MainActivity extends AppCompatActivity {
   @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    findViews();
    setListeners();
    StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
    .detectDiskReads()
    .detectDiskWrites()
    .detectNetwork()
    .penaltyLog()
    .build());
    StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
    .detectLeakedSqlLiteObjects()
    .penaltyLog()
    .penaltyDeath()
    .build());
     }
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
     int id = item.getItemId();
//noinspection SimplifiableIfStatement
     if (id == R.id.action_settings) {
     return true;
     }
     return super.onOptionsItemSelected(item);
}
     private Button button_get_record;
     private void findViews() {
     button_get_record = (Button)findViewById(R.id.btn1);
     }
     private void setListeners() {
     button_get_record.setOnClickListener(getDBRecord);
     }
     private Button.OnClickListener getDBRecord = new                           

     Button.OnClickListener() {
     public void onClick(View v) {
// TODO Auto-generated method stub
    TableLayout user_list = (TableLayout)findViewById(R.id.list);
     user_list.setStretchAllColumns(true);

     TableLayout.LayoutParams row_layout = new                   

     TableLayout.LayoutParams(ViewGroup.LayoutParams.

     WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

     TableRow.LayoutParams view_layout = new                                  

    TableRow.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,      ViewGroup.LayoutParams.WRAP_CONTENT);

      try {
      String result = DBConnector.executeQuery("SELECT * FROM user");
/*
SQL 結果有多筆資料時使用JSONArray
只有一筆資料時直接建立JSONObject物件
     JSONObject jsonData = new JSONObject(result);
*/
     JSONArray jsonArray = new JSONArray(result);
     for(int i = 0; i < jsonArray.length(); i++) {
     JSONObject jsonData = jsonArray.getJSONObject(i);
     TableRow tr = new TableRow(MainActivity.this);
     tr.setLayoutParams(row_layout);
     tr.setGravity(Gravity.CENTER_HORIZONTAL);

     TextView user_acc = new TextView(MainActivity.this);
     user_acc.setText(jsonData.getString("account"));//資料欄位名稱
     user_acc.setLayoutParams(view_layout);
     TextView user_pwd = new TextView(MainActivity.this);
     user_pwd.setText(jsonData.getString("pwd"));
     user_pwd.setLayoutParams(view_layout);
     tr.addView(user_acc);
     tr.addView(user_pwd);
     user_list.addView(tr);
    }
    } catch(Exception e) {

    Log.e("log_tag", e.toString());
    }
  }
};
}

資料庫裡的資料


模擬器執行結果

以上的是使用HttpURLconnection來連結PHP並非使用HttpClient
原因:API23已停止支援HttpClient
詳情

以上是小弟第一次練習 請多指教
參考網址:http://developer.android.com/intl/zh-tw/reference/android/os/StrictMode.html#setThreadPolicy(android.os.StrictMode.ThreadPolicy)

http://seanstar5317.pixnet.net/blog/post/28092031-%5Bandroid%5D%E5%BE%9Emysql-%E6%8A%93%E8%B3%87%E6%96%99%EF%BC%8C%E5%8B%95%E6%85%8B%E6%96%B0%E5%A2%9Etextview%E8%87%B3tablela

https://www.youtube.com/watch?v=eV1_bj89FZA
.......


php讀取mysql資料(使用Json)

太久沒更新了文章了~~ 今天寫的這篇文章主要是提供另一種讀取Mysql資料的方法。 3月份時有寫一篇php抓資料庫的作法,但在那之後我找到另一種比較簡單的方法,方法請各位看下方搂~~ 1.首先先寫一個PHP <? $host='120.105.132.3...