1

こんにちは皆さん、JSONArray を php ページに送信しようとしています HTTP//1.1 200 を取得していますが、まだ php ページに表示できず、送信に成功したかどうかもわかりませんでした私のAndroidコードです

public void sendJson() {

                HttpClient client = new DefaultHttpClient();
                HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); //Timeout Limit
                HttpResponse response;

                try{
                    HttpPost post = new HttpPost("http://sap-sp-test.dff.jp/sp.php/ranking/index");
                    Log.i("entry", MixiActivity.entry.toString());

                    ArrayList<NameValuePair> nVP = new ArrayList<NameValuePair>(2);  
                    nVP.add(new BasicNameValuePair("json", MixiActivity.entry.toString()));
                    post.setEntity(new UrlEncodedFormEntity(nVP));
                    response = client.execute(post);
                    Log.i("postData", response.getStatusLine().toString());
                }
                catch(Exception e){
                    e.printStackTrace();
                    Log.i("error", e.getMessage());
                }

    }

PHP コード

$data =  $_POST['json'];
echo $data;

ここでいくつかの例を試しましたが、まだデータを送信できず、ログで印刷しようとするとJSON配列(MixiActivity.entry)が空ではありません。ログにはJSON配列の正しい値が表示されますが、できますPHP に送信しないでください。この問題を解決してください。

どうもありがとう

ニコ

4

2 に答える 2

2

このように post.setEntity() にエンコーディングを追加することができます...

post.setEntity(new UrlEncodedFormEntity(nameValuePairs, "utf-8"));

他のすべては私には問題ないように見えます。これが機能しない場合は、Android の JSON ライブラリを使用して直接エンコードし、そのデータを次のようにしてページに渡すこともできます。

HttpPost httppost = new HttpPost("http://your/url/path/");  
httppost.addHeader("Content-Type", "application/json");
httppost.setEntity(new ByteArrayEntity(json.toString().getBytes("UTF8")));

次に、phpでこのコードでアクセスできます

$json = file_get_contents('php://input');
$obj = json_decode($json);
$name = $obj->{'name'};

または

また、PHP ファイルで $_REQUEST を使用して get リクエストを作成したり、データにアクセスしたりすることもできます。使用しているものは、まさに必要なものです。

また

試してみてください これは動作するコードです...これは、データをファイルに渡すために直接使用できるクラスです。:: を使用して関数を静的に呼び出し、必要なすべての json クラスをインポートします

public class RestClient {

private static String convertStreamToString(InputStream is) {
    /*
     * To convert the InputStream to String we use the BufferedReader.readLine()
     * method. We iterate until the BufferedReader return null which means
     * there's no more data to read. Each line will appended to a StringBuilder
     * and returned as String.
     */
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    StringBuilder sb = new StringBuilder();

    String line = null;
    try {
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    return sb.toString();
}




public static String connectSend(){

    /*
    HttpParams httpparams = new BasicHttpParams();
    HttpConnectionParams.setConnectionTimeout(httpparams, 30000);
    HttpConnectionParams.setSoTimeout(httpparams, 30000);
    */

    HttpClient httpclient = new DefaultHttpClient();

    HttpPost httppost = new HttpPost("http://path/to/your/php/file");   

    httppost.addHeader("Content-Type", "application/json");

    JSONObject json = new JSONObject();
    try {
        json.put("item0", "data0");
        json.put("item1", "data1");
        json.put("item2", "data2");
        json.put("item3", "data3");
    } catch (JSONException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }


    try {
        httppost.setEntity(new ByteArrayEntity(json.toString().getBytes("UTF8")));
        //httppost.setHeader("json", json.toString());
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();
        if (entity != null) {
            InputStream instream = entity.getContent();
            String result = RestClient.convertStreamToString(instream);


            return result;
        }


    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return e.toString();
    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return e.toString();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return e.toString();
    } 
    catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 
    return "false";

}
于 2012-07-23T09:29:26.177 に答える
1

最後に、Android での http 投稿をあきらめました。現在、javascript を使用して Android から jsonarray を取得しています。

これとともに

public class JavaScriptInterface { コンテキスト mContext;

         JavaScriptInterface(Context c) {
             mContext = c;
         }

         public String load() {
             String JS = JsonArray.toString();
             return JS;
         } }

そしてHTMLで

 function loadJSON()        
{           
var jsonData = Android.load();
var myDictionary = [];          
myDictionary["jsonData"] = jsonData;

post(myDictionary, "http://sap-sp-test.dff.jp/sp.php/ranking/index?user_id=" + user_id+"&display_name=" + display_name + "&photo=" + photo +"&device=android", "post");         
}

PHPへの投稿には、javascriptでフォームPOSTを使用しています

function post(dictionary, url, method) 
        {
            method = method || "post"; // post (set to default) or get

            // Create the form object
            var form = document.createElement("form");
            form.setAttribute("method", method);
            form.setAttribute("action", url);

            // For each key-value pair
            for (key in dictionary) {
                //alert('key: ' + key + ', value:' + dictionary[key]); // debug
                var hiddenField = document.createElement("input");
                hiddenField.setAttribute("type", "hidden"); // 'hidden' is the less annoying html data control
                hiddenField.setAttribute("name", key);
                hiddenField.setAttribute("value", dictionary[key]);
                form.appendChild(hiddenField); // append the newly created control to the form
            }

            document.body.appendChild(form); // inject the form object into the body section
            form.submit();
        }

そしてjsonを受け取るためのPHPで

if($this->_getParam('device') == "android")
        {
            $data = $_POST["jsonData"];
            $data = stripslashes($data);
            $friends = $data;
        }

とにかく、この方法は私にとってはうまくいきます。マリアッチの助けに感謝します

于 2012-07-25T06:50:59.907 に答える