[問題] 傳值給PHP再接收回傳值

作者: Kanamehomura (ほむら)   2021-04-29 23:21:41
各位大大好,又來問問題了
目前android還是初心者但PHP算是熟的狀態
排版爛先說抱歉
想問android的問題:
我現在想做的是登入系統用POST傳帳號密碼給PHP再回傳OK之類的
讓android端可以判斷後登入到主頁
但是好像POST傳值後android端就不會做事了想要解決這個問題
我可以接收值 也可以POST傳值
但要把這兩件事寫在同一個執行緒就不會了
附上程式碼
也是網路上拿來改一下的
這是要讀取用的java
只取連線的一部分不是完整程式碼
這一段我可以讀PHP echo的內容
private Runnable mutiThread = new Runnable(){
public void run()
{
try {
URL url = new URL("要連結的PHP");
// 開始宣告 HTTP 連線需要的物件,這邊通常都是一綑的
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// 建立 HttpURLConnection 物件
connection.setRequestMethod("POST");
// 設定連線方式為 POST
connection.setDoOutput(true); // 允許輸出
connection.setDoInput(true); // 允許讀入
connection.setUseCaches(false); // 不使用快取
connection.connect(); // 開始連線
int responseCode =connection.getResponseCode();
// 建立取得回應的物件
if(responseCode ==
HttpURLConnection.HTTP_OK){
// 如果 HTTP 回傳狀態是 OK ,而不是 Error
InputStream inputStream = connection.getInputStream();
// 取得輸入串流
BufferedReader bufReader = new BufferedReader(new InputStreamReader(inputStream, "utf-8"), 8);
// 讀取輸入串流的資料
String box = ""; // 宣告存放用字串
String line = null; // 宣告讀取用的字串
while((line = bufReader.readLine()) != null) {
box += line + "\n";
// 每當讀取出一列,就加到存放字串後面
}
inputStream.close(); // 關閉輸入串流
result = box; // 把存放用字串放到全域變數
}
// 讀取輸入串流並存到字串的部分
} catch(Exception e) {
result = e.toString(); // 如果出事,回傳錯誤訊息
}
// 當這個執行緒完全跑完後執行
runOnUiThread(new Runnable() {
public void run() {
data.setText(result); // 更改顯示文字
}
});
}
};
另外一個是用POST新增資料到資料庫的
Toast就不會顯示 可能是在執行緒的關係 我想看result但是那一段好像沒有執行
還是result是空的
如果能接收result那我的問題大概解決
private Runnable mutiThread = new Runnable(){
public void run(){
try{
// 地址
final String PostUrl = "新增資料的PHP";
// 建一个Http请求
HttpPost httprequest = new HttpPost(PostUrl);
List postparams = new ArrayList();
postparams.add(new BasicNameValuePair("user",user.getText().toString()));
// 添加必须的參數
postparams.add(new BasicNameValuePair("password",password.getText().toString()));
httprequest.setEntity(new UrlEncodedFormEntity(postparams, HTTP.UTF_8));
HttpResponse httpResponse = new DefaultHttpClient().execute(httprequest);
// 發送請求
// 返回的内容
String result = EntityUtils.toString(httpResponse.getEntity());
Toast.makeText(當前頁面.this,result,Toast.LENGTH_SHORT).show();
}catch (Exception e) {
}
}};
作者: pttworld (批踢踢世界)   2021-04-30 06:56:00
你可以用loopj這個library,你的問題關鍵字是webservice
作者: JimRoid (小綿綿)   2021-04-30 23:42:00
這個已經被捨棄了,用用看Retrofit,教學不少
作者: Kanamehomura (ほむら)   2021-04-30 23:53:00
已經被捨棄了嗎(哭
作者: zcbxvsdf (東北一頭羊)   2021-05-01 11:42:00
https://i.imgur.com/fBX2KRz.jpg你現在應該學會如何下中斷點去看程式運作順序
作者: Kanamehomura (ほむら)   2021-05-02 13:19:00
感謝各位指教
作者: LiHowDie (我要堅強 我可以)   2021-05-03 15:16:00
現在主流應該都是用 coroutine + retrofit
作者: zcbxvsdf (東北一頭羊)   2021-05-03 17:09:00
樓上就是在說新穎的東西,coroutine講一篇都講不完
作者: paul7322000 (風飄雪夜)   2021-05-05 13:35:00
樓上高手給推
作者: pinefruit (莫使惹塵埃)   2021-05-05 23:59:00
DefaultHttpClient 已經被官方移除了沒錯,但HttpURLConnection 還是可以用的,也能用來 post data你的程式碼看不出明顯的問題,真要說的話,目前最大的問題是在背景執行緒中顯示 Toast,先避免這麼做吧。
作者: Kanamehomura (ほむら)   2021-05-06 12:53:00
toast是有改了 不過還是收不到result 換okhttp還是有一些bug 我先寫別的程式QQ

Links booklink

Contact Us: admin [ a t ] ucptt.com