2013-02-26 302 views
1

我無法從我的Android應用程序發送發送請求到服務器。 我發現有關如何發送POST 一些例子,但我有一些錯誤與我的代碼和這裏是代碼:Android,如何發送POST請求

public class MainActivity extends Activity 
{ 
private WebView wv; //Internet 
private EditText email1; //Edit's 
private EditText email2; //Edit's 
private Button btn_get_access; //Get Access 
private String post_url = "http://rasnacis.lv/vova.php"; 

@Override 
public void onCreate(Bundle savedInstanceState) 
{  
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    wv = (WebView) findViewById(R.id.webView1); 
    email1 = (EditText) findViewById(R.id.txt_email_1); 
    email2 = (EditText) findViewById(R.id.txt_email_2); 
    btn_get_access = (Button) findViewById(R.id.btn_get_access); 

    WebSettings webSettings = wv.getSettings(); 
    webSettings.setSaveFormData(true); 

    //BUTTON 
    OnClickListener ocl_btn_get_access = new OnClickListener() 
    { 

     public void onClick(View v) 
     { 

      String givenEmail1 = email1.getEditableText().toString(); 
      String givenEmail2 = email2.getEditableText().toString(); 

      //SENDING POST 
      if (givenEmail1.length() > 0 && givenEmail2.length() > 0) 
      { 
       HttpClient httpClient = new DefaultHttpClient(); 
       HttpPost httpPost = new HttpPost(post_url); 

       try 
       { 
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
        nameValuePairs.add(new BasicNameValuePair("email1", "email2")); 
        nameValuePairs.add(new BasicNameValuePair("email1", "slgjlskjgsg")); 
        nameValuePairs.add(new BasicNameValuePair("email2", "xkjfhgkdjfhgkdjfg")); 

        httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
        httpClient.execute(httpPost); 
       } 
       catch (ClientProtocolException e) 
       { 
        System.out.println("First Exception caz of HttpResponese :" + e); 
        e.printStackTrace(); 
       } 
       catch (IOException e) 
       { 
        System.out.println("Second Exception caz of HttpResponse :" + e); 
        e.printStackTrace(); 
       } 
      } 
      else 
      { 
       Toast.makeText(getBaseContext(), "All fields are required!", Toast.LENGTH_SHORT).show(); 
      } 

      //sending GET 
      //wv.loadUrl("http://rasnacis.lv/vova.php?email1=" + email1.getText() + "&email2=" + email2.getText()); 
     } 
    }; 
    btn_get_access.setOnClickListener(ocl_btn_get_access); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 

} 

所以有人幫助我呢?我只是開始Android開發,不知道很多竅門什麼困難......

+0

安置自己的logcat ... – 2013-02-26 06:17:45

+0

把PHP文件? ???? – 2013-02-26 06:18:58

+1

您是否檢查過? – 2013-02-26 06:19:27

回答

4

這是doPostRequest()方法在應用程序中使用,

這是你和有用完美的工作在我的代碼...

private void doPostRequest(){ 

    String urlString = "http://rasnacis.lv/vova.php"; 
    try 
    { 
     HttpClient client = new DefaultHttpClient(); 
     HttpPost post = new HttpPost(urlString); 

     MultipartEntity reqEntity = new MultipartEntity(); 
     reqEntity.addPart("email1_tag", new StringBody("email1_put_here")); 
     reqEntity.addPart("email2_tag", new StringBody("email2_put)here")); 
     reqEntity.addPart("email3_tag", new StringBody("email3_put_here")); 
     post.setEntity(reqEntity); 
     HttpResponse response = client.execute(post); 
     resEntity = response.getEntity(); 
     final String response_str = EntityUtils.toString(resEntity); 
     if (resEntity != null) { 
      Log.i("RESPONSE",response_str); 
      runOnUiThread(new Runnable(){ 
       public void run() { 
        try { 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
       } 
      }); 
     } 
    } 
    catch (Exception ex){ 
     Log.e("Debug", "error: " + ex.getMessage(), ex); 
    } 
} 

如果你實現這個鱈魚Ë你需要庫文件:

http://repo1.maven.org/maven2/org/apache/httpcomponents/httpmime/4.0.1/httpmime-4.0.1.jar

http://repo1.maven.org/maven2/org/apache/james/apache-mime4j/0.6/apache-mime4j-0.6.jar

+0

但wat是MultipartEntity?因爲我有一個編譯器錯誤在這... – vladimir 2013-02-26 06:51:12

+0

可以請告訴我,我需要包括到項目MultipartEntity,StringBody和resEntity,因爲現在我有這個錯誤.. – vladimir 2013-02-26 07:04:07

+0

@vladimir Actualy你沒有總是需要'MultipartEntity'。使用'HttpEntity'它會爲你做 – Prateek 2013-02-26 07:10:50

13

我已經使用這種技術使用POST方法敲服務器:

new Thread(new Runnable() { 
    @Override 
    public void run() { 
     try { 
      query = "name="+username+"&pass="+passwaord; 

      URL url = new URL("https:www.example.com/login.php"); 
      HttpURLConnection connection = (HttpURLConnection)url.openConnection(); 
      connection.setRequestProperty("Cookie", cookie); 
      //Set to POST 
      connection.setDoOutput(true); 
      connection.setRequestMethod("POST"); 
      connection.setReadTimeout(10000); 
      Writer writer = new OutputStreamWriter(connection.getOutputStream()); 
      writer.write(query); 
      writer.flush(); 
      writer.close(); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      Log.e(Tag, e.toString()); 
     } 
    } 
}).start(); 

我希望這將有助於。請確定,Cookie是否需要爲您的目的發佈。如果沒有,那麼你可以忽略connection.setRequestProperty("Cookie", cookie);一行。

query可以通過BasicNameValuePair創建,但我使用的過程對我來說更容易。

確保ü已設置的許可,您的清單互聯網:

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

我認爲這是一個更好的答案,使可運行線程上的POST將防止獲取NetworkOnMainThreadException。謝謝! – Clocker 2013-10-30 22:32:29

+2

此外,Android庫中的Apache庫已被刪除,因此這是現在唯一可行的選項。 – nickdbush 2015-10-03 11:14:51

+0

結果在哪裏? – Choletski 2016-11-22 15:17:23