나는 내 웹 사이트와 통신하는 작은 테스트 응용 프로그램을 만들고 있습니다. 사용자가 등록되어 있는지 확인하기 위해 자격 증명이있는 HttpPost를 만듭니다.Android - Asyncronous Http Post
그러나 몇 가지 이유로 게시물은 잠시 시간을 흘려야한다고해도 순간적으로 만들어지며 항상 비어 있습니다. 1 년 전 제가 사용했던 수업이었고, 당시에 일하고있었습니다.
private class LoginTask extends AsyncTask<String, Integer, String> {
private HashMap<String, String> mData = null;// post data
public String serverResult = "";
/**
* constructor
*/
public LoginTask(HashMap<String, String> data) {
mData = data;
}
/**
* background
*/
@Override
protected String doInBackground(String... params) {
byte[] result = null;
String str = "";
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(params[0]);// in this case, params[0] is URL
try {
// set up post data
ArrayList<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();
Iterator<String> it = mData.keySet().iterator();
while (it.hasNext()) {
String key = it.next();
nameValuePair.add(new BasicNameValuePair(key, mData.get(key)));
}
post.setEntity(new UrlEncodedFormEntity(nameValuePair, "UTF-8"));
HttpResponse response = client.execute(post);
StatusLine statusLine = response.getStatusLine();
if(statusLine.getStatusCode() == HttpURLConnection.HTTP_OK){
result = EntityUtils.toByteArray(response.getEntity());
str = new String(result, "UTF-8");
}
}
catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
catch (Exception e) {
}
serverResult = str;
return str;
}
/**
* on getting result
*/
@Override
protected void onPostExecute(String result) {
serverResult = result;
pb.setVisibility(View.GONE);
if(serverResult == "no")
{
Toast t = Toast.makeText(MainActivity.this, "Login failed. Correct username or password", Toast.LENGTH_LONG);
t.show();
}
else if (serverResult.contains("email"))
{
Toast t = Toast.makeText(MainActivity.this, "HELLOOOOO", Toast.LENGTH_LONG);
t.show();
}
else
{
Toast t = Toast.makeText(MainActivity.this, "Server error: " + serverResult, Toast.LENGTH_LONG);
t.show();
}
}
protected void onProgressUpdate(Integer... progress) {
pb.setProgress(progress[0]);
}
}
서버에 보낸 정보가 틀림 없으며 일부 메시지를 다시 가져와야하지만 여기서는 항상 비어 있습니다. 백그라운드 프로세스에서 뭔가 잘못되었을 수 있습니다.
str = new 문자열 (결과, "UTF-8") 앞에 log 문을 추가하십시오. 결과 값을 확인하십시오. str에 대한 catch 블록 다음에 다른 log 문을 추가하십시오. 어떤 일이 일어나는 지 확인하십시오 – Prem
당신이 이것을 밟았습니까? 'catch (Exception e) {}' –