opt: error message of login and register

This commit is contained in:
hyb1996 2017-12-10 17:29:58 +08:00
parent 39932de8ce
commit 0d8a3e41fb
7 changed files with 68 additions and 14 deletions

View File

@ -1,14 +1,23 @@
package com.stardust.scriptdroid.network;
import android.content.Context;
import android.util.Log;
import com.google.gson.GsonBuilder;
import com.jakewharton.retrofit2.adapter.rxjava2.HttpException;
import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.network.api.ConfigApi;
import com.stardust.scriptdroid.network.entity.config.Config;
import com.stardust.scriptdroid.network.util.WebkitCookieManagerProxy;
import java.io.IOException;
import io.reactivex.Observable;
import io.reactivex.Scheduler;
import okhttp3.OkHttpClient;
import okhttp3.ResponseBody;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
@ -20,6 +29,7 @@ public class NodeBB {
public static final String BASE_URL = "http://www.autojs.org/";
private static final NodeBB sInstance = new NodeBB();
private static final String LOG_TAG = "NodeBB";
private Config mConfig;
@ -56,7 +66,48 @@ public class NodeBB {
}
public static String getErrorMessage(Throwable e, Context context, String defaultMsg) {
if (!(e instanceof HttpException)) {
return defaultMsg;
}
HttpException httpException = (HttpException) e;
ResponseBody body = httpException.response().errorBody();
if (body == null)
return defaultMsg;
try {
String errorMessage = getErrorMessage(context, e, body.string());
return errorMessage == null ? defaultMsg : errorMessage;
} catch (IOException e1) {
e1.printStackTrace();
return defaultMsg;
}
}
private static String getErrorMessage(Context context, Throwable error, String errorBody) {
if (errorBody == null)
return null;
if (errorBody.contains("invalid-login-credentials")) {
return context.getString(R.string.nodebb_error_invalid_login_credentials);
}
if (errorBody.contains("change_password_error_match")) {
return context.getString(R.string.nodebb_error_change_password_error_match);
}
if (errorBody.contains("change_password_error_length")) {
return context.getString(R.string.nodebb_error_change_password_error_length);
}
if (errorBody.contains("email-taken")) {
return context.getString(R.string.nodebb_error_email_taken);
}
Log.d(LOG_TAG, "unknown error: " + errorBody, error);
return null;
}
public static String url(String relativePath) {
return BASE_URL + relativePath;
}
public static CharSequence getErrorMessage(Throwable error, Context context, int defaultMsg) {
return getErrorMessage(error, context, context.getString(defaultMsg));
}
}

View File

@ -32,7 +32,6 @@ public class UserService {
return NodeBB.getInstance()
.getConfig()
.flatMap(config -> {
Log.d("login", config.toString());
return mRetrofit.create(UserApi.class)
.login(Collections.singletonMap("x-csrf-token", config.getCsrfToken()),
userName, password);
@ -43,11 +42,8 @@ public class UserService {
public Observable<ResponseBody> register(String email, String userName, String password) {
return NodeBB.getInstance()
.getConfig()
.flatMap(config -> {
Log.d("login", config.toString());
return mRetrofit.create(UserApi.class)
.register(Collections.singletonMap("x-csrf-token", config.getCsrfToken()),
email, userName, password);
});
.flatMap(config -> mRetrofit.create(UserApi.class)
.register(Collections.singletonMap("x-csrf-token", config.getCsrfToken()),
email, userName, password, password));
}
}

View File

@ -28,7 +28,7 @@ public interface UserApi {
@FormUrlEncoded
@POST("/register")
Observable<ResponseBody> register(@HeaderMap Map<String, String> csrfToken, @Field("email") String email,
@Field("username") String userName, @Field("password") String password);
@Field("username") String userName, @Field("password") String password, @Field("password-confirm") String repeatPassword);
}

View File

@ -18,6 +18,7 @@ import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.Click;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.ViewById;
import org.w3c.dom.Node;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
@ -65,8 +66,7 @@ public class LoginActivity extends BaseActivity {
}
, error -> {
dialog.dismiss();
mPassword.setError(getString(R.string.text_login_fail));
error.printStackTrace();
mPassword.setError(NodeBB.getErrorMessage(error, LoginActivity.this, R.string.text_login_fail));
});
}

View File

@ -8,6 +8,7 @@ import android.widget.Toast;
import com.afollestad.materialdialogs.MaterialDialog;
import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.network.NodeBB;
import com.stardust.scriptdroid.network.UserService;
import com.stardust.scriptdroid.ui.BaseActivity;
import com.stardust.theme.ThemeColorManager;
@ -67,8 +68,7 @@ public class RegisterActivity extends BaseActivity {
}
, error -> {
dialog.dismiss();
mPassword.setError(getString(R.string.text_register_fail));
error.printStackTrace();
mPassword.setError(NodeBB.getErrorMessage(error, RegisterActivity.this, R.string.text_register_fail));
});
}
@ -95,6 +95,10 @@ public class RegisterActivity extends BaseActivity {
mUserName.setError(getString(R.string.text_password_cannot_be_empty));
return false;
}
if (password.length() < 6) {
mPassword.setError(getString(R.string.nodebb_error_change_password_error_length));
return false;
}
return true;
}
}

View File

@ -10,10 +10,9 @@
android:id="@+id/app_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="16dp"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
<com.stardust.theme.widget.ThemeColorToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"

View File

@ -332,4 +332,8 @@
<string name="text_community_recent">最新</string>
<string name="text_community_popular">热门</string>
<string name="text_community_tags">话题</string>
<string name="nodebb_error_invalid_login_credentials">无效的登录凭证</string>
<string name="nodebb_error_change_password_error_length">密码太短</string>
<string name="nodebb_error_email_taken">邮箱已被占用</string>
<string name="nodebb_error_change_password_error_match">两次输入的密码不一致</string>
</resources>