发送HTTP POST和处理JSON响应
所以我从来没有使用过HTTP后,我需要发送一个响应,并从相同的接收响应。这里是我提供的文档:发送HTTP POST和处理JSON响应
编辑:此代码示例来自Microsoft Azure机器学习,我必须将其集成到我的Android应用程序来做数据预测。
URL
https://**api-version=2.0&details=true
请求
"Inputs": {
"input1": {
"ColumnNames": [
"Light",
"Proximity",
"Ax",
"Ay",
"Az",
"Gx",
"Gy",
"Gz"
],
"Values": [
[
"0",
"0",
"0",
"0",
"0",
"0",
"0",
"0"
],
[
"0",
"0",
"0",
"0",
"0",
"0",
"0",
"0"
]
]
}
},
"GlobalParameters": {}
}
样品响应
{
"Results": {
"output1": {
"type": "DataTable",
"value": {
"ColumnNames": [
"Scored Probabilities for Class \"BackPocket\"",
"Scored Probabilities for Class \"Ear\"",
"Scored Probabilities for Class \"Handbag\"",
"Scored Probabilities for Class \"SidePocket\"",
"Scored Labels"
],
"ColumnTypes": [
"Numeric",
"Numeric",
"Numeric",
"Numeric",
"Categorical"
],
"Values": [
[
"0",
"0",
"0",
"0",
"BackPocket"
],
[
"0",
"0",
"0",
"0",
"BackPocket"
]
]
}
}
}
}
如何以Java/Android方式发送此Post Request,然后处理响应?
我完全陌生,因此我不知道。我没有搜索HTTP POST等,但无法找到足够的发送和接收响应。任何图书馆的建议也非常感谢。
谢谢。
有很多HTTP连接库。你可以用他们任何一个:
OkHttp - 非常强大和简单的库。你可以找到很多关于它的page
改造图书馆的例子自带OkHttp和包装要求到接口Retrofit Link
为了对付JSON,我建议你使用GSON library
所以处理您的问题的基本算法如下:
- 用gett创建GSON模型文件ERS和setter
- 与方法创建HTTP调用你需要
- 拨打电话和接收请求(这样做不是在UI线程)
- 与创建getter方法解析请求/ setter方法
下面是一个例子请求使用Google的Volley作为http请求,使用Gson将json数据转换为对象。如果您打算使用Gson,则需要创建表示json数据的pojos。
你输入的数据是相当混乱,我没有尝试转换,从一个POJO,那是读者的练习;)
String request = "{\"Inputs\":{\"input1\":{\"ColumnNames\":[\"Light\",\"Proximity\",\"Ax\",\"Ay\",\"Az\",\"Gx\",\"Gy\",\"Gz\"],\"Values\":[[\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\"],[\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\"]]}},\"GlobalParameters\":{}}";
Context appContext = InstrumentationRegistry.getTargetContext();
String url ="https://**api-version=2.0&details=true";
RequestQueue queue = Volley.newRequestQueue(appContext);
StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("TAG", "success: " + response);
String jsonResponse = response;
Gson gson = new Gson();
Stuff stuffObject = gson.fromJson(jsonResponse, Stuff.class);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
queue.add(stringRequest);
POJO的对象与jsonSchemaToPojo
Stuff.class产生
public class Stuff {
@SerializedName("Results")
@Expose
private Results results;
public Results getResults() {
return results;
}
public void setResults(Results results) {
this.results = results;
}
}
Results.class个
public class Results {
@SerializedName("output1")
@Expose
private Output1 output1;
public Output1 getOutput1() {
return output1;
}
public void setOutput1(Output1 output1) {
this.output1 = output1;
}
}
Output1.class
public class Output1 {
@SerializedName("type")
@Expose
private String type;
@SerializedName("value")
@Expose
private Value value;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Value getValue() {
return value;
}
public void setValue(Value value) {
this.value = value;
}
}
Value.class
public class Value {
@SerializedName("ColumnNames")
@Expose
private List<String> columnNames = new ArrayList<String>();
@SerializedName("ColumnTypes")
@Expose
private List<String> columnTypes = new ArrayList<String>();
@SerializedName("Values")
@Expose
private List<List<String>> values = new ArrayList<List<String>>();
public List<String> getColumnNames() {
return columnNames;
}
public void setColumnNames(List<String> columnNames) {
this.columnNames = columnNames;
}
public List<String> getColumnTypes() {
return columnTypes;
}
public void setColumnTypes(List<String> columnTypes) {
this.columnTypes = columnTypes;
}
public List<List<String>> getValues() {
return values;
}
public void setValues(List<List<String>> values) {
this.values = values;
}
}
排除已被弃用,所以我不认为它是一个好主意,推荐它 –
@AntonKazakov你有这个索赔的参考?我使用'compile'com.android.volley:volley:1.0.0''并且没有看到弃用警告。 –
也许我错了。我很久以前就使用过排序,上次我在github mcxiaoke/android-volley上打开它的回购,它说它已被弃用。但如果你从谷歌编译它的意思是我错了。但无论如何OkHttp库做得更好:) –
您使用的是Android上的任何HTTP库? – Panther
@Panther无。此代码示例来自Microsoft Azure机器学习,我必须将其集成到我的Android应用程序中才能进行数据预测。 –
[在Android中发送POST数据]可能的重复(http://stackoverflow.com/questions/2938502/sending-post-data-in-android) –