2013-02-26 3 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 ... –

+0

Поместить файл Php? ???? –

+1

Вы проверили ? –

ответ

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

+0

не могли бы вы рассказать мне, что мне нужно включить в проект для MultipartEntity, StringBody и resEntity, потому что теперь у меня есть ошибка на этом .. – vladimir

+0

@ vladimir Actualy вы не нужно 'MultipartEntity' всегда. Используйте 'HttpEntity', он сделает для вас – Prateek

13

я есть использовать эту технику, чтобы постучать сервер с помощью метода пост:

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 на runnable thread будет препятствовать получению исключения NetworkOnMainThreadException. Благодаря! – Clocker

+2

Также библиотеки Apache были удалены в Android Marshmallow, так что теперь это единственный жизнеспособный вариант. – nickdbush

+0

где результат? – Choletski

Смежные вопросы