2012.08.13版主回覆:
底下好多留言都詢問,奇怪?怎麼模擬器上都出現文字
然後網頁上沒出現?
不要再相信沒有事實根據的說法了 (大誤
不要再說沒有小弟不才,沒有爬文
請移步至新版:
http://j796160836.pixnet.net/blog/post/30577968
個人還是建議從本篇看起,概念比較清楚
最近常常被問到這些問題
Android要怎麼接MySQL資料庫呀? MySQL在網路上
Android怎麼接上雲端的資料庫?
Android怎麼傳送表單內容?
這些答案都在這裡
網路上的資料庫,不太容易,也不建議直接與資料庫做溝通
因為涉及到資訊安全的東西
可以用網頁來做中間的介面,讓二者產生關聯
做類似WebServices的東西
(雖然不是真正的WebServices,但其角色是類似的)
伺服器端
你可以簡單寫個印字串的程式,如果收到POST的封包
就印出其內容
如果是PHP可能這樣寫
<?php
//宣告utf-8的編碼
header("Content-Type:text/html; charset=utf-8");
$data=$_POST[‘data’];
echo "data=".$data;
?>
把寫好程式,取名httpPostTest.php
把他擺到htdoc底下 (windows)
或是/var/www/ (ubuntu)
或是/var/www/html (Fedora, Cent OS)
用ASP可能這樣寫
<%@ LANGUAGE=VBScript CodePage=950%>
<%
data=request("data")
response.write "data="&data
%>
不管如何,請照你的伺服器語言撰寫
Android手機端
可以用範例程式碼來解決問題
這些範例仿間找的到
因為過於複雜,所以我又重新整理了其範例給大家看
關鍵程式碼不到5行,但重點是在於你對Android的UI介面認識與否
和動態網頁的語言的熟練度
照慣例,文字要放在string.xml裡
/res/values/string.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">httpPostTest</string>
<string name="help_txt">請輸入文字以便使用POST傳送:</string>
<string name="txt_message_hint">請輸入文字</string>
<string name="send">送出</string>
</resources>
看一下Layout檔
/res/layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/help_txt"
/>
<EditText
android:id="@+id/txt_message"
android:hint="@string/txt_message_hint"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/send_btn"
android:text="@string/send"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
這裡沒甚麼特別,就是一個EditText來讓使用者能打入資料
然候一個按鈕讓系統傳送封包到寫死的網址路徑
程式碼要上了
main.java
package com.J_Test.httpPostTest;
/*
* ====httpPostTest範例====
* 1. 請先確認Apache有沒有正確執行
* 2. 放入以下PHP代碼到htdoc資料夾中(或是/var/www/)等路徑
*
<?php
//宣告utf-8的編碼
header("Content-Type:text/html; charset=utf-8");
$data=$_POST[‘data’];
echo "data=".$data;
?>
*
* 3. 修改uriAPI的IP和檔案名稱為正確 (請用電腦對外之IP)
* (不可用127.0.0.1因為Android手機上也有本機位址)
*
*/
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
publicclass main extends Activity implements OnClickListener
{
private EditText txtMessage;
private Button sendBtn;
private String uriAPI = "http://192.168.1.3/httpPostTest.php";
@Override
publicvoid onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
txtMessage = (EditText) findViewById(R.id.txt_message);
sendBtn = (Button) findViewById(R.id.send_btn);
if (sendBtn != null)
{
sendBtn.setOnClickListener(this);
}
}
@Override
publicvoid onClick(View v)
{
if (v == sendBtn)
{
String msg = null;
if (txtMessage != null)
{
msg = txtMessage.getEditableText().toString();
String result = sendPostDataToInternet(msg);
// 印出網路回傳的文字
if (result != null)
Toast.makeText(this, result, Toast.LENGTH_LONG).show();
}
}
}
private String sendPostDataToInternet(String strTxt)
{
/ 建立HTTP Post連線 /
HttpPost httpRequest = new HttpPost(uriAPI);
/*
* Post運作傳送變數必須用NameValuePair[]陣列儲存
*/
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("data", strTxt));
try
{
/ 發出HTTP request /
httpRequest.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
/ 取得HTTP response /
HttpResponse httpResponse = new DefaultHttpClient()
.execute(httpRequest);
/ 若狀態碼為200 ok /
if (httpResponse.getStatusLine().getStatusCode() == 200)
{
/ 取出回應字串 /
String strResult = EntityUtils.toString(httpResponse
.getEntity());
// 回傳回應字串
return strResult;
}
} catch (ClientProtocolException e)
{
Toast.makeText(this, e.getMessage().toString(), Toast.LENGTH_SHORT)
.show();
e.printStackTrace();
} catch (IOException e)
{
Toast.makeText(this, e.getMessage().toString(), Toast.LENGTH_SHORT)
.show();
e.printStackTrace();
} catch (Exception e)
{
Toast.makeText(this, e.getMessage().toString(), Toast.LENGTH_SHORT)
.show();
e.printStackTrace();
}
returnnull;
}
}
最後是AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.J_Test.httpPostTest"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".main"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<!– 這裡加入可以存取網路的權限 –>
<uses-permission android:name="android.permission.INTERNET" />
</manifest>
這裡很重要也很容易疏忽
除了Activity要在這裡註冊外
能對外上網的權限也在這裡註冊
如果遇到
WARN/System.err(503): java.net.SocketException: Permission denied
就該發現權限少了這一項
<uses-permission android:name="android.permission.INTERNET" />
另一個權限也常用,但仿間書常常會遺漏
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
就是能夠存取手機記憶卡的權限
這樣有看懂嗎?
主要重點在這裡
/ 建立HTTP Post連線 /
HttpPost httpRequest = new HttpPost(uriAPI);
這個HttpPost是主要的Class名,這裡要填入存取的網址
然後
在
/*
* Post運作傳送變數必須用NameValuePair[]陣列儲存
*/
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("data", strTxt));
使用系統指定的資料格式BasicNameValuePair
BasicNameValuePair在new的時候裡面為二個字串,一個是名稱,一個是值
這裡用"data"當名字,值就是剛剛讓使用者打的資料
在
/ 發出HTTP request /
httpRequest.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
的 HTTP.UTF_8 可以指定編碼格式,不過要跟伺服器端相同(照我範例走的話是不用動)
其實這個Android其實是跟以下網頁的功能是相同的
有些值你可以對照看看,相關對照的字詞都用顏色標明了
可以將它另存到httpPostTest.htm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns="http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv="Content-Language" content="zh-tw" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF_8" />
<title>httpPostTest</title>
<head></head>
<body>
請輸入文字以便使用POST傳送:<br />
<form method="POST" action="http://192.168.1.3/httpPostTest.php">
<input type="text" name="data" size="20" value="請輸入文字" /><br />
<input name="Submit1" type="submit" value="送出" /><br />
</form>
</body>
</html>
延伸
其實網頁大多喜歡把很多功能做在一個檔裡,就是用一個隱藏值來判斷現在進行到那個階段
本例用op當階段的旗標
PHP版:
請輸入文字以便使用POST傳送:<br />
<form method="POST" action="<?php echo $_SERVER[‘PHP_SELF’]; ?>">
<input type="text" name="data" size="20" value="請輸入文字" /><br />
<input type="hidden" name="op" value="showValue" />
<input name="Submit1" type="submit" value="送出" /><br />
</form>
ASP版:
請輸入文字以便使用POST傳送:<br />
<form method="POST" action="<%=Request.ServerVariables("PATH_INFO")%>">
<input type="text" name="data" size="20" value="請輸入文字" /><br />
<input type="hidden" name="op" value="showValue" />
<input name="Submit1" type="submit" value="送出" /><br />
</form>
不過還是再三的提醒
範例程式碼很簡陋,指是要讓大家看懂其中的語法
真正寫程式使用的時候
要記得在伺服器判斷輸入的型別
更不要直接讓表單直接下SQL指令
怕被資料隱碼攻擊(SQL Injection)
這是很危險低~~~~
參考資料
Google Android SDK開發範例大全 佘志龍等人著
悅知文化
請問一下~
我的apk有跑出那個toast
這樣是不是代表我有把東西傳到目標的網頁
如果是的話~
網頁那邊要怎麼顯示出來
我按重新整理也沒有東西出現= =
ps:PHP初初初學者= =
版主回覆:(05/12/2011 12:46:40 PM)
data=
它的後面有沒有接東西?
網頁有送資料過去才會出現data=後面才會出現東西
當然要配合網頁伺服器摟
沒有耶= =
網頁那端只有
data=
後面沒了= =
但apk有跑出toast
data=yyy
(我傳yyy)
這不是代表有傳過去嗎?
版主回覆:(05/12/2011 12:49:34 PM)
有傳過去
你可以用"延伸"的標題上面的html原始碼測試
你直接看的話,是沒有傳資料過去的
那就是只會有data=
呃~我現在是在學校實驗室測試的
實驗室有防火牆~
跟這不知道有沒有關係
不過如果toast是代表有傳過去的話
就應該跟防火牆無關= =
版主回覆:(05/12/2011 12:56:48 PM)
1. 要測試防火牆的話,要從防火牆外面做瀏覽測試
當然要有一個對外IP,且有設定例外
2. 如果有收到資料的話,加上資料庫的處理程式碼 (sql下Insert …)
就可以處理資料庫了
Android這邊就像是一個
只會傳特定資料
和 "看得懂" 特定資料的瀏覽器
網址的部分你也可以直接改成別的
假設是google.com
toast就會跳出網頁的原始碼
我剛才拿您說的html測測看了
有顯示data=yyy
您真內行!!!
那如果我想要用apk丟值出來
然後網頁重新整理就可以看到我丟的值
這樣是不是一定要有資料庫才可以?
版主回覆:(05/12/2011 01:21:52 PM)
不一定,但也大多會用資料庫
其它方式的話,如果只是大家都能看到,可以用Application
生命週期從http服務的啟動到http服務的關閉
或是用檔案讀寫fopen() fread() fwrite()
這就要查一下指令怎麼用了
請問
statusCode == 200
200 是什麼意思@@
版主回覆:(05/15/2011 03:36:22 PM)
http的狀態回應碼,跟封包的規格有關
常見的有
404 not found
403 Forbidden
401 Unauthorized
500 Internal Server Error
…..等等
可以參考此文件
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
不好意思
還有就是
request respone 他們的 再跟 server 互動的方式 邏輯 概念 我不太懂耶 可以解釋一下嗎
先發出請求
有了回應 用回應去做 請求 ????
版主回覆:(03/13/2012 10:52:30 AM)
基本上大致是這樣沒錯,所以瀏覽器才會在按下送出後會刷新頁面呀
其餘的沒講到的細節有,OSI 7層
因為http走tcp所以會三向交握,建立連線
假設是登入畫面,在送出帳密後
PHP等伺服器端程式大多會在伺服器上建立Session
然後給你一個Session ID
大概是這樣,如有錯誤煩請指正
先 謝了 有問題再問 哈!!
已測試成功,非常感謝!
想請問一下,如果網頁端回傳一個陣列
手機端該如何接收呢?
版主回覆:(05/21/2011 08:46:31 AM)
可以做成String然後給Android去切
要不然就是產生XML或json給Android去parse
你好 雖然不知道在寫什們==因為我是新新新新新手
在上面的文章我跟著照做
httpPostTest.htm
httpPostTest.PHP
這兩個跟著做好像是成功了
從httpPostTest.htm打字傳送到
httpPostTest.php應該是沒錯八@@"看了上面的對話
(案傳送後他自己跳httpPostTest.php)
可是問題就在這裡X-(
因為專題目的是Android傳送至MySQL資料庫
所以感覺這篇文章很贊可以先測試看看
所以我就把您的程式是用了一下
現在出現錯誤的地方是這邊
MAIN.JAVA的這三行前面都出現紅色的(X)
(X) setContentView(R.layout.main);
(X) txtMessage = (EditText) findViewById(R.id.txt_message);
(X) sendBtn = (Button) findViewById(R.id.send_btn);
另外這邊也有一個(X)程式執行不了
AndroidManifest.xml
(X) android:label="@string/app_name">
抱歉問題很多因為剛接觸程式這部份
沒學過這個所以看不懂這類的錯誤是什們意思
><可以的話麻連您是否哪邊出了錯
如果資料太大可以寄給我><
[email protected]
版主回覆:(05/22/2011 08:57:04 AM)
從res/layout/main.xml下手
xx都過了記得要project>clean
><板大有解嗎?
真的不知道這幾行錯宰哪!
麻煩板大一下
感謝無私分享
謝謝
可是我看我的
res/layout/main.xml裡面都沒出現XX呢!
要如何下手 不明白
抱歉真的不太懂 剛摸這個
版主回覆:(05/23/2011 06:41:40 AM)
按ctrl+b就有了
建議你先研讀版面設計和程式抓控制項的部分
這篇對你來說太困難了,慢點再看
版大寫得很好優~可是我的跑的程式依然只在手機上出現data=….,就是"印出網路回傳的文字"這部分,在網頁部分(php)還是沒有,我有透過html傳值是成功的,想要問一下是哪裡出了問題?如果想要知道連線有沒有建立成功要怎麼判斷呢??
感謝喔~~~~
版主回覆:(05/30/2011 06:43:09 AM)
html傳值跟android傳值這二者是沒有關係的唷
不是說html傳值成功,android傳值就會出現
網頁部分(php)一定不會有,因為你沒有傳值給他
傳值—-是單向的,從Client傳到Server,然後才從Server回傳結果給Client
這裡只是舉例說你可以"印出網路回傳的文字"
如果不要印出網路回傳文字,就要從 網頁部分(php) 下手
調整php程式碼
有沒有建立成功判斷可以用TCPView程式看看有沒有連進來
或是抓封包
所以對初學者比較簡單的方法,還是印出網路回傳的文字
如果沒有設定錯誤
就會看到一樣的東西
請問板大
如果要了解android的程式再寫些什們
還有要先讀版面設計+抓控制項的部份
有哪些書籍是您推薦比較好上手的媽?
謝謝版大回覆
版主回覆:(08/03/2011 01:30:32 PM)
我先說,我沒有在這裡幫那本書做廣告
就只是我看過的一些分享
——————-
Google! Android 2手機應用程式設計入門 / 蓋索林(Gasolin)著
松崗
封面有個布丁
這本講的比較淺顯易懂,在版面的部分講得比較多
其他的就有點少
——————-
Google Android手機APP開發入門 / 趙令文著
電腦人文化
封面有個大機器人
這本是講的比較全面一點
網路傳輸的範例光碟有漏
講View的章節有大表列出大部分常用的參數
以放layout檔居多,比較沒有逐行講解
——————-
Google Android SDK開發範例大全 佘志龍等人著
悅知文化
這篇的程式碼有參考這本書
這本以範例為主,不建議初學者看
因為會太眼花撩亂
有部分程式碼寫的有點怪,不過這範圍很全面
這本書章節更新變成第三版
——————-
前進 Android Market!Google Android SDK 實戰演練
何孟翰著
悅知
這本多加了雲端應用這部分
相對的基本的版面設計篇幅少了許多
供您參考
謝謝板大提供參考
有問題我再問您 謝謝
佛心來的教學文,一看就懂,非常清楚!!
萬分的感激阿~~
請問版主
您的
環境設定!
及
參數!
Android的部份
版主回覆:(08/16/2011 02:06:07 AM)
Project Name:隨便取
Package: com.J_Test.httpPostTest
建立Activity,名字: main
勾上Android 2.2 (API 8)
GOOD!!!!GOOD!!!
請問我照著上面做之後 當我按下模擬器傳值時 我的程式就會出現異常錯誤會中斷 我確定我 apache 有成功開啟 模擬器IP也更改過 但是還是不行 可以請問大概還有什麼原因會如此嗎?
版主回覆:(07/09/2011 11:22:26 PM)
錯誤訊息是?如果收到500伺服器內部錯誤表示你的PHP有錯
可以看php_error.log看看
版大..我照著你打的… 之後android 模擬器按send之後 它說xxx is not responed…我應該要怎樣處理><,,,求大大教學….
版主回覆:(07/15/2011 10:18:54 AM)
收到ANR(Activity Not Responed)?
用DDMS去看Log除錯…我有空再寫成一篇
最近比較忙
版大~我上面那篇的回文不要看(因為我耍笨了~哈哈哈)
我現在的問題是手機端可以按送出~下面也有顯示data=XXX
不過php網頁上卻沒有接收到~是怎麼回事呢?
版主回覆:(08/03/2011 01:28:48 PM)
php的部份要另外寫….
請問android的部分
按下送出後我會出現NullPointerException
初步猜測是75行產生例外,弄好久解決不了
請版大指點迷津
找到原因了
似乎只支援2.x版
版主回覆:(08/03/2011 01:32:52 PM)
專案是用Android 2.2去建的,不確定在2.2版本以下的能不能執行
但確定的是在2.2以上的版本是可以用的
再debug看看吧
1.我從Android傳至網頁,但是網頁收不到傳來直,但是我用網頁去傳,收的到值,不知道是哪裡出錯,Android是可以傳出來,但就是收不到
版主回覆:(08/03/2011 01:31:12 PM)
再試試看吧
請問若是用IIS的話 APACHE那邊的語法會變嗎?
版主回覆:(08/16/2011 02:03:30 AM)
會,你的語言就不會用PHP了
可能會改用ASP.net (C#/VB)或ASP
可以參考ASP的寫法,用Response.write
你好 我是超級新手 不好意思 有些笨問題想請教一下
想問一下如何把手機多筆輸入值(ex:id,name,email…)一個按鍵一次存入mysql中的同筆資料
還有如讀用手機透過php讀取資料庫的資料 謝謝
大大不好意思,經過以上測試結果都是成功的
但是若是要處理回傳值作為判斷的話
該使用甚麼語法來判斷傳質內容?
(以下1為PHP回傳直)
目前小弟測試用result.startsWith("1")
及result.equals("1")皆無法判別
還請大大賜教,謝謝!
版主回覆:(08/25/2011 01:41:14 PM)
Android的部份…..
回傳的是String,如果你傳的是數字 可以用Integer.parseInt()
先初始個預設值,然後parseInt(),接個Exception避免轉換時出錯
再拿來比對
您好,想問一下
如果是將httpPostTest.php 存放在Appserv底下的www可以嗎?有需要改什麼嗎?
版主回覆:(08/25/2011 01:35:59 PM)
直接擺上去即可因為我的範例沒有接資料庫
需要自己加上
請問httpPostTest.php沒有印出data內容,就是傳值失敗的意思嗎?
非常感謝~~
已解決!! 感謝大大指點
不過小弟還有一個問題煩請版主指點
若是回傳質為多筆
如何在手機以listview的方式接收並且呈現?
您好,想請問一下
我在android端執行,輸入文字後,手機的toast是出現"The operation time out"
想請問是哪裡出問題了?
apache確定有開啟
php也有放到資料夾
uriAPI 也有改
是android端程式的問題嗎?
版主回覆:(09/09/2011 05:13:02 AM)
你確定一下uriAPI是不是打成127.0.0.1或localhost?
可以試試看直接用android的瀏覽器瀏覽看看你打的網頁
(在php端修改一下,打點字上去,要不然android上會看到一片空白
因為根本沒有資料輸出呀)
確定android和伺服器之間溝通良好
uriAPI不能用127.0.0.1
因為這樣會指向android自己(不知道懂不懂我的意思)
附:網路權限也有設定了
你好!! 請問若以eclipse實作 伺服器端和httpPostTest的程式該寫在哪個開發工具裡呢 小弟是新新新新手…
上面的httpPostTest是httpPostTest.htm 不好意思~!
版主回覆:(09/13/2011 07:31:25 AM)
放在apache裡的htdoc裡
環境的話可以用xampp或是appserv
版大您好!
我的uriAPI是打自己電腦的IP位址,不是打127.0.0.1或localhost
我也有用android的瀏覽器開我打的網頁,是可以連接的
我之前是用android2.1版做測試
現在換成了android2.2版做測試,是沒有出現"The operation timed out"了
但是現在我輸入文字按送出後,toast是出現"i>>? data=hello"
資料還是沒有傳過去
請問版大知道問題出在哪裡嗎?
版主回覆:(09/13/2011 07:32:52 AM)
php的部分只是傳過去在印出來給你看
需要善加修改…加入sql處理insert的部分
Android達人大大~
哈哈~
你真的太酷嚕~-XD
我趕快來刺跨賣~
超感謝的ㄝ~
版主回覆:(09/19/2011 02:08:42 PM)
:目
感謝版大
成功了:)
版主回覆:(09/19/2011 02:08:57 PM)
🙂
版大您好,
想請問一下
為什麼"印出網路回傳的文字"會出現亂碼?
我在資料庫連線上設定
mysql_query("SET NAMES ‘utf-8’");
mysql_query("SET CHARACTER ‘utf-8’");
mysql_query("SET CHARACTER_SET_CLIENT=utf-8");
mysql_query("SET CHARACTER_SET_RESULTS=utf-8");
在android裡也有設定
httpRequest.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
但還是會出現亂碼,請問這是什麼問題呢?
版主回覆:(09/19/2011 02:12:35 PM)
看看資料庫的文字儲存是否為utf8_general_ci
再來還有PHP檔案的儲存時的編碼
notepad++打開來看的話應該要是ANSI as UTF-8
(純英文的文件會顯示ANSI除外)
不好意思
最後面三張圖
android傳值了之後 伺服端的網頁也會保存值嗎? 會像最後一張圖一樣顯示出來嗎?
請問你最後的圖是html傳的值還是android傳的值?
版主回覆:(09/23/2011 12:40:22 AM)
伺服端的網頁不會保存值嗎除非你用資料庫把它存起來
最後一張圖是html傳的值,是測試用
跟android無關
——————-
倒數第二張是Android用類似瀏覽器的方式傳值
這張是android傳的值
跟html無關
請問如果我想用POST的方法登入YAHOO帳號取得個人網頁資訊該如何實做呢?
版主回覆:(09/28/2011 03:44:04 AM)
這有困難….因為他們會加密
版大您好:
想教您幾個問題,
我在android端寫http post的方法
將資料傳到php接收
再用php把值存入資料庫
想請問
我在1.php 寫 session
在2.php echo出session的值
這是沒問題的
但是如果用android端做測試的話
會抓不到session的值
請問這個跟android端有關係嗎??
版主回覆:(09/30/2011 01:44:29 AM)
哈哈…被你發現到了
android是的確有這問題
不知道你對http連線的原理有沒有很了解?
伺服器使用session的話,session資料會存在伺服器上(這書上都有寫)
但是!!!!伺服器會傳一個session id給用戶端
(像是你去寄放物品的櫃台寄放東西,櫃台會交給你一把鑰匙一樣)
用鑰匙認顧客
回到Android…..伺服器有吐這把鑰匙給他,但他並沒有存下
不信的話你抓封包看看就知道了
在模擬器上面執行
會出現異常終止……
版主回覆:(10/04/2011 05:07:10 PM)
看DDMS的logcat
您好!我想請教一個問題
在android的模擬器上面執行
結果畫面出現的是
Connection to http://localhost:8080 refused
請問是哪個環節出了問題呢?
請給予指教,謝謝您
版主回覆:(10/04/2011 05:06:47 PM)
網址不能打localhost打實際IP
我想問一下…
以我理解…大大的文是不是在ANDROID傳DATA去PHP,
PHP再傳回"data = "另加在android打的字串?
如果是我想問一下,
如果將ANDROID的DATA送去PHP,之後用PHP記住DATA的內容…
好像HTML用POST的方式去PHP頁一樣….
您好:
我剛看到上面有人回應說要post到yahoo去登入,我也有相同疑問,只是說我想做的只是用手機登入一般私人網站,那我應該怎麼去撰寫程式碼呢?謝謝
今天再試終於明白,
原本PHP已經收到了值,
不過在網頁不能直接出,
只在ANDROID直接出,
用PHP的ISSET就看到其實有值在$_post[‘data’]
真的謝謝大大這個很有用的資訊
版主回覆:(01/23/2012 07:09:47 AM)
🙂
我想問一下:
ANDROID傳DATA去PHP
為什麼在網頁的部分沒辦法顯示?
版主回覆:(10/20/2011 03:58:12 PM)
請爬文,留言有回覆
請問一下版主有在4.0測試過嗎?
我是在4.0上用app會直接關閉掉
在2.3.3上測試是OK的@@
不知道版主有沒有問遇到這個問題
版主回覆:(05/13/2012 03:13:16 PM)
沒有測試過4.0耶,改天測試看看
—-
留言更新:
Android 4.0抓得比較嚴謹,沒有用執行緒不行
請參考新版文章
http://j796160836.pixnet.net/blog/post/30577968
對不起 想請問一下
如果兩個EditText 在傳遞的時候就必須要自己切嗎 有看到你提到JOSN的方式這個方式有具體的範例嗎??
版主回覆:(01/23/2012 06:59:27 AM)
JSON範例,敬請期待。
可以問你一下
伺服器那邊大概要怎麼判斷
android才能收到我想收到的東西呢…
因為都會收到PHP echo的全部程式碼
因為我主要是想要讓Android讀取資料庫的東西
想收到我指定的東西…
版主回覆:(01/23/2012 06:59:55 AM)
資料庫範例,敬請期待。
您好:請問我為何會出現"@drawable/icon"錯誤呢?謝謝
版主回覆:(01/23/2012 06:58:38 AM)
新版的Android SDK好像到R16版就將drawable底下的
icon.png改名叫ic_launcher.png了
先確認是否res/drawable資料夾(drawable/drawable-hdpi/drawable-ldpi/drawable-mdpi)底下
是否有icon.png這張圖
然後clean掉重新Build Project看看
如果找不到icon.png而有ic_launcher.png
改成@drawable/ic_launcher即可
先謝版主無私的分享
我有一個問題在取值的部分
有取到值,但也把原始碼給取了…
非常煩惱
環境:ASP.NET
code:
Response.Write("回傳值:" + strPost);
版主回覆:(01/23/2012 07:09:15 AM)
朋友使用ASP.net 有遇到像你一樣的問題
打開aspx的版面設計的原始碼 (會看到很多html語法)
刪除其html語法只剩下 類似以下的的語法
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="TestProject01._Default" %>
不能照樣copy唷,你專案的這一行會跟我的不一樣
再試試看
可以提供JSP網頁語法嗎?
目前我的JSP網頁顯示不出來我的資料
拜託! 可以幫幫我嗎?
非常感謝版主的答案
解決了
您好,感謝您的分享
如果角色對換,也就是 Server端: Android, 該如何實作?
版主回覆:(05/13/2012 03:18:38 PM)
好酷的功能唷!
我想這就要手動寫Socket了吧
模擬Apache伺服器的運作
學它一樣,收HTTP標頭,然後吐HTTP檔頭+內容回去
寫的時候要用writeByte()
改天有點空閒來寫這個範例
想請問版大 我試過用4.0是會有BUG的而改用2.3.3 是OK的
但是在send的時候他說的IP:xxx.xxx.xxx.xxx:80 refused
(是定址IP,PORT有無都一樣被拒),想請問會有可能是什麼原因??
版主回覆:(05/13/2012 03:12:18 PM)
Android 4.0抓得比較嚴謹,沒有用執行緒不行
請參考新版文章
http://j796160836.pixnet.net/blog/post/30577968
請問如果是HTTPS而不是HTTP
好像需要認證
該怎改寫?
謝謝板大!!
版主回覆:(05/13/2012 03:15:26 PM)
HTTPS很難處理,小弟也在突破中
版主請問
我用android模擬器打123.他會出現data=123
可是桌面瀏覽器要怎麼跟著顯示data=123
版主回覆:(05/13/2012 03:21:45 PM)
這實在是太多人問了(汗)
若原理會了,套這些應該不難才是
請參考
http://j796160836.pixnet.net/blog/post/30577968
真是佛心來的分享~一次到位~謝謝Johnny,
如果想要主動由PHP吐字串給android,有什麼作建議呢?
版主回覆:(05/13/2012 03:14:40 PM)
可以循環地向伺服器抓呀,這樣就會好像PHP吐字串給Android了
PHP是否也有能力,能觸發android ap去接受字串呢?
請問Server端用JSP該怎麼寫才和您的範例會有一樣的效果呢?
我用的是Android 2.1版
Server回傳時,連JSP中的換行符號會都顯示在模擬器中的訊息螢幕
版主回覆:(06/26/2012 03:29:58 AM)
最近比較忙,還沒有把JSP環境架設起來
可否你提供你的寫法給我研究一下呢?
大大你好
我用你的方法傳送參數到我指定的asp網頁
但是這樣只能知道有無接收成功
我需要的功能是在網頁顯示出傳送完的結果(前面做的是登入的動作)
該怎麼實現呢?
版主回覆:(06/26/2012 03:31:22 AM)
可以參考新版,有加上資料庫
http://j796160836.pixnet.net/blog/post/30577968
你好,上面有位朋友問,如果要將網頁的東西放入listview來呈現,該怎麼弄
傳到android的資料可能有多筆,類似:
123
456
789
000
111
都要將它們弄成listview來呈現
困擾好久了>"<
版主回覆:(06/27/2012 03:12:53 PM)
最簡單的方法,用字串全部串起來:
123,456,789,000,111
然後從Android收到之後再切開顯示
或是使用XML,JSON…..
Johnny大
我已經把Server上的問題解決了!
感謝您熱心提供經驗。
您好,
我是傳值到PHP上然後回傳字串給android
但是我想依照那字串做換頁的動作,可是好像無法去判斷成功
我在
if(result != null)
{
if(result=="回傳成功")
{ memberok();
}}
但是他都不會成功執行result=="回傳成功"這判斷式
我也有用一個TextView查看result,的確是回傳成功的字串沒錯
請問我該如何修改才能判斷字串
版主回覆:(07/07/2012 01:37:20 AM)
這是字串的位址(address)和值的差別
物件類的(包含string)在內,要比較相同值用.equals()
你可能要找些Java相關的書籍來看
if(result=="回傳成功")
改成
if(result.equals("回傳成功"))
您好
我在寫一個註冊的部分
流程大概是註冊(android) -> 寫入資料庫(php)
這部分沒什麼問題
但是在修改資料的時候取值就發生錯誤了
在取得之前註冊的資料(php從資料庫撈出來傳給android)的時候
取的值好像跟之前的不一樣(不是亂碼的問題,表面上看起來一樣)
但是我用php回傳的值做mysql搜尋會找不到那筆資料
想請問是php回傳時的問題嗎?
google很久了都找不太到解決的方法QAQ
感謝版主
版主回覆:(07/08/2012 03:39:30 PM)
可能我有點看不懂你敘述的方式,跟您分享一些debug上的技巧
取得之前註冊的資料(php從資料庫撈出來傳給android)
1. 這一段可以用瀏覽器去模擬Android去收php出來的資料
(光憑肉眼看html不準,要開原始碼來看)
2. 你可以試印看看當初查找的sql語法,把他丟進phpmyadmin看有沒有甚麼異狀
3. 至於編碼呢…剩下一個可能,Big5和UTF-8和Unicode的問題 (印象中好像是字碼不一樣),有個重點,UTF-8和Unicode感覺好像是一樣的,但其實不一樣 (曾經遇過類似的問題)
請問
從模擬器按下送出鍵之後,要在Toast看到輸入的值,並且在php網頁上看到財表示有輸入進去嗎?
我做出來是Toast跟php都沒看到輸入的值,但試用html就有看到
這些輸入的值是都會輸入到mysql資料庫嗎?
那可以從資料庫看到嗎?
謝謝:)
請問是否有提供JSP接收的語法呢?!
請問一下~如果說~我的填寫控格有2個以上~我不管怎麼測試!!
他都以data這個變數存取我的所有空格資料(我有在新增新的變數進去存資料)
版主回覆:(10/25/2012 03:29:28 AM)
可能是Android在列印的時候是data=XXXX
所以會誤認,查看看PHP的部份
大大你好
我的這行
sendBtn.setOnClickListener(this);他一職是錯誤
有顯示這行
The method setOnClickListener(View.OnClickListener) in the type View is not
applicable for the arguments (MainActivity)
版主回覆:(09/27/2012 01:57:19 AM)
你在import的時候,選到了
import android.content.DialogInterface.OnClickListener;
那個是給Dialog用的唷,正確的是
import android.view.View.OnClickListener;
平平都是OnClickListener,同款不同師傅XD
抓下來的資料是中文的,在手機顯示出來卻是"???"號!
如何解決?
MySQL資料庫設定校正: utf8_unicode_ci
為什麼一案送出程式就會停止?
版大您好,我有個問題想請教,我從android上按下送出文字,怎麼讓他轉到網上,顯示我剛剛在textView上打的文字呢?
這個有提到嗎?
不好意思,想請問一下。
我的網站適用ASP.NET架設的,
依照你的方法的確可以抓到手機端DATA的值。
但是我想問你,
有辦法將<%%>內抓取到的值(例如 你上面程式碼request.form的值data)
放到我UI介面Label中嗎? (如 Label.text=data的值)
因為小弟是新手,
所以想請幫忙解惑。
版主回覆:(07/04/2013 07:43:44 AM)
寫個Handler然後把資料放上去
詳細請參考另一篇
http://j796160836.pixnet.net/blog/post/28766165
我用範例程式碼
在手持裝置上會出現亂碼
後來把
String strResult = EntityUtils.toString(httpResponse.getEntity());
改成
String strResult = EntityUtils.toString(httpResponse.getEntity(), HTTP.UTF_8);
就好了
原因應該是只有送訊息是UTF8
取回訊息也應要使用UTF8
版主回覆:(12/23/2012 10:49:46 AM)
感謝Gohome大大分享指正
請問一下我Android手機模擬器可以把資料傳到資料庫去
但是我放到手機裡為什麼就會當機?
版主回覆:(12/23/2012 05:44:10 PM)
用DDMS的Logcat抓Log出來研究研究…
<html><head><title>Test web</
title><style type="text/
css">ol{margin:0;padding:0}.c15{vertical-align:top;width:420.8pt;border-style:solid;}
超長的
這是什麼意思?
版主回覆:(12/29/2012 03:05:47 AM)
html原始碼…建議找網頁語法相關的文章來看
http://www.powmo.com/
大大您好:請教一下是否可以SHARE上面一直在變胖變廋的android機器人,
好可愛哦
版主回覆:(07/04/2013 07:41:49 AM)
連我的招牌你也要?
好吧拿去吧
<embed src="http://www.android.com/swf/conveyor.swf" type="application/x-shockwave-flash" width="100%" height="90">
先感謝教學,網路上找好久只有你教怎麼送資料
我碰到的問題有3
1)我只要按下送出就會當掉
後來我測試了一番之後發現好像是例外接收中Toast裡的e.getMessage().toString()造成的,但是就是不知道為什麼會當。
把Toast整個刪除就不會當掉了
2)這時問題就來了,我現在不知道錯誤訊息是什麼
但是應該是後面回傳回應字串的部分造成的
刪除之後就不會跳出try了
3)排除之後問題又來了
我把我的PHP寫成這樣
<?php
//宣告utf-8的編碼
header("Content-Type:text/html; charset=utf-8");
$data=$_POST[‘data’];
echo "data=".$data;
$file = fopen("test.csv","w+"); //開啟檔案
fwrite($file,$data);
fclose($file);
?>
將接收到的data存成檔案
雖然把回傳回應訊息的程式碼砍了
程式也正常執行
但問題就是東西沒有寫進去
不知道是PHP的問題還是Android的問題
(ps 我沒學過PHP,是上網找code直接貼上的)
感恩~
版主回覆:(07/03/2013 01:10:45 PM)
1. 你可能是在網路送出的方法裡面寫上Toast
因為網路存取是跑在另一個Thread,它不能直接存取主執行緒的資料
你可以用Handler去解決
3. 看起來PHP沒什麼問題
應該問題出在Android那邊比較大
你說,雖然把回傳回應訊息的程式碼砍了
但我還是有看到echo呀
他還是會回傳資料
我剛剛測試過好像是api版本的問題
10以下是正常的
但是之後就會出問題
請問有解嗎?
http://stackoverflow.com/questions/14099880/httpresponse-execute-works-only-on-android-api-8-and-api-10
我找到這篇,修改之後就能運作了,雖然看不台董原理
版主回覆:(07/03/2013 01:03:53 PM)
您的網址它上面有寫,我大致翻譯一下
1) Don’t write network call in Main UI Thread, Use Async Task for that.
不要寫網路的Method在主執行緒,因為這樣主執行緒就有可能超過5秒,被系統刪掉
這也就是我文章裡一再提到的
2) Write below code into your MainActivity file after setContentView(R.layout.activity_main); but this is not proper way.
在onCreate()裡面加入以下的程式碼,但這不是很好的方法
這個code大致就是把這個檢查給過濾掉
就算是不正確的寫法也會通過
謝謝你的補充。
從 PHP 網頁上抓回來給 Android 的字串,居然無法與 Android 的 String 做 equals?
echo "成功" → String result 儲存 → result.equals("成功") → false
嘗試過中文、英文、數值的字串比較,依然無用
PHP網頁為 UTF-8編碼(無BOM)
順便一提,我朋友也有弄到這部分,但神奇的是他能equals 我卻不行,一堆人幫我看都看不出所以然,連寫成功的那位朋友都看不出來
版主回覆:(08/14/2013 12:54:04 PM)
你有把你的result印出來看看嗎?
你試試看在PHP那邊開頭加上
header(‘content-type:text/html;charset=utf-8’);
請問:
我的txtMessage=(EditText)findViewById(R.id.txt_message);
一直出現錯誤 顯示: R cannot be resolved to a variable
我該怎麼解決呢
大大我請問一下
為什麼我跑模擬起的時候會中斷
我確定我阿帕契有打開
E/Trace(966): error opening trace file: No such file or directory (2)
她顯示出來的錯誤(錯誤不只是這一行,因為有點多如果需要其他的錯誤不知道你有沒有信箱我記給你看)
請教版大:您的範例中只傳送一個欄位,若要傳送多個欄位(有文字也有數字),則原本範例中用來傳用的 txtMessage = (EditText) findViewById(R.id.txt_message); 及 msg = txtMessage.getEditableText().toString(); 該怎麼修改呢?謝謝版大的回覆
版主您好,
"
把寫好程式,取名httpPostTest.php
把他擺到htdoc底下 (windows)
"
不過我找不到htdoc的資料夾(我是用php寫)
版主回覆:(10/08/2013 01:21:07 PM)
這路徑會因為你裝不同套apache而有所不同
就我使用的xampp,預設路徑在
C:\xampp\htdocs
版主您好
想請問不知道為甚麼用電腦手機模擬器可以傳送
但將APK檔放入手機卻沒辦法傳送
感謝您
如果要設立兩個輸入框該怎麼做
我有回傳回來
文字1=4444
文字2=5555
但跑出data=4444 datb=
兩秒後變成data=5555 datb=
它們都只從data輸出而datb沒反應
不知道該怎麼 改
版主回覆:(08/13/2014 02:02:17 AM)
可以參考上面的留言回文
只要這個
params.add(new BasicNameValuePair("data", strTxt));
多加一行
而不是呼叫二次
加油
請問一下
怎麼把POST的值傳到下一頁的android?
想請教一下,如何可以釋放連線
其實是因為我有兩頁都有做連線,但是返回上一頁時
系統會說很抱歉已停止,請問這該如何解決?
不好意思請問一下 這可以用來當作Eclipse的雲端資料庫嗎?! 就是資料備份那些的
你好
我自己也有做了一個上傳的檔案
但是我送了一千多筆資料但接收的資料庫只有收到1X筆
想請教一下原因
讚 感謝板主
您好:
方便與你詢問應用問題嗎
請問版大,如果在HttpResponse httpResponse = httpclient.execute(method);
這行被丟出例外,是不是有可能為連結超時的問題呢?
如果是連結超時的問題,可能的狀況又有哪些呢?
請問一下 為什麼我import org.apache.http那幾段全部都是紅字的呢?
請問怎麼用PHP的語法撈資料然後顯示在android studio上?