package com.logintest.okhttp_test;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import androidx.appcompat.app.AppCompatActivity;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;
public class LoginActivity extends AppCompatActivity {
private static final String TAG="LoginActivity";
EditText id, pw;
String email, passwd;
private LoginTask loginTask=LoginTask.getInstance(); //LoginTask에서 선언한 인스탠스 함수 불러옴.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
sendData();
Log.d("send data", "success");
}
public void LoginBtnClick(View view) {
email=id.getText().toString();
passwd=pw.getText().toString(); //사용자가 입력한 값 문자열로 받아옴.
}
private void sendData() {
new Thread() {
public void run() {
loginTask.requestWebServer("email", "passwd", callback);
}
}.start();
Log.d("data", "success");
}
private final Callback callback=new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.d("callback", "fail");
}
@Override
public void onResponse(Call call, final Response response) {
final EditText id=(EditText) findViewById(R.id.id);
final EditText pw=(EditText) findViewById(R.id.pw);
Button Login=(Button) findViewById(R.id.Login);
Login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String email=id.getText().toString();
String passwd=pw.getText().toString();
try {
JSONObject jsonObject=new JSONObject(String.valueOf(response));
boolean success=jsonObject.getBoolean("success");
if (success) {//로그인 성공시
email=jsonObject.getString("email");
passwd=jsonObject.getString("passwd");
Toast.makeText(getApplicationContext(), ("로그인에 성공하였습니다."), Toast.LENGTH_SHORT).show();
Intent intent=new Intent(LoginActivity.this, ResultActivity.class);
intent.putExtra("email", email);
intent.putExtra("passwd", passwd);
startActivity(intent);
Log.d("login", "success");
} else {//로그인 실패시
Toast.makeText(getApplicationContext(), "로그인에 실패하셨습니다.", Toast.LENGTH_SHORT).show();
Log.d("login", "fail");
return;
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});
Log.d("callback", "success");
}
};
}
package com.logintest.okhttp_test;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
public class LoginTask {
OkHttpClient client = new OkHttpClient();
MediaType mediaType=MediaType.parse("application/x-www-form-urlencoded");
private static LoginTask instance = new LoginTask();
public static LoginTask getInstance() {
return instance;
}
private LoginTask(){
this.client = new OkHttpClient();
}
public void requestWebServer(String email, String passwd, Callback callback) {
RequestBody body=new FormBody.Builder()
.add("email", email)
.add("passwd", passwd)
.build();
Request request=new Request.Builder()
.url("https://도메인/api/v1/auth/test/login")
.addHeader("Content-Type", "application/x-www-form-urlencoded")
.post(body)
.method("POST", body)
.build();
client.newCall(request).enqueue(callback);
}
}
이제 막 안드로이드 개발에 발을 담그기 시작한 정말 극 초보입니다..
로그인 기능을 구현하려고 합니다. LoginActivity에서 에러가 나는데 저 에러가 무엇을 의미하는지 모르겠습니다ㅜㅜ JSONObject에 문제가 있는 것 같은데 어떻게 에러를 해결해야 하는지 감이 안잡힙니다.. 그리고 제 코드가 전체적으로 말이 되는 코드인지도 모르겠습니다. 전체적으로 코드도 한번 봐주시면 감사하겠습니다..
2020-10-07 11:22:41.227 29704-29704/com.logintest.okhttp_test W/System.err: org.json.JSONException: Value Response of type java.lang.String cannot be converted to JSONObject
2020-10-07 11:22:41.228 29704-29704/com.logintest.okhttp_test W/System.err: at org.json.JSON.typeMismatch(JSON.java:111)
2020-10-07 11:22:41.228 29704-29704/com.logintest.okhttp_test W/System.err: at org.json.JSONObject.<init>(JSONObject.java:163)
2020-10-07 11:22:41.228 29704-29704/com.logintest.okhttp_test W/System.err: at org.json.JSONObject.<init>(JSONObject.java:176)
2020-10-07 11:22:41.228 29704-29704/com.logintest.okhttp_test W/System.err: at com.logintest.okhttp_test.LoginActivity$2$1.onClick(LoginActivity.java:79)
2020-10-07 11:22:41.229 29704-29704/com.logintest.okhttp_test W/System.err: at android.view.View.performClick(View.java:6897)
2020-10-07 11:22:41.229 29704-29704/com.logintest.okhttp_test W/System.err: at android.widget.TextView.performClick(TextView.java:12693)
2020-10-07 11:22:41.229 29704-29704/com.logintest.okhttp_test W/System.err: at android.view.View$PerformClick.run(View.java:26103)
2020-10-07 11:22:41.230 29704-29704/com.logintest.okhttp_test W/System.err: at android.os.Handler.handleCallback(Handler.java:789)
2020-10-07 11:22:41.230 29704-29704/com.logintest.okhttp_test W/System.err: at android.os.Handler.dispatchMessage(Handler.java:98)
2020-10-07 11:22:41.230 29704-29704/com.logintest.okhttp_test W/System.err: at android.os.Looper.loop(Looper.java:164)
2020-10-07 11:22:41.230 29704-29704/com.logintest.okhttp_test W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6944)
2020-10-07 11:22:41.230 29704-29704/com.logintest.okhttp_test W/System.err: at java.lang.reflect.Method.invoke(Native Method)
2020-10-07 11:22:41.231 29704-29704/com.logintest.okhttp_test W/System.err: at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
2020-10-07 11:22:41.231 29704-29704/com.logintest.okhttp_test W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)