J'ai vu la session Google IO 2013 sur Volley et j'envisage de passer à Volley. Volley prend-il en charge l'ajout de paramètres POST/GET aux requêtes ? Si oui, comment puis-je le faire ?
Réponses
Trop de publicités?Cela peut vous aider...
private void loggedInToMainPage(final String emailName, final String passwordName) {
String tag_string_req = "req_login";
StringRequest stringRequest = new StringRequest(Request.Method.POST, "http://localhost/index", new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d(TAG, "Login Response: " + response.toString());
try {
JSONObject jsonObject = new JSONObject(response);
Boolean error = jsonObject.getBoolean("error");
if (!error) {
String uid = jsonObject.getString("uid");
JSONObject user = jsonObject.getJSONObject("user");
String email = user.getString("email");
String password = user.getString("password");
session.setLogin(true);
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
startActivity(intent);
finish();
Toast.makeText(getApplicationContext(), "its ok", Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
System.out.println("volley Error .................");
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("tag", "login");
params.put("email", emailName);
params.put("password", passwordName);
return params;
}
};
MyApplication.getInstance().addToRequestQueue(stringRequest,tag_string_req);
}
Pour les futurs lecteurs
J'aime travailler avec Volley-ball . Pour gagner du temps de développement, j'ai essayé d'écrire une petite bibliothèque pratique. Directeur de Gloxey Netwok pour configurer Volley avec mon projet. Il comprend un analyseur JSON et différentes autres méthodes qui permettent de vérifier la disponibilité du réseau.
Utilisez ConnectionManager.class
dans laquelle différentes méthodes de Cordage de volley y Volley JSON sont disponibles. Vous pouvez faire des demandes de OBTENIR, METTRE, POSTER, SUPPRIMER avec ou sans en-tête. Vous pouvez lire la documentation complète aquí .
Il suffit de mettre cette ligne dans votre fichier gradle.
dependencies {
compile 'io.gloxey.gnm:network-manager:1.0.1'
}
Méthode GET (sans en-tête)
ConnectionManager.volleyStringRequest(context, isDialog, progressDialogView, requestURL, volleyResponseInterface);
Configuration Description
Context Context
isDialog If true dialog will appear, otherwise not.
progressView For custom progress view supply your progress view id and make isDialog true. otherwise pass null.
requestURL Pass your API URL.
volleyResponseInterface Callback for response.
Exemple
ConnectionManager.volleyStringRequest(this, false, null, "url", new VolleyResponse() {
@Override
public void onResponse(String _response) {
/**
* Handle Response
*/
}
@Override
public void onErrorResponse(VolleyError error) {
/**
* handle Volley Error
*/
}
@Override
public void isNetwork(boolean connected) {
/**
* True if internet is connected otherwise false
*/
}
});
Méthode POST/PUT/DELETE (sans en-tête)
ConnectionManager.volleyStringRequest(context, isDialog, progressDialogView, requestURL, requestMethod, params, volleyResponseInterface);
Exemple
Use Method : Request.Method.POST
Request.Method.PUT
Request.Method.DELETE
Your params :
HashMap<String, String> params = new HashMap<>();
params.put("param 1", "value");
params.put("param 2", "value");
ConnectionManager.volleyStringRequest(this, true, null, "url", Request.Method.POST, params, new VolleyResponse() {
@Override
public void onResponse(String _response) {
/**
* Handle Response
*/
}
@Override
public void onErrorResponse(VolleyError error) {
/**
* handle Volley Error
*/
}
@Override
public void isNetwork(boolean connected) {
/**
* True if internet is connected otherwise false
*/
}
});
Bonus
N'hésitez pas à utiliser l'analyseur json de gloxey pour analyser la réponse à votre API.
YourModel yourModel = GloxeyJsonParser.getInstance().parse(stringResponse, YourModel.class);
Exemple
ConnectionManager.volleyStringRequest(this, false, null, "url", new VolleyResponse() {
@Override
public void onResponse(String _response) {
/**
* Handle Response
*/
try {
YourModel yourModel = GloxeyJsonParser.getInstance().parse(_response, YourModel.class);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onErrorResponse(VolleyError error) {
/**
* handle Volley Error
*/
if (error instanceof TimeoutError || error instanceof NoConnectionError) {
showSnackBar(parentLayout, getString(R.string.internet_not_found), getString(R.string.retry), new View.OnClickListener() {
@Override
public void onClick(View view) {
//handle retry button
}
});
} else if (error instanceof AuthFailureError) {
} else if (error instanceof ServerError) {
} else if (error instanceof NetworkError) {
} else if (error instanceof ParseError) {
}
}
@Override
public void isNetwork(boolean connected) {
/**
* True if internet is connected otherwise false
*/
if (!connected) {
showSnackBar(parentLayout, getString(R.string.internet_not_found), getString(R.string.retry), new View.OnClickListener() {
@Override
public void onClick(View view) {
//Handle retry button
}
});
}
});
public void showSnackBar(View view, String message) {
Snackbar.make(view, message, Snackbar.LENGTH_LONG).show();
}
public void showSnackBar(View view, String message, String actionText, View.OnClickListener onClickListener) {
Snackbar.make(view, message, Snackbar.LENGTH_LONG).setAction(actionText, onClickListener).show();
}
Fournir POST
envoyez votre paramètre comme JSONObject
dans le JsonObjectRequest
constructeur. Le 3ème paramètre accepte un JSONObject
qui est utilisé dans le corps de la demande.
JSONObject paramJson = new JSONObject();
paramJson.put("key1", "value1");
paramJson.put("key2", "value2");
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST,url,paramJson,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
requestQueue.add(jsonObjectRequest);
- Réponses précédentes
- Plus de réponses
2 votes
Je n'ai pas vu toute la présentation, mais je suis presque sûr que le GET devrait être réalisable en ajoutant simplement les paramètres à l'URL (ex.
http://example.com?param1=val1¶m2=val2
)0 votes
Il semble qu'il n'y ait pas encore de documentation, mais vous pouvez vérifier la source ici. Android.googlesource.com/platform/frameworks/volley/+/master
0 votes
@JJ56 - C'est vrai, mais qu'en est-il des paramètres POST ? J'ai vu le code source mais je n'ai rien trouvé concernant les paramètres POST.
1 votes
Je me sens honteux de dire ça. Mais, si vous venez ici pour demander pourquoi votre requête n'a pas de corps sur votre serveur, assurez-vous que vous utilisez la méthode POST/PUT. Je suppose que je suis juste fatigué. J'espère que ce commentaire aidera quelqu'un ou que je me sentirai mieux.