網頁

2018年11月17日 星期六

[ Android Studio ] 連線MySQL新增修改刪除與ListView自設畫面 (2019/1/18更新)



一、Handler有兩個主要用途
1)安排消息和runnables在將來的某個時刻執行; 
2)將要在不同於自己的線程上執行的動作排入隊列。
以下語法為15秒執行一次
Handler myHandler = new Handler();//時間處理器myHandler.postDelayed(runTimerStop,15000);//使Runnable 添加到Handler中,在指定的時間到時運行runTimerStopif(cookieStr!=null){
    myHandler.removeCallbacks(runTimerStop);//removeCallbacks方法是删除指定的Runnable對象,使線程對象停止運行。
}

二、android.os.NetworkOnMainThreadException問題
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
        .detectDiskReads()
        .detectDiskWrites()
        .detectNetwork()
        .penaltyLog()
        .build());

StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
        .detectLeakedSqlLiteObjects()
        .detectLeakedClosableObjects()
        .penaltyLog()
        .penaltyDeath()
        .build());

三、JSON格式分類為列表方法如下:


方法一:

JSONArray jsonArray = new JSONArray(r);
List<Map<String,Object>> items=new ArrayList<Map<String,Object>>();

for(int i = 0; i < jsonArray.length(); i++) {

    JSONObject jsonData = jsonArray.getJSONObject(i);
    Map<String,Object> item=new HashMap<String,Object>();
    item.put("id",jsonData.getString("id"));
    item.put("name",jsonData.getString("name"));
    item.put("m1",jsonData.getString("m1"));
    item.put("m2",jsonData.getString("m2"));
    item.put("m3",jsonData.getString("m3"));
    items.add(item);//新增}

方法二:

JSONArray jArray = new JSONArray(r);
ArrayList<String> items = new ArrayList<String>(); for(int i=0; i < jArray.length() ; i++) { json_data = jArray.getJSONObject(i); int id=json_data.getInt("id"); String name=json_data.getString("name"); items.add(name); Log.d(name,"Output"); }

影片教學:

 

四、PHP語法:用PHP抓取資料的方法。

新增語法如下 (Intert_text1.php 檔案):

require_once("SQL_data.php");
$insert_new1=isset($_POST["S1"])<>NULL?$_POST["S1"]:"ddddd";
$insert_new2=isset($_POST["S2"])<>NULL?$_POST["S2"]:"0";
$insert_new3=isset($_POST["S3"])<>NULL?$_POST["S3"]:"0";
$insert_new4=isset($_POST["S4"])<>NULL?$_POST["S4"]:"0";

mysql_select_db($database,$GD);
$sql=sprintf("INSERT INTO text1(name,m1,m2,m3) VALUES ('%s',%s,%s,%s)",$insert_new1,(int)$insert_new2,(int)$insert_new3,(int)$insert_new4);

$Result=mysql_query($sql,$GD) or die(mysql_error());

mysql_close();
exit();

修改語法如下 ( updata_text1.php 檔案):
require_once("SQL_data.php");
$insert_new0=isset($_POST["S0"])<>NULL?$_POST["S0"]:"NULL";
$insert_new1=isset($_POST["S1"])<>NULL?$_POST["S1"]:"NULL";
$insert_new2=isset($_POST["S2"])<>NULL?$_POST["S2"]:"0";
$insert_new3=isset($_POST["S3"])<>NULL?$_POST["S3"]:"0";
$insert_new4=isset($_POST["S4"])<>NULL?$_POST["S4"]:"0";

mysql_select_db($database,$GD);
$sql=sprintf("UPDATE text1 SET name='%s',m1=%s,m2=%s,m3=%s WHERE id=%s",$insert_new1,(int)$insert_new2,(int)$insert_new3,(int)$insert_new4,(int)$insert_new0);

$Result=mysql_query($sql,$GD) or die(mysql_error());

mysql_close();
exit();

刪除語法如下 (Del_text1.php 檔案):
require_once("SQL_data.php");
$insert_new1=isset($_POST["S1"])<>NULL?$_POST["S1"]:"";


mysql_select_db($database,$GD);
$sql=sprintf("DELETE FROM text1 WHERE id=%s",(int)$insert_new1);

$Result=mysql_query($sql,$GD) or die(mysql_error());

mysql_close();
exit();

取得資料的語法如下 (index.php 檔案):
require_once("SQL_data.php");
$sql="select * from text1  order by id desc ";
mysql_select_db($database,$GD);
$Result=mysql_query($sql,$GD) or die(mysql_error());

while($r = mysql_fetch_assoc($Result))
$output[]=$r;
header('Content-type: application/json; charset=utf-8');
print(json_encode($output,JSON_UNESCAPED_UNICODE));//JSON_UNESCAPED_UNICODE為中文不轉成unicode碼
mysql_close();
exit();

11 則留言:

  1. +"'":""; 請問這裡面需要打什麼

    回覆刪除
    回覆
    1. 你問的是這段"where id='"+$_POST["S1"]+"'":"";嗎?
      語法是:isset(問題)<>NULL?正確時顯示:錯誤是顯示;
      "where id='"+$_POST["S1"]+"'"為正確時顯示
      ""為錯誤是顯示
      :←它例如if的else

      刪除
  2. E/eglCodecCommon: glUtilsParamSize: unknow param 0x000088ef 請問這是什麼意思

    回覆刪除
    回覆
    1. 要看整句錯誤訊息我才能猜出你錯的地方。只給這段我猜不出來。

      刪除
    2. HI~您好!,希望您還會回覆這篇
      我使用Pixel 2 API 27(Android 8.1.0, API 27)是沒問題的!!
      但使用Pixel 2 API 29(Android 10, API 29) 會出錯,而我使用我的手機5Z也會無法使用。
      以下為錯誤碼,可否給我您的e-mail,我才能把原整的Logcat傳給您,不然超過HTML字元限制了
      2019-06-26 10:05:13.152 26540-26540/? E/ample.ndr_text: Unknown bits set in runtime_flags: 0x8000

      2019-06-26 10:05:14.376 26540-27668/com.example.ndr_text1 E/eglCodecCommon: glUtilsParamSize: unknow param 0x000088ef
      2019-06-26 10:05:14.376 26540-27668/com.example.ndr_text1 E/eglCodecCommon: glUtilsParamSize: unknow param 0x000088ef

      2019-06-26 10:05:14.526 26540-27668/com.example.ndr_text1 E/eglCodecCommon: glUtilsParamSize: unknow param 0x000088ef
      2019-06-26 10:05:14.527 26540-27668/com.example.ndr_text1 E/eglCodecCommon: glUtilsParamSize: unknow param 0x000088ef

      --------- beginning of crash
      2019-06-26 10:05:29.100 26540-26540/com.example.ndr_text1 E/AndroidRuntime: FATAL EXCEPTION: main
      Process: com.example.ndr_text1, PID: 26540
      java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/client/HttpClient;
      at com.example.ndr_text1.DBphp.DBstring(DBphp.java:53)
      at com.example.ndr_text1.MainActivity.select(MainActivity.java:146)
      at com.example.ndr_text1.MainActivity$6.run(MainActivity.java:139)
      at android.os.Handler.handleCallback(Handler.java:883)
      at android.os.Handler.dispatchMessage(Handler.java:100)
      at android.os.Looper.loop(Looper.java:214)
      at android.app.ActivityThread.main(ActivityThread.java:7319)
      at java.lang.reflect.Method.invoke(Native Method)
      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:934)
      Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.http.client.HttpClient" on path: DexPathList[[zip file "/data/app/com.example.ndr_text1-MDwueoVqA_-DM4E-TufmGQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.ndr_text1-MDwueoVqA_-DM4E-TufmGQ==/lib/x86, /system/lib, /system/product/lib]]
      at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196)
      at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
      at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
      at com.example.ndr_text1.DBphp.DBstring(DBphp.java:53) 
      at com.example.ndr_text1.MainActivity.select(MainActivity.java:146) 
      at com.example.ndr_text1.MainActivity$6.run(MainActivity.java:139) 
      at android.os.Handler.handleCallback(Handler.java:883) 
      at android.os.Handler.dispatchMessage(Handler.java:100) 
      at android.os.Looper.loop(Looper.java:214) 
      at android.app.ActivityThread.main(ActivityThread.java:7319) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:934) 

      刪除
    3. 我的e-mail,z0978627167@gmail.com

      刪除
  3. 2019-03-24 19:31:16.822 1733-1733/? E/netmgr: Failed to open QEMU pipe 'qemud:network': Invalid argument
    2019-03-24 19:31:16.823 1733-1733/? E/netmgr: WifiForwarder unable to open QEMU pipe: Invalid argument

    回覆刪除
  4. 請問 SQL_data.php檔案的程式碼,可以讓參考嗎?
    我不太會

    回覆刪除
    回覆
    1. 被我給找到
      http://devildemon20100423.blogspot.com/2019/04/php-7-mysql.html

      刪除
  5. 請問如果用不到cookie會有影響嗎???只需要網址去連結.....更改很多次但表單還是無法顯示php的內容 也做不到新增之類的動作

    回覆刪除
  6. 請問為甚麼模擬器一打開會閃退?

    回覆刪除

影片的問題請留在影片的留言區裡。
部落格不會另外通知給我,所以很難發現你有留言。