各位前輩好,最近初學android開發想和資料庫連動。
資料庫目前是本機的xampp -> phpmyadmin,
可以成功讀取資料但卻無法寫入資料,
做法都是利用php連接,
試過HttpURLConnection和OkHttpClient都失敗,
(有加入權限)
外觀只有一個button跟textview,
檢查過php檔案的路徑,有將模擬器加入環境變數,LOG也沒有甚麼異常,
但php仍然得不到資料,希望可以點醒我哪裏設置錯誤,非常感謝。
使用的模擬器↑
環境變數↑
php位置↑
資料庫可成功開啟↑
php程式碼以及模擬器瀏覽器可成功讀取↑
log的內容↑
MainActivity.java
package com.example.connect;
import androidx.appcompat.app.AppCompatActivity;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
private Button btn;
private TextView textView;
OkHttpClient client = new OkHttpClient().newBuilder().build();
FormBody formBody = new FormBody.Builder()
.add("id", "3")
.add("name", "abc")
.build();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Thread thread = new Thread(multiThread);
thread.start();
}
});
}
private Runnable multiThread = new Runnable(){
@Override
public void run() {
Request request = new Request.Builder()
.url("http://10.0.2.2/SendData.php")
.post(formBody)
.build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) throws IOException {
String result = response.body().string();
Log.i("success", result);
}
@Override
public void onFailure(Call call, IOException e) {
Log.e("fail", e.toString());
}
});
}
};
}
資料庫目前是本機的xampp -> phpmyadmin
PHPMyAdmin 是管理介面不是資料庫......
xampp 裡面包的資料庫叫MySQL
PHPMyAdmin是讓你管理用的GUI不是資料庫
PHPMyAdmin vs MySQL
這個差很多......
然後你的LOG有說......
Notice: Trying to get property 'id' of non-object in C:\xampp\htdocs\SendData.php on line 4
Notice: Trying to get property 'name' of non-object in C:\xampp\htdocs\SendData.php on line 5
你的PHP
$obj = json_decode($json);
json_decode()
完是物件+陣列
你要全部轉成陣列要用json_decode($json,true);
https://www.php.net/manual/en/function.json-decode.php
然後$_POST
本來就是陣列了
你可以直接print_r($_POST);
看看
所以如果你只是要把POST過去的id
,name
echo出來的話你的PHP其實只要
<?php
echo $_POST['id'];
echo $_POST['name'];
就這樣......
由於你貼圖片,我就懶的打程式了。
其實在你「php程式碼以及模擬器瀏覽器可成功讀取」上面那張圖來看。
根本就沒有拿到值。旁邊的錯誤訊息都已經很清楚的告訴你找不到對應的索引值了。
你怎麼會覺得是成功的?