如何使用POST方法从Android获取Json DATA?

时间:2013-03-18 05:04:30

标签: php android json

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

1 个答案:

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