Я пытаюсь выполнить Spring асинхронную связь.
Я написал код, связь работает, но значения данных как для Spring, так и для Android равны нулю.
Почему?
btn_login.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
String id=edit_email.getText().toString();
String password=edit_password.getText().toString();
ContentValues values=new ContentValues();
values.put("id",id);
values.put("password",password);
NetworkTask net=new NetworkTask("http://10.0.2.2:8080/Pet_Tuen_Tuen/login.do",values);
net.execute();
//new NetworkTask2().execute(values);
if(check==1) {
startActivity(intent);
}
}
public class NetworkTask extends AsyncTask<Void, Void, String> {
String url;
ContentValues values;
NetworkTask(String url, ContentValues values){
this.url = url;
this.values = values;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
//progress bar를 보여주는 등등의 행위
}
@Override
protected String doInBackground(Void... params) {
String result;
RequestHttpURLConnection requestHttpURLConnection = new RequestHttpURLConnection();
result = requestHttpURLConnection.request(url, values);
return result; // 결과가 여기에 담깁니다. 아래 onPostExecute()의 파라미터로 전달됩니다.
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
// 통신이 완료되면 호출됩니다.
// 결과에 따른 UI 수정 등은 여기서 합니다.
try {
check=1;
Log.println(Log.DEBUG, "------------------", result);
}catch (Exception e){
e.printStackTrace();
}
Toast.makeText(getApplicationContext(), result, Toast.LENGTH_LONG).show();
}
}
Запросить код подключения.
public class RequestHttpURLConnection {
public String request(String _url, ContentValues _params) {
HttpURLConnection urlConn = null;
// URL 뒤에 붙여서 보낼 파라미터.
StringBuffer sbParams = new StringBuffer();
/**
* 1. StringBuffer에 파라미터 연결
* */
// 보낼 데이터가 없으면 파라미터를 비운다.
if (_params == null)
sbParams.append("");
// 보낼 데이터가 있으면 파라미터를 채운다.
else {
// 파라미터가 2개 이상이면 파라미터 연결에 &가 필요하므로 스위칭할 변수 생성.
boolean isAnd = false;
// 파라미터 키와 값.
String key;
String value;
for (Map.Entry<String, Object> parameter : _params.valueSet()) {
key = parameter.getKey();
value = parameter.getValue().toString();
Log.println(Log.DEBUG,"=================>",value);
// 파라미터가 두개 이상일때, 파라미터 사이에 &를 붙인다.
if (isAnd)
sbParams.append("&");
sbParams.append(key).append("=").append(value);
// 파라미터가 2개 이상이면 isAnd를 true로 바꾸고 다음 루프부터 &를 붙인다.
if (!isAnd)
if (_params.size() >= 2)
isAnd = true;
}
}
/**
* 2. HttpURLConnection을 통해 web의 데이터를 가져온다.
* */
try {
URL url = new URL(_url);
urlConn = (HttpURLConnection) url.openConnection();
// [2-1]. urlConn 설정.
urlConn.setReadTimeout(10000);
urlConn.setConnectTimeout(15000);
urlConn.setRequestMethod("POST"); // URL 요청에 대한 메소드 설정 : GET/POST.
urlConn.setDoOutput(true);
urlConn.setDoInput(true);
urlConn.setRequestProperty("Accept-Charset", "utf-8"); // Accept-Charset 설정.
urlConn.setRequestProperty("Context_Type", "application/x-www-form-urlencoded");
// [2-2]. parameter 전달 및 데이터 읽어오기.
PrintWriter pw = new PrintWriter(new OutputStreamWriter(urlConn.getOutputStream()));
pw.write(sbParams.toString());
pw.flush(); // 출력 스트림을 flush. 버퍼링 된 모든 출력 바이트를 강제 실행.
pw.close(); // 출력 스트림을 닫고 모든 시스템 자원을 해제.
// [2-3]. 연결 요청 확인.
// 실패 시 null을 리턴하고 메서드를 종료.
if (urlConn.getResponseCode() != HttpURLConnection.HTTP_OK)
return null;
// [2-4]. 읽어온 결과물 리턴.
// 요청한 URL의 출력물을 BufferedReader로 받는다.
BufferedReader reader = new BufferedReader(new InputStreamReader(urlConn.getInputStream(), "UTF-8"));
// 출력물의 라인과 그 합에 대한 변수.
String line;
String page = "";
// 라인을 받아와 합친다.
while ((line = reader.readLine()) != null) {
page += line;
}
return page;
} catch (MalformedURLException e) { // for URL.
e.printStackTrace();
} catch (IOException e) { // for openConnection().
e.printStackTrace();
} finally {
if (urlConn != null)
urlConn.disconnect();
}
return null;
}
}
код пружины
@Controller
public class MemberController {
@RequestMapping(value="/login.do",method=RequestMethod.POST)
public JSONObject login(HttpServletRequest request) {
System.out.println(request.getAttribute("id"));
System.out.println(request.getAttribute("password"));
JSONObject attr=new JSONObject();
attr.put("msg","ok");
return attr;
}
}
Произошла ошибка во время выполнения.
Но значение данных пружины равноnull.
Принудительная отправка данных из пружины на Android, но это также нулевое значение.
Почему данные не перебираются? Связь осуществляется по почте.