如何使用okhttp3制作登录页面
how to make a login page with okhttp3
在 Android Studio 中,我在我的项目中设置了一个使用 OkHttp 的登录页面,但我在 OkHttp 连接中遇到了一个小问题。我不知道如何创建 POST 正文。
下面是我的代码:
btn_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isNetworkAvailable()) {
userLogin();
final String email = inemail.getText().toString().trim();
final String password = inpass.getText().toString().trim();
okHttpClient = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"action\":\"patientappointmentlist\",\"tokenid\":\"j9394je902jew92jeY9j\",\"user\":"+email+",\"pass\":"+password+"}");
//"{"jsonExample":"value"}"
request = new Request.Builder()
.url("https://secure.advcare.info")
.post(body)
.addHeader("Content-Type", "application/json")
.build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
try {
final String responseData = response.body().string();
JSONObject json = new JSONObject(responseData);
final String owner = json.getString("status");
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
show.setText(owner+email+password);
}
});
} catch (JSONException e) {
e.printStackTrace();
}
}
});
Log.d(TAG, "Main thread is running");
} else {
Toast.makeText(getApplicationContext(), "Networket Problem ! ", Toast.LENGTH_SHORT).show();
}
}
private boolean isNetworkAvailable() {
ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = manager.getActiveNetworkInfo();
boolean isAvailable = false;
if (networkInfo != null && networkInfo.isConnected()) {
isAvailable = true;
}
return isAvailable;
}
private void userLogin() {
String email = inemail.getText().toString().trim();
String password = inpass.getText().toString().trim();
if (email.isEmpty()) {
inemail.setError("Email is required");
inemail.requestFocus();
return;
}
}
if (password.isEmpty()) {
inpass.setError("Password required");
inpass.requestFocus();
return;
}
}
});
}
当我将 RequestBody 更改为:
RequestBody body = RequestBody.create(mediaType, "{\"action\":\"patientappointmentlist\",\"tokenid\":\"j9394je902jew92jeY9j\",\"user\":"apptester",\"pass\":"123456"}");
它工作正常。
虽然我在应用程序中正确输入了电子邮件和密码。
请帮我。
这是使用 POST 方法的 OKHttp 连接示例。
此示例代码 login_username.getText().toString())
将获取您在用户名 edittext 中输入的文本。
当用户输入用户名和密码正确时,将重定向到HomeActivity.class
代码:
private void submitForm() throws IOException {
try
{
urlAPI = new URL("http://testsiteprog.com./accounts/signin.php");
}
catch (MalformedURLException e)
{
e.printStackTrace();
}
OkHttpClient client = new OkHttpClient();
//INPUT *GETTEXT
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("username", login_username.getText().toString());
jsonObject.put("password", login_password.getText().toString());
jsonObject.put("ipaddress", get_publicIPaddress);
}
catch (JSONException e) {
e.printStackTrace();
}
MediaType JSON =MediaType.parse("application/json; charset=utf-8");
RequestBody requestBody = RequestBody.create(JSON, jsonObject.toString());
Log.i("LOG_INTENT", login_username.getText().toString() + login_password.getText().toString() + get_publicIPaddress);
Request request = new Request.Builder()
.url(urlAPI)
.post(requestBody)
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
String mMessage = e.getMessage();
Log.w("failure Response", mMessage);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String mMessage = response.body().string();
try {
JSONObject object = new JSONObject(mMessage);
responseCode = object.getString("code");
responseMsg = object.getString("message");
responseToken = object.getString("token");
if(response.code() == 200) {
Intent intentHome = new Intent(LoginActivity.this, HomeActivity.class);
intentHome.putExtra("TOKEN", responseToken);
Log.i("TAG", "Login Activity" + responseToken);
startActivity(intentHome);
Log.i("INTENT", "NAKUKUHA BA AT NATAPOS?");
}
else if(response.code() == 400){
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(LoginActivity.this, responseMsg, Toast.LENGTH_SHORT).show();
}
});
}
}
catch (JSONException e) {
e.printStackTrace();
}
Log.i("RESPONSE", response + mMessage + "code" + responseCode + responseToken );
}
});
Log.i("GET", "NAKUKUHA BA AT NATAPOS?");
}
希望对解决您的问题有所帮助。
在 Android Studio 中,我在我的项目中设置了一个使用 OkHttp 的登录页面,但我在 OkHttp 连接中遇到了一个小问题。我不知道如何创建 POST 正文。 下面是我的代码:
btn_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isNetworkAvailable()) {
userLogin();
final String email = inemail.getText().toString().trim();
final String password = inpass.getText().toString().trim();
okHttpClient = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"action\":\"patientappointmentlist\",\"tokenid\":\"j9394je902jew92jeY9j\",\"user\":"+email+",\"pass\":"+password+"}");
//"{"jsonExample":"value"}"
request = new Request.Builder()
.url("https://secure.advcare.info")
.post(body)
.addHeader("Content-Type", "application/json")
.build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
try {
final String responseData = response.body().string();
JSONObject json = new JSONObject(responseData);
final String owner = json.getString("status");
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
show.setText(owner+email+password);
}
});
} catch (JSONException e) {
e.printStackTrace();
}
}
});
Log.d(TAG, "Main thread is running");
} else {
Toast.makeText(getApplicationContext(), "Networket Problem ! ", Toast.LENGTH_SHORT).show();
}
}
private boolean isNetworkAvailable() {
ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = manager.getActiveNetworkInfo();
boolean isAvailable = false;
if (networkInfo != null && networkInfo.isConnected()) {
isAvailable = true;
}
return isAvailable;
}
private void userLogin() {
String email = inemail.getText().toString().trim();
String password = inpass.getText().toString().trim();
if (email.isEmpty()) {
inemail.setError("Email is required");
inemail.requestFocus();
return;
}
}
if (password.isEmpty()) {
inpass.setError("Password required");
inpass.requestFocus();
return;
}
}
});
}
当我将 RequestBody 更改为:
RequestBody body = RequestBody.create(mediaType, "{\"action\":\"patientappointmentlist\",\"tokenid\":\"j9394je902jew92jeY9j\",\"user\":"apptester",\"pass\":"123456"}");
它工作正常。 虽然我在应用程序中正确输入了电子邮件和密码。 请帮我。
这是使用 POST 方法的 OKHttp 连接示例。
此示例代码 login_username.getText().toString())
将获取您在用户名 edittext 中输入的文本。
当用户输入用户名和密码正确时,将重定向到HomeActivity.class
代码:
private void submitForm() throws IOException {
try
{
urlAPI = new URL("http://testsiteprog.com./accounts/signin.php");
}
catch (MalformedURLException e)
{
e.printStackTrace();
}
OkHttpClient client = new OkHttpClient();
//INPUT *GETTEXT
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("username", login_username.getText().toString());
jsonObject.put("password", login_password.getText().toString());
jsonObject.put("ipaddress", get_publicIPaddress);
}
catch (JSONException e) {
e.printStackTrace();
}
MediaType JSON =MediaType.parse("application/json; charset=utf-8");
RequestBody requestBody = RequestBody.create(JSON, jsonObject.toString());
Log.i("LOG_INTENT", login_username.getText().toString() + login_password.getText().toString() + get_publicIPaddress);
Request request = new Request.Builder()
.url(urlAPI)
.post(requestBody)
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
String mMessage = e.getMessage();
Log.w("failure Response", mMessage);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String mMessage = response.body().string();
try {
JSONObject object = new JSONObject(mMessage);
responseCode = object.getString("code");
responseMsg = object.getString("message");
responseToken = object.getString("token");
if(response.code() == 200) {
Intent intentHome = new Intent(LoginActivity.this, HomeActivity.class);
intentHome.putExtra("TOKEN", responseToken);
Log.i("TAG", "Login Activity" + responseToken);
startActivity(intentHome);
Log.i("INTENT", "NAKUKUHA BA AT NATAPOS?");
}
else if(response.code() == 400){
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(LoginActivity.this, responseMsg, Toast.LENGTH_SHORT).show();
}
});
}
}
catch (JSONException e) {
e.printStackTrace();
}
Log.i("RESPONSE", response + mMessage + "code" + responseCode + responseToken );
}
});
Log.i("GET", "NAKUKUHA BA AT NATAPOS?");
}
希望对解决您的问题有所帮助。