Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.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 将JSON发布到Web服务_Java_Android_Json_Post - Fatal编程技术网

Java 将JSON发布到Web服务

Java 将JSON发布到Web服务,java,android,json,post,Java,Android,Json,Post,我正在尝试使用此代码连接到web服务并发布JSON,但我不知道我做错了什么。[编辑]我使用HTTPClient编写了同一个类,它工作正常,但由于httpURLConnect是google关注的重点,我将它改为使用它 问题是,我是否发送格式正确的json?我发送到服务器的方式正确吗?我已经标出了问题区域 这是我用来连接和发布json的助手类: package com.example.connecttohtml; import java.io.BufferedReader; import java

我正在尝试使用此代码连接到web服务并发布JSON,但我不知道我做错了什么。[编辑]我使用HTTPClient编写了同一个类,它工作正常,但由于httpURLConnect是google关注的重点,我将它改为使用它

问题是,我是否发送格式正确的json?我发送到服务器的方式正确吗?我已经标出了问题区域 这是我用来连接和发布json的助手类:

package com.example.connecttohtml;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;

import org.json.JSONArray;
import org.json.JSONObject;

import android.util.Log;
import android.widget.Toast;


public class HtmlHelper {
    public static JSONArray getData(RequestPackage p){
        JSONArray jsonArray;
        BufferedReader readData = null;
        String uri = p.getUri();

        if(p.getMethod().equals("GET")){
            uri += "?" + p.getEncodedParams();
        }

        try{
            URL url = new URL(uri);
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();
            conn.setRequestMethod(p.getMethod());
            conn.setRequestProperty("Content-Type", "application/json");

            Log.d("getParams", p.getEncodedParams().toString());
            JSONObject json = new JSONObject(p.getParams());
            String params = json.toString();

    ////THIS IS THE PART IM NOT SURE OF///////////////////////      
            if (p.getMethod().equals("POST")){

                conn.setDoOutput(true);
                OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
                Log.d("jsonPassed", params);
                writer.write(params);
                writer.flush();
            }
//////////////////////////////////////END///////

            StringBuilder sb = new StringBuilder();
            readData = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String line;
            while((line = readData.readLine()) != null){
                sb.append(line + "\n");
            }
            jsonArray = new JSONArray(sb.toString());
            return jsonArray;

        }catch(Exception e){
            e.printStackTrace();
            return null;
        }finally{
            if(readData !=null){
                try {
                    readData.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
}
这是RequestPackage类实现代码:

package com.example.connecttohtml;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;

public class RequestPackage {
    private String uri;
    private String method = "GET";
    private Map<String, String> params = new HashMap<String, String>();
    public String getUri() {
        return uri;
    }
    public void setUri(String uri) {
        this.uri = uri;
    }
    public String getMethod() {
        return method;
    }
    public void setMethod(String method) {
        this.method = method;
    }
    public Map<String, String> getParams() {
        return params;
    }
    public void setParams(Map<String, String> params) {
        this.params = params;
    }

    public void setParam(String key, String value){
        params.put(key, value);
    }

    public String getEncodedParams(){
        StringBuilder sb = new StringBuilder();

        for(String key : params.keySet()){
            String value = null;
            try {
                value = URLEncoder.encode(params.get(key), "UTF-8");
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            if(sb.length()> 0 ){
                sb.append("&");
            }       
            sb.append(key + "=" + value);
        }
        return sb.toString();
    }//getEncodedParams
}
package com.example.connecttohtml;
导入java.io.UnsupportedEncodingException;
导入java.net.urlcoder;
导入java.util.HashMap;
导入java.util.Map;
公共类请求包{
私有字符串uri;
私有字符串方法=“GET”;
private Map params=new HashMap();
公共字符串getUri(){
返回uri;
}
公共void setUri(字符串uri){
this.uri=uri;
}
公共字符串getMethod(){
返回法;
}
公共void集合方法(字符串方法){
这个方法=方法;
}
公共映射getParams(){
返回参数;
}
公共void setParams(映射参数){
this.params=params;
}
public void setParam(字符串键、字符串值){
参数put(键、值);
}
公共字符串getEncodedParams(){
StringBuilder sb=新的StringBuilder();
for(字符串键:params.keySet()){
字符串值=null;
试一试{
value=URLEncoder.encode(参数get(键),“UTF-8”);
}捕获(不支持的编码异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
如果(sb.length()>0){
某人附加(“&”);
}       
sb.追加(键+“=”+值);
}
使某人返回字符串();
}//getEncodedParams
}

Hmmm,“让我发布一大堆代码,让其他人解决问题”并不是stackoverflow的真正目的。您需要描述实际问题,告诉我们您尝试了什么,哪里出了问题,并添加一些简单、相关的代码。此外,在代码中添加脏话/脏话不太可能让人们帮助您……我已经对代码进行了编辑。说脏话不是故意的。这已经是我的代码的一部分,我忘记在摆姿势之前对其进行更改。请使用poster或其他post客户端,验证您的API是否按预期工作,或记录“jsonArray=new jsonArray(sb.toString());”的结果,以获取您的答复。我不知道出了什么问题,但今天早上我重新运行了代码,它运行得非常好。