iT邦幫忙

0

找不到android studio 無法新增到mysql資料庫的問題

dani 2019-04-28 13:24:144012 瀏覽
  • 分享至 

  • xImage

找不到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);
?>
小魚 iT邦大師 1 級 ‧ 2019-04-28 13:34:38 檢舉
請將程式碼用文字貼上,
並用上下各三個 ` 來包圍這段程式碼.
dani iT邦新手 5 級 ‧ 2019-04-28 14:00:30 檢舉
謝謝
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
小魚
iT邦大師 1 級 ‧ 2019-04-28 13:36:00

PHP現在是建議用PDO來連接資料庫,
不會很難你可以上網查一下,

另外,
請將程式碼用文字貼上,
並用上下各三個 ` 來包圍這段程式碼.

dani iT邦新手 5 級 ‧ 2019-04-28 14:02:06 檢舉

可是pdo是改php那邊的程式,我的問題好像是在android這邊

0

我看到一段很天才的寫法
「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。這兩個是特殊連接的。

看更多先前的回應...收起先前的回應...
dani iT邦新手 5 級 ‧ 2019-04-28 14:14:48 檢舉

我的mysql是在我的電腦裡的跟android studio同一個地方

dani iT邦新手 5 級 ‧ 2019-04-28 14:16:09 檢舉

還是不能在自己電腦同時用client跟server

weiclin iT邦高手 4 級 ‧ 2019-04-28 14:36:56 檢舉

你的 app 是跑在虛擬的手機環境吧? 虛擬的手機環境就是一台設備, 他的 localhost 就不會是你的電腦, 這要搞清楚

小魚 iT邦大師 1 級 ‧ 2019-04-28 14:48:00 檢舉

手機是獨立的裝置,
即使是模擬器也是,
只能透過網路連接API,
差別在 區域網路 或是 網際網路.

所以你要先把PHP架在你的主機上,
然後要有一個IP讓區域網路能夠連上,
然後手機再透過這個區域網路接上API.
(前提是兩個裝置在同一個區域網路)

dani iT邦新手 5 級 ‧ 2019-04-28 15:09:23 檢舉

我那邊的url要改什麼?
怎麼連到我localhost的php檔
還是只能用魚大的方式

weiclin iT邦高手 4 級 ‧ 2019-04-28 16:22:15 檢舉

看你本機的區網 ip 是多少吧, 填那個試試

小魚 iT邦大師 1 級 ‧ 2019-04-28 16:29:34 檢舉

嚴格說來他不是透過本機的路線,
所以不能用localhost.

dani iT邦新手 5 級 ‧ 2019-04-28 16:58:31 檢舉

https://ithelp.ithome.com.tw/upload/images/20190428/20115281GaO44f08Vx.png本機的區網ip android也連不到我的資料庫
我自己在瀏覽器試是可以的 怎麼這麼怪

小魚 iT邦大師 1 級 ‧ 2019-04-28 23:53:03 檢舉

你的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在本機上跑看起來是一樣的東西。
但網路的運行原理是不一樣的。

0
純真的人
iT邦大師 1 級 ‧ 2019-04-28 21:15:55

嗯...現在手機APP設計都禁用連線資料庫了~
你最好趁早改方向研究如何用Json接資料吧~
研究如何用網站API串接手機吧..

小魚 iT邦大師 1 級 ‧ 2019-04-28 23:54:09 檢舉

看他的方式應該是透過API沒錯,
我覺得PHP這邊的問題要先解決...

恩恩~我沒詳看好~哈

0
神威
iT邦研究生 4 級 ‧ 2019-04-29 08:25:14

以下是我之前寫的,實測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();
?>
dani iT邦新手 5 級 ‧ 2019-04-29 11:28:07 檢舉

require_once("db.php");
db.php是什麼?
public class dbin這個class是onclick執行的嗎?

神威 iT邦研究生 4 級 ‧ 2019-04-29 11:39:14 檢舉

@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一次

我要發表回答

立即登入回答