Warm tip: This article is reproduced from serverfault.com, please click

android-改造配置以发送GET请求登录示例

(android - Retrofit configuration to send a GET request login example)

发布于 2020-11-28 11:15:16

我在Android上非常菜鸟。我还用API Rest制作了一个Android应用程序。

我知道我的工作正常,我与 Postman 核对并向其发送要求良好的请求:

@RequestMapping(value = "/login/{email}/{password}", method = RequestMethod.GET, produces = "application/json")
    public ResponseEntity<Object> getLogin(HttpServletRequest request,
                @PathVariable(value="email") String email, 
                @PathVariable(value="password") String pass) {
        
        
        System.out.println("Peticion de login recibida");   
        Usuario user = usuarioService.login(email, pass);
        return new ResponseEntity<Object>(user, HttpStatus.OK);
}

但是现在我正在尝试使用Android Studio配置我的前端。我做了: ApiClient.java

public class ApiClient {

    private static final String API_BASE_URL ="http://XXX.XXX.XXX.XXX:8080/";
    private static Retrofit retrofit = null;

    private static Gson gson;

    public static Retrofit getClient() {
        if(retrofit == null){
            retrofit = new Retrofit.Builder()
                    .baseUrl(API_BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
        }

        return retrofit;
    }

}

还有InterfaceApi.java我猜这里的问题,但我不确定:

public interface InterfaceAPI {

    @FormUrlEncoded
    @GET("login/{email}/{password}")
    Call<Usuario> login(
            @Path("email") String email,
            @Path("password") String password
    );
}

同样在LoginActivity.java上

public class LoginActivity extends AppCompatActivity {

    InterfaceAPI apiInterface;
    private EditText editTextEmail;
    private EditText editTextPassword;
    private Button btnLogin;

    private final String SALUDOS = "Hello from the other side";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        editTextEmail = findViewById(R.id.editTextEmail);
        editTextPassword = findViewById(R.id.editTextPassword);
        btnLogin = findViewById(R.id.buttonLogin);

        btnLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Vamos a acceder a la pagina de inicio si se ha logeuado correctamente
                // a traves de este btn y mandamos datos del usuario
                userLogin();

            }
        });


    }

    private void userLogin() {
        apiInterface = ApiClient.getClient().create(InterfaceAPI.class);
        String email = editTextEmail.getText().toString().trim();
        String password = editTextPassword.getText().toString().trim();

        if(checkValidaciones(email, password)){ // these are only checkings and they work
            Call<Usuario> call = apiInterface.login(email, password);

            call.enqueue(new Callback<Usuario>() {
                @Override
                public void onResponse(Call<Usuario> call, Response<Usuario> response) {
                    Usuario res = response.body();

                    if (res != null){
                        // vamos a la pagina de Inicial
                        Intent intent = new Intent(LoginActivity.this, MainActivity.class);
                        intent.putExtra("saludo", SALUDOS);
                        //LANZAMOS
                        startActivity(intent);

                        Toast.makeText(LoginActivity.this, "Usuario correctamente logueado", Toast.LENGTH_LONG).show();
                    }else{
                        //nos quedariamos en la misma pagina de login
                        Toast.makeText(LoginActivity.this, "Error en login", Toast.LENGTH_LONG).show();
                    }
                }

                @Override
                public void onFailure(Call<Usuario> call, Throwable t) {
                    //nos quedamos en la misma pagina de login
                    Toast.makeText(LoginActivity.this, "Error request", Toast.LENGTH_LONG).show();
                }

            });
        }

    }

   
}

当我按我在de loginActivity上捕获的按钮时,应用程序仅关闭...谁能帮我!预先谢谢你<3

Questioner
Fatimaa Garciaa
Viewed
0
kelvin 2020-11-28 20:07:09

如果将@FromUrlEncoded添加到@GET的顶部,则将具有java.lang.IllegalArgumentException:FormUrlEncoded只能在
带有请求正文的HTTP方法上指定(例如,@ POST)。

尝试从方法中删除@FormUrlEncoded

检查清单中是否具有INTERNET权限在清单中
添加android:usesCleartextTraffic="true"应用程序标记后尝试