Поместите новые данные в SQL Server с Android Volley - PullRequest
0 голосов
/ 25 июня 2019

Я хочу использовать android-volley для редактирования моих данных SQL Server, я пытался использовать метод запроса put, чтобы обновить мою базу данных, и изменить данные на JSON, и использовать Visual Studio для перехвата JSON, наконец, изменить данные SQL Server

Студия андроида:

StringRequest stringRequest = new StringRequest(Request.Method.PUT,
                    url, new Response.Listener<String>() {

            @Override
            public void onResponse(String response) {     
                Log.d("success", response);
                Toast.makeText(SystemActivity.this, "succesful!, Toast.LENGTH_SHORT).show();
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.d("error", error.toString());
            }
        });


        getparams();

        mQueue.add(stringRequest);
        //put-volley

    }

    //put-volley

    protected Map<String, String> getparams() {
        Map<String, String> params = new HashMap<String, String>();
        params.put("NotesID", corusername);  //NotesID
        params.put("Password", renewpass);

        return params;
    }
    //put-volley

Визуальная студия:

public HttpResponseMessage Put(string userID, [FromBody] Account account)
{
    try
    {
        using (DemoEntities entities = new DemoEntities())
        {
            var entity = entities.Account.FirstOrDefault(s => s.NotesID == userID);

            if (entity == null)
            {
                return Request.CreateErrorResponse(HttpStatusCode.NotFound, "customers with userid = " + userID + "is not found");
            }
            else
            {
                entity.NotesID = account.NotesID;
                entity.Password = account.Password;

                entities.SaveChanges();
                return Request.CreateResponse(HttpStatusCode.OK, entity);
            }

        }
    }
    catch (Exception ex)
    {
        return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex);
    }
}

1 Ответ

0 голосов
/ 25 июня 2019

Как я вижу, вы вызываете getParams () вне StringRequest:

getparams(); 
mQueue.add(stringRequest);

Вместо этого вам нужно переопределить его в области видимости StringRequest, например:

StringRequest stringRequest = new StringRequest(Request.Method.PUT, url,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    //Response
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    //Error
                }
            }) {
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            Map<String, String> params = new HashMap<String, String>();
                params.put("NotesID", corusername);  //NotesID
                params.put("Password", renewpass);

                return params;
        }
        @Override
        public HashMap<String, String> getHeaders() {
                HashMap headers = new HashMap();
                headers.put("Content-Type", "application/json");
                return headers;
        }
};

//Add request to volley request queue
VolleyRequestQueue.getInstance().addToRequestQueue(stringRequest);

Также HTTP 400 может быть из-за неправильной установки заголовков Content-Type. Поэтому вы должны установить заголовки в переопределенном методе StringRequest, например:

@Override
public HashMap<String, String> getHeaders() {
        HashMap headers = new HashMap();
        headers.put("Content-Type", "application/json");
        return headers;
}

Также, чтобы правильно связать JSON с вашим действием, вы изменили свое действие, добавив в параметр атрибут [FromBody]. Таким образом, вы должны определить в своем запросе правильные заголовки:

contentType:"application/json"
//or
headers.put("Content-Type", "application/json");

Также сначала проверьте ваш запрос PUT в Почтальоне.

...