You can refer to my following sample code:
UPDATE for your pastebin link:
Because the server responses a JSONArray
, I use JsonArrayRequest
instead of JsonObjectRequest
. And no need to override getBody
anymore.
mTextView = (TextView) findViewById(R.id.textView);
String url = "https://api.orange.com/datavenue/v1/datasources/2595aa553d3049f0b0f03fbaeaa7ddc7/streams/9fe5edb1c76e4968bdcc9c902010bc6c/values";
RequestQueue requestQueue = Volley.newRequestQueue(this);
final String jsonString = "[
" +
" {
" +
" "value": 1
" +
" }
" +
"]";
try {
JSONArray jsonArray = new JSONArray(jsonString);
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.POST, url, jsonArray, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
mTextView.setText(response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
mTextView.setText(error.toString());
}
}) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<>();
headers.put("X-OAPI-Key","TQEEGSk8OgWlhteL8S8siKao2q6LIGdq");
headers.put("X-ISS-Key","2b2dd0d9dbb54ef79b7ee978532bc823");
return headers;
}
};
requestQueue.add(jsonArrayRequest);
} catch (JSONException e) {
e.printStackTrace();
}
My code works for both Google's official volley libray and mcxiaoke's library
If you want to use Google's library, after you git clone as Google documentation, copy android folder from srcmainjavacom
(of Volley project that you cloned) to appsrcmainjavacom
of your project as the following screenshot:
The build.gradle
should contain the following
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.0.1'
compile 'com.google.code.gson:gson:2.3.1'
}
If your project uses mcxiaoke's library, the build.gradle
will look like the following (pay attention to dependencies
):
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.0"
defaultConfig {
applicationId "com.example.samplevolley"
minSdkVersion 16
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.0.0'
compile 'com.mcxiaoke.volley:library:1.0.17'
compile 'com.google.code.gson:gson:2.3'
}
I suggest that you will create 2 new sample projects, then one will use Google's library, the other will use mcxiaoke's library.
END OF UPDATE
String url = "http://...";
RequestQueue requestQueue = Volley.newRequestQueue(this);
final String jsonString = "[
" +
" {
" +
" "value": 1
" +
" }
" +
"]";
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
// do something...
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// do something...
}
}) {
@Override
public byte[] getBody() {
try {
return jsonString.getBytes(PROTOCOL_CHARSET);
} catch (UnsupportedEncodingException uee) {
VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s",
jsonString, PROTOCOL_CHARSET);
return null;
}
}
};
requestQueue.add(jsonObjectRequest);
The following screenshot is what server-side web service received: