注意:請先在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
.......