2013-12-18 6 views
0

나는 내 웹 사이트와 통신하는 작은 테스트 응용 프로그램을 만들고 있습니다. 사용자가 등록되어 있는지 확인하기 위해 자격 증명이있는 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]); 
    } 
} 

서버에 보낸 정보가 틀림 없으며 일부 메시지를 다시 가져와야하지만 여기서는 항상 비어 있습니다. 백그라운드 프로세스에서 뭔가 잘못되었을 수 있습니다.

+0

str = new 문자열 (결과, "UTF-8") 앞에 log 문을 추가하십시오. 결과 값을 확인하십시오. str에 대한 catch 블록 다음에 다른 log 문을 추가하십시오. 어떤 일이 일어나는 지 확인하십시오 – Prem

+0

당신이 이것을 밟았습니까? 'catch (Exception e) {}' –

답변

1

logcat에서 무슨 일이 벌어지고 있습니까? 거기에 exception이 있습니까?

그리고 매니페스트에 인터넷 사용 권한을 추가 했습니까?

<uses-permission android:name="android.permission.INTERNET" /> 
+0

예외가 없기 때문에 허가가 문제가되었습니다. 예외를 먹고 있기 때문에 Logcat에서 볼 수없는 다른 예외가있을 수 있습니다. 허락을받지 않으면 장치가 포스트 파트를 건너 뛰었 기 때문에 즉시 결과가 나왔습니다. – Kfirprods