Java 将JSON发布到Web服务
我正在尝试使用此代码连接到web服务并发布JSON,但我不知道我做错了什么。[编辑]我使用HTTPClient编写了同一个类,它工作正常,但由于httpURLConnect是google关注的重点,我将它改为使用它 问题是,我是否发送格式正确的json?我发送到服务器的方式正确吗?我已经标出了问题区域 这是我用来连接和发布json的助手类: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
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());”的结果,以获取您的答复。我不知道出了什么问题,但今天早上我重新运行了代码,它运行得非常好。