안드로이드 스튜디오 버튼리스너에서 값을 못 넘기는 경우 질문 입니다...
조회수 2985회
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String name = search.getText().toString();
// Toast.makeText(SearchActivity.this, name, Toast.LENGTH_SHORT).show();
String url = "http://000.000.000.000/search.php";
JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.POST, url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
mResult = response;
// Log.v("TAG", "변수의 값"+name.toString());
drawList();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(SearchActivity.this, "DB 연동 에러", Toast.LENGTH_LONG).show();
}
}) {
@Override
private Map<String,String> getParams(){
Map<String,String> params = new HashMap<String, String>();
Log.v("TAG", "변수의 값"+name.toString());
params.put(KEY_TITLE, name);
return params;
}
};
jsObjRequest.setTag(SEARCHTAG);
mQueue.add(jsObjRequest);
}
});
위의 버튼을 눌렀을 때, editText의 값을 string으로 받아와서 그 name라는 값을 getParams()의 params.put을 이용해서 php로 넘겨서 사용할 수 있게 해줄려고 하는데, 아예 private Map..getParams()로 넘어가질 않습니다. 로그를 이용하여 넘어가는지 확인을 했으나 넘어가질 않아서 이걸게 질문을 올립니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
2 답변
-
JsonObjectRequest는 getParams() 함수를 내부적으로 호출하지 않게 구현되어 있습니다. 생성자의 세번째 파리미터인 jsonRequest를 통해서만 Request Body를 전달할 수 있습니다. (올려주신 코드에서 null로 설정한 부분) 다음 샘플 코드를 참고하셔서 코드를 수정하세요.
Map<String, String> params = new HashMap<String, String>(); params.put("title", "foo"); JsonObjectRequest jsonObjRequest = new JsonObjectRequest (Request.Method.POST, url, new JSONObject(params), new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { ... } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { ... } });
-
(•́ ✖ •̀)
알 수 없는 사용자
- 위의 코드 처럼 수정을 했는데도 역시나 php로 값이 넘어가질 않네요...php 파일에선 $name=$_POST['name']을 사용해서 넘겨 받은 값을 사용하려고 하는데 뭐가 문제인지 모르겠네요.. 알 수 없는 사용자 2016.6.14 21:27
-
-
JsonObjectRequest를 사용하는 경우, 데이터를 Json 문자열로 전송하게 됩니다. 따라서 서버에서도 Json 문자열을 디코드 처리 후 가져와야 됩니다. 다음 링크에서 json_decode() 함수에 대한 설명 및 예제를 살펴보신 후 적용해보시기 바랍니다.
다른 방법은 클라이언트에서 JsonObjectRequest가 아닌 StringRequest를 사용하는 것입니다. StringRequest를 사용할 경우, Content-Type을
"application/x-www-form-urlencoded; charset=UTF-8"
으로 전송하기 때문에 기존 서버 코드로 값을 받아 올 수 있을 것으로 보입니다.StringRequest 변경 시 처음 올려주신 코드에서 JsonObjectRequest를 StringRequest로 변경 후 생성자 파라미터 정도만 수정하면 됩니다. 이때는 getParams()가 호출되기 때문에 기존 코드를 그대로 사용하시면 됩니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력