找不到android studio 無法新增到mysql資料庫的問題!!
我有加
<uses-permission android:name="android.permission.INTERNET"/>
下面是我的android studio新增資料程式碼
public void SendDataToServer(final String id, final String name, final String email){
class SendPostReqAsyncTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
String result = "";
String Quickid = id;
String QuickName = name ;
String QuickEmail = email ;
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("id", Quickid));
nameValuePairs.add(new BasicNameValuePair("name", QuickName));
nameValuePairs.add(new BasicNameValuePair("email", QuickEmail));
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://localhost/project/get_data.php");
try {
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
} catch (UnsupportedEncodingException e) {
// log exception
e.printStackTrace();
}
return "data sucessfully";
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
Toast.makeText(MainActivity.this, "Data Submit Successfully", Toast.LENGTH_LONG).show();
}
}
SendPostReqAsyncTask sendPostReqAsyncTask = new SendPostReqAsyncTask();
sendPostReqAsyncTask.execute(id,name, email);
⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️下面是我的php程式碼⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️
我單獨執行可以在我的mysql資料庫新增一筆資料
<?php
include 'DatabaseConfig.php' ;
$con = mysqli_connect("127.0.0.1","root","0963533632","ccc")or die("connect error!");
$id = $_POST['id'];
$name = $_POST['name'];
$email = $_POST['email'];
$sql = "INSERT INTO ddd(id,name,email)VALUES(id,name,email)";
if(mysqli_query($con,$sql)){
echo 'Data Submit Successfully';
}
else{
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
mysqli_close($con);
?>
PHP現在是建議用PDO來連接資料庫,
不會很難你可以上網查一下,
另外,
請將程式碼用文字貼上,
並用上下各三個 ` 來包圍這段程式碼.
我看到一段很天才的寫法
「HttpPost httppost = new HttpPost("http://localhost/project/get_data.php");」
你要知道所謂的localhost的意思是本機串接。127.0.0.1也是本機串接。
也就是說,你在a設備中用127.0.0.1代表的是連接a設備。在b設備使用就是連接b設備。
相對的,一但在android上跑localhost。就是代表連接該設備。並不會是你想像中的連接你的資料庫設備。
先搞清楚一下再使用localhost跟127.0.0.1。這兩個是特殊連接的。
我的mysql是在我的電腦裡的跟android studio同一個地方
還是不能在自己電腦同時用client跟server
你的 app 是跑在虛擬的手機環境吧? 虛擬的手機環境就是一台設備, 他的 localhost 就不會是你的電腦, 這要搞清楚
手機是獨立的裝置,
即使是模擬器也是,
只能透過網路連接API,
差別在 區域網路 或是 網際網路.
所以你要先把PHP架在你的主機上,
然後要有一個IP讓區域網路能夠連上,
然後手機再透過這個區域網路接上API.
(前提是兩個裝置在同一個區域網路)
我那邊的url要改什麼?
怎麼連到我localhost的php檔
還是只能用魚大的方式
看你本機的區網 ip 是多少吧, 填那個試試
嚴格說來他不是透過本機的路線,
所以不能用localhost.
本機的區網ip android也連不到我的資料庫
我自己在瀏覽器試是可以的 怎麼這麼怪
你的PHP要先架起來,
在同一個專案裡面,
你隨便寫個PHP頁面,
(就寫個phpinfo最簡單)
先用電腦再用手機看你用IP能不能開啟你的PHP頁面,
如果不行的話手機連不到也是正常.
而且通常IP後來還要加Port,
否則預設是80Port.
你要先確定你的 http://172.x.x.6/project/get_data.php
是可以連的到再說。
再將可以連到取值的網頁放上去就好了。
這並沒有很奇怪。因為你分不清楚區網、外網; 內網等應用特性。
正常來說,不要去習慣用127.0.0.1做開發。
由其像你這種會有額外的裝置情況。
本機連結跟外網連結的特性不同。
一個是直接從你機器請求。另一種是透過網路請求。你要了解其特性。
同樣用127.0.0.1跟用實體ip在本機上跑看起來是一樣的東西。
但網路的運行原理是不一樣的。
嗯...現在手機APP設計都禁用連線資料庫了~
你最好趁早改方向研究如何用Json接資料吧~
研究如何用網站API串接手機吧..
以下是我之前寫的,實測OK,給你參考
dbin.java
public class dbin {
public static String executeQuery(String account)
{ String result ="";
try {
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("http://192.168.xxx.xxx/insertapp.php");
ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("emp_id", account));
httpPost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
InputStream inputStream = httpEntity.getContent();
BufferedReader bufReader = new BufferedReader(new InputStreamReader(inputStream, "utf-8"), 8);
StringBuilder builder = new StringBuilder();
String line = null;
while((line = bufReader.readLine()) != null) {
builder.append(line + "\n");
}
inputStream.close();
result = builder.toString();
}
catch(Exception e) {}
return result;
}
}
insertapp.php
<?php
require_once("db.php");
$emp_id=$_POST['emp_id'];
$sql="insert into leave (emp_id) values('$emp_id')";
if($emp_id!=null)
{
$q=mysqli_query($db, $sql);
}
while($e=mysqli_fetch_assoc($q))
$output[]=$e;
print(json_encode($output));
mysqli_close();
?>
require_once("db.php");
db.php是什麼?
public class dbin這個class是onclick執行的嗎?
@deni
以補上db.php
就是連接mysql而已
<?php
$db = mysqli_connect("localhost", "abc", "aaa", "test") or die("Could not connect: " . mysql_error());
mysqli_query($db, "SET CHARACTER SET UTF8");
?>
public class dbin這個class是onclick執行的嗎?
對,我會在MainActivity那裡設一個button,每按一次就會執行insert一次