2016-04-29 1 views
0

côté serveur:

import flask 

    import flask.ext.sqlalchemy 

    import flask.ext.restless 

    app = flask.Flask(__name__) 

    app.config['DEBUG'] = True 

    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db' 

    SQLALCHEMY_TRACK_MODIFICATIONS=True 
    db = flask.ext.sqlalchemy.SQLAlchemy(app) 

    class Person(db.Model): 

     id = db.Column(db.Integer, primary_key=True) 
     name = db.Column(db.Unicode, unique=True) 
     birth_date = db.Column(db.Date) 
    class Computer(db.Model): 

     id = db.Column(db.Integer, primary_key=True) 
     name = db.Column(db.Unicode, unique=True) 
     vendor = db.Column(db.Unicode) 
     purchase_time = db.Column(db.DateTime) 
     owner_id = db.Column(db.Integer, db.ForeignKey('person.id')) 
     owner = db.relationship('Person', backref=db.backref('computers', 
                  lazy='dynamic')) 

    db.create_all() 

    manager = flask.ext.restless.APIManager(app, flask_sqlalchemy_db=db) 

    manager.create_api(Person, methods=['GET', 'POST', 'DELETE']) 

    manager.create_api(Computer, methods=['GET']) 

    app.run(host='0.0.0.0', port=5000, debug=True) 

côté client:

aide post volleyAndroid volley code de requête d'erreur 415 avec Rest API?

RequestQueue queue = Volley.newRequestQueue(this); 

     StringRequest postRequest = new StringRequest(Request.Method.POST, url, 
       new Response.Listener<String>() 
       { 
        @Override 
        public void onResponse(String response) { 
         // response 
         Log.d("Response", response); 
        } 
       }, 
       new Response.ErrorListener() 
       { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         // error 

         Log.d("Error.Response", String.valueOf(error)); 
        } 
       } 
     ) { 
      @Override 
      protected Map<String, String> getParams() 
      { 
       Map<String, String> params = new HashMap<String, String>(); 
       params.put("name", "Anything"); 

       return params; 
      } 
     }; 
     queue.add(postRequest); 

    } 

sortie du journal:

04-29 11: 42: 24,556 1890 -1946 /? I/Givrage: Indexation effectuée F3642025687382E430F3465743F12480D56AAC66 04-29 11: 43: 32.123 3147-3196 /? E/Volley: [157] Réseau de base. PerformRequest: Code de réponse inattendu 415 pour http://IP:5000/api/person 04-29 11: 43: 32.132 3147-3147 /? D/Error.Response: com.android.volley.ServerError 04-29 11: 45: 19.365 1298-1311 /? I/UsageStatsService: User [0] Rinçage des statistiques d'utilisation sur le disque

+0

Est-ce que vous définissez le type de contenu dans l'en-tête? –

Répondre

1

fournissent le type de contenu à droite comme suit

// Optional Parameters to pass as POST request 
    JSONObject js = new JSONObject(); 
    try { 
     js.put("name","anything"); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

    // Make request for JSONObject 
    JsonObjectRequest jsonObjReq = new JsonObjectRequest(
      Request.Method.POST, url, js, 
      new Response.Listener<JSONObject>() { 
       @Override 
       public void onResponse(JSONObject response) { 
        Log.d(TAG, response.toString() + " i am queen"); 
       } 
      }, new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        VolleyLog.d(TAG, "Error: " + error.getMessage()); 
       } 
     }) { 

     /** 
     * Passing some request headers 
     */ 
     @Override 
     public Map<String, String> getHeaders() throws AuthFailureError { 
      HashMap<String, String> headers = new HashMap<String, String>(); 
      headers.put("Content-Type", "application/json; charset=utf-8"); 
      return headers; 
     } 

    }; 

    // Adding request to request queue 
    Volley.newRequestQueue(this).add(jsonObjReq); 

} 
1

415 est le code d'erreur du type de support incorrect. Vous envoyez le corps ou votre demande de publication en texte brut lorsque le serveur attend JSON. Découvrez quel type de contenu vous devriez envoyer et faites en sorte que le corps du message corresponde à ce type.

@Override 
public byte[] getBody() { 
    return 'your json string'.getBytes(); 
} 

@Override 
public String getBodyContentType() { 
    return "application/json; charset=utf-8"; 
} 
+0

Je l'avais aussi utilisé mais cela n'a pas fonctionné J'ai besoin d'un code si vous pouvez fournir. – winne

+0

son ne fonctionne pas même erreur. – winne