2016-05-26 33 views
0

私のWebサーバーにjsonオブジェクトを送信します。以前のバージョンのコードで、私はウェブサーバーに文字列を送信していました。オブジェクトを送信するためには機能しません。助けてください!ここjsonオブジェクトを投稿を使用してWebサーバーに送信する方法

package com.digitalapplication.eventmanager; 

import android.content.Context; 
import android.os.AsyncTask; 
import android.widget.Toast; 

import org.json.JSONObject; 

import java.io.BufferedWriter; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.io.OutputStreamWriter; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 


public class BackgroundTask extends AsyncTask<JSONObject,Void,String> { 
    Context ctx; 
    BackgroundTask(Context ctx) 
    { 
     this.ctx=ctx; 
    } 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
    } 

    @Override 
    protected String doInBackground(JSONObject... params) { 
     String inserturl="http://192.168.10.4/webapp/register.php"; 
     String method="register"; 
     if(method.equals("register")) 
     { 

      try { 
       URL url=new URL(inserturl); 
       HttpURLConnection httpURLConnection= (HttpURLConnection) url.openConnection(); 
       httpURLConnection.setRequestMethod("POST"); 
       httpURLConnection.setDoOutput(true); 
       OutputStream OS=httpURLConnection.getOutputStream(); 
       BufferedWriter bufferedWriter=new BufferedWriter(new OutputStreamWriter(OS,"UTF-8")); 

       bufferedWriter.write(params.toString()); 

       bufferedWriter.flush(); 
       bufferedWriter.close(); 
       OS.close(); 
       InputStream IS=httpURLConnection.getInputStream(); 
       IS.close(); 
       return "Data Saved in server..."; 
      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 

     return "not saved in server"; 
    } 

    @Override 
    protected void onProgressUpdate(Void... values) { 
     super.onProgressUpdate(values); 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     Toast.makeText(ctx, result,Toast.LENGTH_SHORT).show(); 
    } 


} 


     return "not saved in server"; 
    } 

は、ここでは、サーバー側のPHPスクリプトですBackgroundTaskのクラス

BackgroundTask backgroundTask=new BackgroundTask(this); 

       JSONObject jsonObject=new JSONObject(); 
       try { 
        jsonObject.put("gid","asd"); 
        jsonObject.put("uid","asdd"); 
        jsonObject.put("name","assgd"); 
        jsonObject.put("phone","agssd"); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
       backgroundTask.execute(jsonObject); 

の呼び出しです。

<?php 
$db_name="eventmanager"; 
$mysql_user="root"; 
$mysql_pass=""; 
$server_name="localhost"; 
$con=mysqli_connect($server_name, $mysql_user,$mysql_pass,$db_name); 
if(!$con){ 
    //echo"Connection Error...".mysqli_connect_error(); 
} 
else{ 
    //echo"<h3>Connection success....</h3>"; 
} 

?> 

そして

register.php

<?php 
    require "init.php"; 
    $obj = $_POST["obj"]; 
    $args = json_decode($obj, true); 
    foreach($args as $key=>$field){ 
     $gid = $field["gid"]; 
     $uid = $field["uid"]; 
     $name = $field["name"]; 
     $phone = $field["phone"]; 
     $sql_query="insert into groups values('$gid','$uid','$name','$phone');"; 
     mysqli_query($con,$sql_query); 

    } 

    ?> 
+0

詳細情報が必要な場合は、スタックトレースまたはサーバー側エラーを送信してください。 – JVXR

+0

通常の文字列で動作する場合は、json文字列で動作するはずです。あなたのオブジェクトを表す文字列をjson表記で送信してみてください。 – caburse

+0

単純な文字列の送信に使用されたencoder.encodeメソッドを削除しました。それはjsonオブジェクトを送信するために重要ですか? –

答えて

0

最後に解決策が見つかりました。私はサーバーに送信する前に、データをエンコードする次のコード行が欠落していました。

String data= URLEncoder.encode("obj", "UTF-8") +"="+URLEncoder.encode(params[0].toString(), "UTF-8"); 

       bufferedWriter.write(data); 
1

init.php

エラーは、あなたが見ているいただきました!私たちは、それ以上が必要になりますか?

楕円をパラメータとして使用しており、その上にtoStringを呼び出していることがわかったら編集します。それはあなたに[Ljava.lang.String; @ 659e0bfdのような出力を与えるだけです。これは有効なjsonではありません。お試しください。

params[0].toString() 

+0

これは答えではありません。あなたはほぼ1000の評判を持ち、コメントする方法を知らないのですか? – Vucko

+0

私の悪い、間違ったウィンドウ - それをコメントに移動する。 – JVXR

+0

エラーは表示されません。それで私は問題を理解できないのです... –

1

AsyncTaskでこの方法を試してください。これは機能的な例です。

// ...... 
private static final String USER_AGENT = "Mozilla/5.0"; 

public static String sendPost(String url, String data) throws Exception { 

    HttpURLConnection con = (HttpURLConnection) new URL(url).openConnection(); 

    con.setRequestProperty("User-Agent", USER_AGENT); 
    con.setRequestProperty("Accept","*/*"); 
    con.setRequestProperty("Content-Type","application/json"); 

    con.setDoOutput(true); 
    con.setDoInput(true); 

    DataOutputStream wr = new DataOutputStream(con.getOutputStream()); 
    wr.writeBytes(data); 
    wr.flush(); 
    wr.close(); 
    data = null; 

    System.out.println("\nSending 'POST' request to URL : " + url); 

    InputStream it = con.getInputStream(); 
    InputStreamReader inputs = new InputStreamReader(it); 

    BufferedReader in = new BufferedReader(inputs); 
    String inputLine; 
    StringBuffer response = new StringBuffer(); 

    while ((inputLine = in.readLine()) != null) { 
     response.append(inputLine); 
    } 

    in.close(); 

    System.out.println("Server says : " + response.toString()); 
    return response.toString(); 
} 

コードはよく見えますが、これを試してみましょう。これが失敗すると、サーバーに問題があります。

サーバーに出力がある場合は、投稿してください。または、データベースの挿入前にPHPスクリプトの値を出力して、実際に値が到着しているかどうかを確認することもできます。

+0

私はこのコードを試しましたが、新しいものはありませんでした。データが送信されませんでした... –

関連する問題