Ich möchte Retrofit-Bibliothek für Post und Get-Methoden vom Server verwenden. Bei Verwendung proGuard
und generieren APK nicht meine Postleitzahl!
Meine Register Codes:Warum nicht arbeiten POST-Methode in Retrofit in Android
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.register_button:
name = registerName.getText().toString();
email = registerEmail.getText().toString();
password = registerPassword.getText().toString();
if (!name.isEmpty() && !email.isEmpty() && !password.isEmpty()) {
if (password.length() < 6) {
Snackbar.make(getView(), "", Snackbar.LENGTH_LONG).show();
} else {
registerLoad.setVisibility(View.VISIBLE);
registerSend.setVisibility(View.INVISIBLE);
registerProcess(name, email, password);
}
} else {
Snackbar.make(getView(), "Fill all fields", Snackbar.LENGTH_LONG).show();
}
break;
}
}
private void registerProcess(String name, String email, String password) {
Gson gson = new GsonBuilder()
.setLenient()
.create();
OkHttpClient client = new OkHttpClient();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Constants.BASE_URL)
.client(client)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
Retrofit_ApiInterface requestInterface = retrofit.create(Retrofit_ApiInterface.class);
User user = new User();
user.setName(name);
user.setEmail(email);
user.setPassword(password);
ServerRequest request = new ServerRequest();
request.setOperation(Constants.REGISTER_OPERATION);
request.setUser(user);
Call<ServerResponse> response = requestInterface.operation(request);
response.enqueue(new Callback<ServerResponse>() {
@Override
public void onResponse(Call<ServerResponse> call, Response<ServerResponse> response) {
try {
ServerResponse resp = response.body();
if (resp.getResult() != null && resp.getResult().equals("success")) {
Snackbar.make(getView(), StringEscapeUtils.unescapeHtml4(resp.getMessage()), Snackbar.LENGTH_LONG).show();
goToLogin();
registerLoad.setVisibility(View.INVISIBLE);
registerSend.setVisibility(View.INVISIBLE);
} else {
registerSend.setVisibility(View.VISIBLE);
Snackbar.make(getView(), StringEscapeUtils.unescapeHtml4(resp.getMessage()), Snackbar.LENGTH_LONG).show();
}
} catch (Exception e) {
Log.e("registerException", "" + e);
}
}
@Override
public void onFailure(Call<ServerResponse> call, Throwable t) {
registerLoad.setVisibility(View.INVISIBLE);
registerSend.setVisibility(View.VISIBLE);
Snackbar.make(getView(), "Try again", Snackbar.LENGTH_LONG).show();
}
});
}
private void goToLogin() {
Fragment login = new LoginFragment();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.loginFragment, login);
ft.commit();
toolbarTitle.setText("login");
registerFAB.setImageDrawable(getResources().getDrawable(R.drawable.ic_login_add));
}
}
Mein proguard ruls:
-dontwarn retrofit2.**
-keep class retrofit2.** { *; }
-keepattributes Signature
-keepattributes Exceptions
Bei Verwendung GET
Methoden zeigen uns nicht Fehler, aber wenn ich Verwendung POST
Methode zeigt Fehler!
In meinem Code, wenn Register "Erfolg" oder "Fehler" sollte Nachricht vom Server und in Snackbar
zeigen. aber wenn APK mit proguard
generieren, zeige mir keine Nachricht in Snackbar
!
Ich habe unten Codes in Proguard-Regeln hinzugefügt, um meine Modelle und Schnittstelle nicht zu verschleiern, aber jetzt arbeite mich wieder und zeige keine Nachricht vom Server.
-dontwarn com.test.app.Retrofit.Rest.**
-dontwarn com.test.app.Retrofit.Model.User.**
Wie kann ich dieses Problem beheben? Bitte helfen Sie mir, ich brauche wirklich diese Hilfe