我无法获得一个简单的JSONObject的androID POST,以显示在服务器上的$_POST数据中.服务器是PHP 5.3.4,androID端是SDK 8模拟器.我可以像往常一样发布一个简单的nameValuePair,但是当我切换到你在下面看到的JsONObject StringEntity时,$_POST数组显示{}.继续在我的测试PHP页面上运行下面的代码.它有一个$_POST和$_SERVER的var_dump,以及搜索其中一个预期的键(’email’).你会看到我尝试了很多’ContentType’,看看是不是问题.我甚至使用WireShark来验证客户端和服务器之间的TCP会话是否正常. POST数据在那里,但它没有显示在服务器的变量中.我被困了…感谢您提供的任何帮助.
import java.io.inputStream;import org.apache.http.httpResponse;import org.apache.http.clIEnt.httpClIEnt;import org.apache.http.clIEnt.methods.httpPost;import org.apache.http.entity.StringEntity;import org.apache.http.impl.clIEnt.DefaulthttpClIEnt;import org.apache.http.params.httpconnectionParams;import org.Json.JsONObject;import androID.util.Log;public class TestPOST { protected static voID sendJson (final String email, final String pwd) { httpClIEnt clIEnt = new DefaulthttpClIEnt(); httpconnectionParams.setConnectionTimeout(clIEnt.getParams(), 10000); //Timeout limit httpResponse response; String URL = "http://web-billings.com/testPost.PHP"; try{ httpPost post = new httpPost(URL); // nameValuePair That is working fine... //List<nameValuePair> nameValuePairs = new ArrayList<nameValuePair>(2); //nameValuePairs.add(new BasicnameValuePair("email", email)); //nameValuePairs.add(new BasicnameValuePair("password", pwd)); //post.setEntity(new UrlEncodedFormEntity(nameValuePairs)); //Log.i("main", "P2DB - String entity 'se' = "+nameValuePairs.toString()); JsONObject jObject = new JsONObject(); jObject.put("email", email); jObject.put("password", pwd); StringEntity se = new StringEntity(jObject.toString()); //se.setContentType("charset=UTF-8"); se.setContentType("application/Json;charset=UTF-8"); //se.setContentType("application/Json"); //se.setContentType("application/x-www-form-urlencoded"); post.setEntity(se); Log.i("main", "TestPOST - String entity 'se' = "+GetInvoices.convertStreamToString(se.getContent())); response = clIEnt.execute(post); /*Checking response */ if(response!=null){ inputStream in = response.getEntity().getContent(); //Get the data in the entity String message = GetInvoices.convertStreamToString(in); Log.i("main", "P2DB - Connect response = "+message); } } catch(Exception e){ e.printstacktrace(); //createDialog("Error", "Cannot Establish Connection"); } }}
@H_301_7@如果你喜欢,这是testPost.PHP页面:
<?PHP echo "\r\n<pre>\r\n"; var_dump("$_POST = ", $_POST)."\r\n"; echo '$_POST[\'email\'] = '.$_POST['email']."\r\n"; var_dump("$_SERVER = ", $_SERVER)."\r\n"; echo '</pre>'; dIE; ?>
@H_301_7@解决方法:
从我所看到的,httpPost.setEntity设置请求的主体,没有任何名称/值配对,只是原始的帖子数据. $_POST不查找原始数据,只查找名称值对,它将转换为哈希表/数组.您有两个选择…要么处理原始发布数据,要么格式化请求以使其包含名称值对.
AndroID / Java,名称值对示例:
httpClIEnt httpclIEnt = new DefaulthttpClIEnt(); httpPost httppost = new httpPost("http://web-billings.com/testPost.PHP"); List<nameValuePair> nameValuePairs = new ArrayList<nameValuePair>(2); nameValuePairs.add(new BasicnameValuePair("Jsondata", se)); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
@H_301_7@PHP中的原始后期数据访问:
$Json = file_get_contents('PHP://input');
@H_301_7@ 总结以上是内存溢出为你收集整理的将android JSONObject发布到PHP的问题全部内容,希望文章能够帮你解决将android JSONObject发布到PHP的问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)