如何获得Json数据与php从Android使用POST方法


How to get Json DATA with php from Android using POST method?

我正在尝试与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));

在PHP的例子中,我使用

 $_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手册-输入/输出PHP流

从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();
    }