作者sky8031358 (喚月楓晴)
看板AndroidDev
標題[問題] Android和php連接問題
時間Thu Aug 20 13:01:35 2015
小的我參考:
http://goo.gl/ti5Yg網站範例做程式
完成後沒有顯示錯誤訊息
模擬器的Toast也有正確顯示出輸入的訊息,但網頁顯示不出結果
以下是我的程式碼:
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
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.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity implements OnClickListener{
private EditText txtMessage;
private Button sendBtn;
private String uriAPI = "
http://localhost/httpPostTest.php";
protected static final int REFRESH_DATA = 0x00000001;
Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg)
{
switch(msg.what)
{
case REFRESH_DATA:
String result = null;
if(msg.obj instanceof String)
result = (String)msg.obj;
if(result != null)
Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show();
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtMessage = (EditText)findViewById(R.id.txt_message);
sendBtn = (Button)findViewById(R.id.send_btn);
if (sendBtn != null)
{
sendBtn.setOnClickListener(this);
}
}
@Override
public void onClick(View v) {
if(v ==sendBtn){
if (txtMessage!=null)
{
String msg=txtMessage.getEditableText().toString();
Thread t = new Thread(new sendPostRunnable(msg));
t.start();
}
}
}
private String sendPostDataToInternet(String strTxt)
{
HttpPost httpRequest = new HttpPost(uriAPI);
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("data",strTxt));
try
{
httpRequest.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8));
HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequest);
if (httpResponse.getStatusLine().getStatusCode() == 200)
{
String strResult = EntityUtils.toString(httpResponse.getEntity());
return strResult;
}}
catch (Exception e)
{
Toast.makeText(this, e.getMessage().toString(), Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
return null;
}
class sendPostRunnable implements Runnable{
String strTxt = null;
public sendPostRunnable(String strTxt)
{
this.strTxt = strTxt;
}
@Override
public void run() {
String result = sendPostDataToInternet(strTxt);
mHandler.obtainMessage(REFRESH_DATA,result).sendToTarget();
}
}
}
這是PHP的部分:
<?php
header("Content-Type:text/html;charset=utf-8");
$data=$_POST['data'];
echo "data=".$data;
?> 還煩請各位大大指點
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.128.80.193
※ 文章網址: https://www.ptt.cc/bbs/AndroidDev/M.1440046898.A.923.html
→ loxyz: 1. 加log看.....getStatusCode() 是不是200 08/20 13:26
→ loxyz: 2. 加log看 strResult 是什麼 08/20 13:27
→ stevekevin10: 為啥你會認為網頁能輸出你要的資料....? 08/21 04:43
→ stevekevin10: 你load該網頁時是沒有接到post的啊 08/21 04:43
推 ckvir: 你搞錯了,你把 echo 改成寫檔就知道有沒有了 08/21 11:04
→ y3k: 推薦你用httpbin.org去測試 就知道是哪邊的問題 08/21 16:55