Android 使用改装时出现内部服务器错误

Android 使用改装时出现内部服务器错误,android,retrofit,retrofit2,put,internal-server-error,Android,Retrofit,Retrofit2,Put,Internal Server Error,我在android应用程序上使用改型执行PUT请求时遇到内部服务器错误。 这是我的界面 public interface RetrofitInterface { //for updating user @PUT("users/update/{email}") Call<Response> updateUser(@Path("email") String email,@Body User user); } } 我从三个文本视图中输入姓名、年龄和城市,创建一个新的用户对象 Use

我在android应用程序上使用改型执行PUT请求时遇到内部服务器错误。 这是我的界面

public interface RetrofitInterface 
{
//for updating user
@PUT("users/update/{email}")
Call<Response> updateUser(@Path("email") String email,@Body User user); 
}
}

我从三个文本视图中输入姓名、年龄和城市,创建一个新的用户对象

 User muser = new User();
    muser.setName(nameText.getText().toString());
    muser.setAge(Integer.parseInt(ageText.getText().toString()));
    muser.setCity(cityText.getText().toString());

    // user.setEmail(mEmail);
    updateProfile(muser);
这就是我用来更新用户配置文件的函数

   public void updateProfile(User user) {

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("https://fitnessrace.herokuapp.com/")
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    RetrofitInterface retrofitInterface = retrofit.create(RetrofitInterface.class);

    Call<Response> call = retrofitInterface.updateUser(mEmail,user);
    //
    call.enqueue(new Callback<Response>()
    {
        @Override
        public void onResponse(Call<Response> call, retrofit2.Response<Response> response)
        {

            if (response.isSuccessful())
            {

                Response responseBody = response.body();
                Log.d("success", response.toString());
                Log.d("success2", responseBody.toString());
            }
            else
            {

                ResponseBody errorBody = response.errorBody();

                // Gson gson = new Gson();
                Gson gson = new GsonBuilder().create();

                try
                {
                    Log.d("error1", errorBody.toString());
                    //Response response1 = gson.fromJson(errorBody);

                }
                catch (Exception e)
                {
                    e.printStackTrace();
                    Log.d("error2", e.toString());
                }
            }
        }

        @Override
        public void onFailure(Call<Response> call, Throwable t)
        {
            Log.d(TAG, "onFailure: "+t.getLocalizedMessage());
        }
    });
public void updateProfile(用户){
改装改装=新改装.Builder()
.baseUrl(“https://fitnessrace.herokuapp.com/")
.addConverterFactory(GsonConverterFactory.create())
.build();
RegulationInterface=Regulation.create(RegulationInterface.class);
Call Call=interface.updateUser(mEmail,user);
//
call.enqueue(新回调()
{
@凌驾
公共void onResponse(呼叫,改装2.响应)
{
if(response.issusccessful())
{
Response responseBody=Response.body();
Log.d(“success”,response.toString());
Log.d(“success2”,responseBody.toString());
}
其他的
{
ResponseBody errorBody=response.errorBody();
//Gson Gson=新的Gson();
Gson Gson=new GsonBuilder().create();
尝试
{
Log.d(“error1”,errorBody.toString());
//Response response1=gson.fromJson(errorBody);
}
捕获(例外e)
{
e、 printStackTrace();
Log.d(“error2”,例如toString());
}
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t)
{
Log.d(标记“onFailure:+t.getLocalizedMessage());
}
});
从邮递员那里,我写下了下面的句子,它起作用了

我的服务器是一个node.js服务器,它具有updateUser()函数的定义。
但android无法运行。我缺少什么?

您已将json数据放入服务器,并在postman中使用了
应用程序/x-www-form-urlencoded
内容类型。请尝试添加
@FormUrlEncoded
@PUT(“users/update/{email}”)之前

非常感谢!这就是解决方案!为了帮助其他人解决同样的问题,我使用了以下链接将@FormUrlEncoded添加到我的界面中
   public void updateProfile(User user) {

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("https://fitnessrace.herokuapp.com/")
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    RetrofitInterface retrofitInterface = retrofit.create(RetrofitInterface.class);

    Call<Response> call = retrofitInterface.updateUser(mEmail,user);
    //
    call.enqueue(new Callback<Response>()
    {
        @Override
        public void onResponse(Call<Response> call, retrofit2.Response<Response> response)
        {

            if (response.isSuccessful())
            {

                Response responseBody = response.body();
                Log.d("success", response.toString());
                Log.d("success2", responseBody.toString());
            }
            else
            {

                ResponseBody errorBody = response.errorBody();

                // Gson gson = new Gson();
                Gson gson = new GsonBuilder().create();

                try
                {
                    Log.d("error1", errorBody.toString());
                    //Response response1 = gson.fromJson(errorBody);

                }
                catch (Exception e)
                {
                    e.printStackTrace();
                    Log.d("error2", e.toString());
                }
            }
        }

        @Override
        public void onFailure(Call<Response> call, Throwable t)
        {
            Log.d(TAG, "onFailure: "+t.getLocalizedMessage());
        }
    });