Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用post将json对象发送到Web服务器_Java_Android_Json_Jsonobject - Fatal编程技术网

Java 如何使用post将json对象发送到Web服务器

Java 如何使用post将json对象发送到Web服务器,java,android,json,jsonobject,Java,Android,Json,Jsonobject,我想将json对象发送到我的Web服务器。我在以前版本的代码中做了一些更改,我将字符串发送到我的Web服务器。但它不适用于发送对象。请帮忙 package com.digitalapplication.eventmanager; import android.content.Context; import android.os.AsyncTask; import android.widget.Toast; import org.json.JSONObject; import java.io

我想将json对象发送到我的Web服务器。我在以前版本的代码中做了一些更改,我将字符串发送到我的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脚本

init.php

<?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);

    }

    ?>

我们需要的不仅仅是这些,您看到的错误是什么

如果您看到正在使用省略号作为参数并在其上调用toString,请进行编辑。这只会给您一个类似于[Ljava.lang.String;@659e0bfd]的输出,它不是有效的json。试试看

params[0].toString()

看看它是否有效。

我们需要的不仅仅是这些,您看到的错误是什么

如果您看到正在使用省略号作为参数并在其上调用toString,请进行编辑。这样只会得到类似[Ljava.lang.String;@659e0bfd]的输出,这不是有效的json。请重试

params[0].toString()

然后看看它是否有效。

在您的
异步任务中尝试使用此方法,这是一个功能示例

// ......
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脚本中的值,以查看值是否真的到达。

尝试在
异步任务中使用此方法,这是一个功能示例

// ......
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脚本中的值,以查看值是否真的到达。

最后我找到了解决方案。我缺少以下代码行,这些代码将在将数据发送到服务器之前对数据进行编码

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

                bufferedWriter.write(data);

最后我找到了解决方案。我缺少以下代码行,这些代码将在将数据发送到服务器之前对数据进行编码

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

                bufferedWriter.write(data);

这不是答案。你几乎有1000个名声,不知道如何评论?我是json新手。有人能告诉我我的代码是否以正确的方式编写吗?你能做一个System.out.println(params[0]).toString()吗)然后将响应粘贴到这里?这不是答案。你几乎有1000个名声,不知道如何评论?我是json新手。有人能告诉我我的代码是否以正确的方式编写吗?你能做一个System.out.println(params[0]).toString()吗)并将响应粘贴到此处?需要更多信息,请发布stacktrace或服务器端错误。如果它适用于常规字符串,则应适用于json字符串。尝试发送一个用json符号表示对象的字符串。我删除了用于发送简单字符串的encoder.encode方法。这对发送json对象重要吗??@JVXR Plz立即检查您可以尝试使用web代理/流量检查器(例如Fiddler、Wireshark等)要验证JSON是否实际被发送并包含您期望的信息。需要更多信息,请发布stacktrace或服务器端错误。如果它适用于常规字符串,则应适用于您的JSON字符串。尝试发送一个用JSON符号表示对象的字符串。我删除了用于发送JSON的encoder.encode方法imple string.这对发送json对象很重要吗???@JVXR Plz立即检查您可以尝试使用web代理/流量检查器(如Fiddler、Wireshark等)验证json是否确实在发送,是否包含您期望的信息。