我正在尝试与php服务器和android进行通信
这是我的JAVA文件和php
//使用gson库将数据转换为Json。 - >没关系!
String str = new TOJSON().tojson("testName", "TestPW", "testEmail", 77);
USERDATA userdata = gson.fromJson(new HTTPCONNECTION().httpPost("http://testsever.com/test.php", str).toString(), USERDATA.class);
textView textView = (TextView)findViewById(R.id.textView1);
textView.setText(userdata.getName());
//连接php服务器
public class HTTPCONNECTION {
public String httpPost(String url, String str){
HttpClient client = new DefaultHttpClient();
HttpConnectionParams.setConnectionTimeout(client.getParams(), 30000);
HttpResponse response;
try {
HttpPost httppost = new HttpPost(url);
StringEntity entity = new StringEntity(str, "UTF-8");
entity.setContentType("application/json");
httppost.setEntity(entity);
HttpResponse httpResponse = client.execute(httppost);
HttpEntity httpEntity = httpResponse.getEntity();
Log.v("OWL", EntityUtils.toString(httpEntity));
return EntityUtils.toString(httpEntity);
}
catch (ClientProtocolException e) {
e.printStackTrace();
return null;
}
catch (IOException e) {
e.printStackTrace();
return null;
}
}
和php文件获取json数据并发送json数据进行测试
$value = json_decode(stripslashes($_POST), true);
echo (json_encode($value));
答案 0 :(得分:1)
在我的情况下,我使用
$_POST = json_decode(file_get_contents("php://input"));
在Android端
StringEntity se = new StringEntity(jsonObject.toString(),
HTTP.UTF_8);
se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE,
"application/json"));
request.setEntity(se);
PHP手册 - Input/Output PHP Streams
从Android
向服务器发送POST JSON数据的完整功能源public static void restApiJsonPOSTRequest(
final DefaultHttpClient httpclient, final HttpPost request,
final JSONObject jsonObject, final Handler responder,
final int responseCode, final int packetSize) {
new Thread(new Runnable() {
@Override
public void run() {
try {
try {
StringEntity se = new StringEntity(jsonObject
.toString(), HTTP.UTF_8);
se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE,
"application/json"));
request.setEntity(se);
HttpResponse response = httpclient.execute(request);
HttpEntity entity = response.getEntity();
if (entity != null) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataInputStream dis = new DataInputStream(entity
.getContent());
byte[] buffer = new byte[packetSize];// In bytes
int realyReaded;
double contentSize = entity.getContentLength();
double readed = 0L;
while ((realyReaded = dis.read(buffer)) > -1) {
baos.write(buffer, 0, realyReaded);
readed += realyReaded;
sendDownloadingMessage(responder,
(double) contentSize, readed);
}
sendCompleteMessage(responder,
new InternetResponse(baos, responseCode,
request.getURI().toString()));
} else {
sendErrorMessage(responseCode, responder,
new Exception("Null"), request.getURI()
.toString());
}
} catch (ClientProtocolException e) {
sendErrorMessage(responseCode, responder, e, request
.getURI().toString());
} catch (IOException e) {
sendErrorMessage(responseCode, responder, e, request
.getURI().toString());
} finally {
httpclient.getConnectionManager().shutdown();
}
} catch (NullPointerException ex) {
sendErrorMessage(responseCode, responder, ex, request
.getURI().toString());
}
}
}).start();
}
或不同的方式
public static void postJSONObject(final String url,
final Handler responder, final int responseCode,
final int packetSize, final JSONObject jsonObject,
final URLConnection connection) {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println(connection);
sendConnectingMessage(responder);
PrintWriter writer = null;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
HttpURLConnection htt = (HttpURLConnection) connection;
htt.setRequestMethod("POST");
OutputStream output = connection.getOutputStream(); // exception
// throws
// here
writer = new PrintWriter(new OutputStreamWriter(output,
"UTF-8"), true); // true = autoFlush, important!
String strJson = jsonObject.toString();
output.write(strJson.getBytes("UTF-8"));
output.flush();
System.out.println(htt.getResponseCode());
// Read resposne
baos = new ByteArrayOutputStream();
DataInputStream dis = new DataInputStream(
connection.getInputStream());
byte[] buffer = new byte[packetSize];// In bytes
int realyReaded;
double contentSize = connection.getContentLength();
double readed = 0L;
while ((realyReaded = dis.read(buffer)) > -1) {
baos.write(buffer, 0, realyReaded);
readed += realyReaded;
sendDownloadingMessage(responder, (double) contentSize,
readed);
}
sendCompleteMessage(responder, new InternetResponse(baos,
responseCode, url));
} catch (Exception e) {
sendErrorMessage(responseCode, responder, e, url);
} finally {
if (writer != null) {
writer.close();
}
}
}
}).start();
}