2012-08-10 6 views
0

내 웹 사이트의 버튼을 클릭하여 HTTP 게시물 요청을 보내려고합니다. 나는이 코드 조각 만 찾았습니다.버튼을 클릭했을 때 Android HTTP 게시물 요청

// Create a new HttpClient and Post Header 

HttpClient httpclient = new DefaultHttpClient(); 
HttpPost httppost = new HttpPost("http://www.yoursite.com/script.php"); 

    try { 
     // Add your data 
     List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
     nameValuePairs.add(new BasicNameValuePair("id", "12345")); 
     nameValuePairs.add(new BasicNameValuePair("stringdata", "AndDev is Cool!")); 
     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

     // Execute HTTP Post Request 
     HttpResponse response = httpclient.execute(httppost); 

    } catch (ClientProtocolException e) { 
     // TODO Auto-generated catch block 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
    } 

그러나 버튼을 클릭하면 어떻게 작동하는지 모르겠습니다.

+1

전체 코드? 나는 당신이 포인터를 요청해야한다고 생각해. 단추를 클릭 할 때 메서드를 호출하는 방법을 알고 있습니까? 그렇지 않으면 안드로이드 문서를 읽어야합니다. 당신이 어떻게하는지 알면, 당신은 나의 암시를 가지고 있습니다. –

답변

3

으로 버튼 클릭에 네트워크 Opertion을 수행하기 위해 사용 AsyncTask :로 시작 AsyncTask를 onbuttonclickHttpPost을 클릭

public class onbuttonclickHttpPost extends AsyncTask<String, Void, Void> { 
    @Override 
    protected String doInBackground(String... params) { 
     byte[] result = null; 
     String str = ""; 
     // Create a new HttpClient and Post Header 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost("http://www.yoursite.com/script.php"); 

     try { 
       // Add your data 
       List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
       nameValuePairs.add(new BasicNameValuePair("id", "12345")); 
       nameValuePairs.add(new BasicNameValuePair("stringdata", "AndDev is Cool!")); 
       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

       // Execute HTTP Post Request 
       HttpResponse response = httpclient.execute(httppost); 
       StatusLine statusLine = response.getStatusLine(); 
       if(statusLine.getStatusCode() == HttpURLConnection.HTTP_OK){ 
       result = EntityUtils.toByteArray(response.getEntity()); 
       str = new String(result, "UTF-8"); 
      } 
      } catch (ClientProtocolException e) { 
      // TODO Auto-generated catch block 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
     } 
     return str; 
    } 

    /** 
    * on getting result 
    */ 
    @Override 
    protected void onPostExecute(String result) { 
     // something with data retrieved from server in doInBackground 
    } 
} 

및 버튼 :

buttonclick.setOnClickListener(new View.OnClickListener() 
     { 
     public void onClick(View v) { 
     new onbuttonclickHttpPost.execute(null); 

    } 
     }); 
+1

이므 란 내가 똑같은 일을했는데, 내 프로젝트에 코드를 복사했지만 감염된 String doInBackground (String ... params)의 유형을 Void로 변경하라는 메시지가 표시됩니다. –

+0

좋은 답변입니다! 제 질문은 여전히 ​​관련이 있습니까? 나는. 버튼 클릭시 HTTP 요청/응답을 실행하는 사람들이 있습니까? 제가 물어 본 이유는 2012 년에 게시되었습니다. –

0

이 시도 ... 그 내 작업 프로젝트에서

나는 이것을 실행하기 위해 ThreadNameValuePair을 사용했습니다 .....

public String postData(String url, String xmlQuery) { 

     final String urlStr = url; 
     final String xmlStr = xmlQuery; 
     final StringBuilder sb = new StringBuilder(); 

     Thread t1 = new Thread(new Runnable() { 

      public void run() { 

       HttpClient httpclient = new DefaultHttpClient(); 

       HttpPost httppost = new HttpPost(urlStr); 

       try { 

        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(
          1); 
        nameValuePairs.add(new BasicNameValuePair("xml", xmlStr)); 

        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

        HttpResponse response = httpclient.execute(httppost); 

        Log.d("Vivek", response.toString()); 

        HttpEntity entity = response.getEntity(); 
        InputStream i = entity.getContent(); 

        Log.d("Vivek", i.toString()); 
        InputStreamReader isr = new InputStreamReader(i); 

        BufferedReader br = new BufferedReader(isr); 

        String s = null; 

        while ((s = br.readLine()) != null) { 

         Log.d("YumZing", s); 
         sb.append(s); 
        } 

        Log.d("Check Now", sb + ""); 

       } catch (ClientProtocolException e) { 

        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } /* 
       * catch (ParserConfigurationException e) { // TODO 
       * Auto-generated catch block e.printStackTrace(); } catch 
       * (SAXException e) { // TODO Auto-generated catch block 
       * e.printStackTrace(); } 
       */ 
      } 

     }); 

     t1.start(); 
     try { 
      t1.join(); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     System.out.println("Getting from Post Data Method " + sb.toString()); 

     return sb.toString(); 
    } 
관련 문제