2014-01-19 2 views
0

Я хочу отправить строку методом POST, но, давая эту ошибку, и я не могу найти, вы можете мне помочь?Странная ошибка в HttpPost для отправки в файл PHP

Это дает очень странное исключение, APA не открывается и теперь ошибка, экран MainActivity не совсем выглядит.

Мой код:

MainActivity.java 

package com.app.androidpost; 

import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 

import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.message.BasicNameValuePair; 
import org.apache.http.util.EntityUtils; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    HttpClient httpclient = new DefaultHttpClient(); 

     HttpPost httppost = new HttpPost("http://www.meusite.com/ws/default.php"); 

     try { 

      List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
      nameValuePairs.add(new BasicNameValuePair("action", "Sucesso")); 
      httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

      HttpResponse response = httpclient.execute(httppost); 
      String responseText = EntityUtils.toString(response.getEntity()); 
      Toast.makeText(this, responseText , 5000).show(); 

     } 
     catch (ClientProtocolException e) { 
      Toast.makeText(this, "Erro Conversão" , 5000).show(); 
     } 
     catch (IOException e) { 
      Toast.makeText(this, "Erro conexão" , 5000).show(); 
     } 

    } 

} 

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.app.androidpost" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="15" 
     android:targetSdkVersion="15" /> 
    <uses-permission android:name="android.permission.INTERNET"/> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="com.app.androidpost.MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

PHP код

<?php 

$reversed = $_POST["action"]; 

echo $reversed; 

?> 

Logcat

01-20 18:42:03.909: W/dalvikvm(25243): threadid=1: thread exiting with uncaught exception (group=0x40dab1f8) 
01-20 18:42:03.949: E/AndroidRuntime(25243): FATAL EXCEPTION: main 
01-20 18:42:03.949: E/AndroidRuntime(25243): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.app.androidpost/com.app.androidpost.MainActivity}: android.os.NetworkOnMainThreadException 
01-20 18:42:03.949: E/AndroidRuntime(25243): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1960) 
01-20 18:42:03.949: E/AndroidRuntime(25243): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1985) 
01-20 18:42:03.949: E/AndroidRuntime(25243): at android.app.ActivityThread.access$600(ActivityThread.java:127) 
01-20 18:42:03.949: E/AndroidRuntime(25243): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1151) 
01-20 18:42:03.949: E/AndroidRuntime(25243): at android.os.Handler.dispatchMessage(Handler.java:99) 
01-20 18:42:03.949: E/AndroidRuntime(25243): at android.os.Looper.loop(Looper.java:137) 
01-20 18:42:03.949: E/AndroidRuntime(25243): at android.app.ActivityThread.main(ActivityThread.java:4476) 
01-20 18:42:03.949: E/AndroidRuntime(25243): at java.lang.reflect.Method.invokeNative(Native Method) 
01-20 18:42:03.949: E/AndroidRuntime(25243): at java.lang.reflect.Method.invoke(Method.java:511) 
01-20 18:42:03.949: E/AndroidRuntime(25243): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:816) 
01-20 18:42:03.949: E/AndroidRuntime(25243): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:583) 
01-20 18:42:03.949: E/AndroidRuntime(25243): at dalvik.system.NativeStart.main(Native Method) 
01-20 18:42:03.949: E/AndroidRuntime(25243): Caused by: android.os.NetworkOnMainThreadException 
01-20 18:42:03.949: E/AndroidRuntime(25243): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099) 
01-20 18:42:03.949: E/AndroidRuntime(25243): at java.net.InetAddress.lookupHostByName(InetAddress.java:426) 
01-20 18:42:03.949: E/AndroidRuntime(25243): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:277) 
01-20 18:42:03.949: E/AndroidRuntime(25243): at java.net.InetAddress.getAllByName(InetAddress.java:251) 
01-20 18:42:03.949: E/AndroidRuntime(25243): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137) 
01-20 18:42:03.949: E/AndroidRuntime(25243): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
01-20 18:42:03.949: E/AndroidRuntime(25243): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
01-20 18:42:03.949: E/AndroidRuntime(25243): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 
01-20 18:42:03.949: E/AndroidRuntime(25243): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
01-20 18:42:03.949: E/AndroidRuntime(25243): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
01-20 18:42:03.949: E/AndroidRuntime(25243): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
01-20 18:42:03.949: E/AndroidRuntime(25243): at com.app.androidpost.MainActivity.onCreate(MainActivity.java:38) 
01-20 18:42:03.949: E/AndroidRuntime(25243): at android.app.Activity.performCreate(Activity.java:4636) 
01-20 18:42:03.949: E/AndroidRuntime(25243): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1051) 
01-20 18:42:03.949: E/AndroidRuntime(25243): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1924) 
01-20 18:42:03.949: E/AndroidRuntime(25243): ... 11 more 

Большого спасибо

+0

пожалуйста отправьте сообщение об ошибке и соответствующий код. большинство людей не скачивают и не просматривают ваш проект. –

+0

Мой код выше. Пожалуйста, помогите мне. – Desenvolvedor

+0

скопируйте также logcat –

ответ

0

У вас есть ошибка, так как вы пытаетесь подключиться к сети в главном потоке, и что не допускается Как вы можете прочитать here:

Исключения, которое возникает, когда приложение пытается выполнить сетевую операцию в своем основном потоке. Это делается только для приложений, ориентированных на SDK Honeycomb или . Приложениям, использующим более ранние версии SDK, разрешено создавать сети в своих основных потоках цикла событий, но в значительной степени обесценивается . См. Документ «Разработка для реагирования».

Вы должны использовать фоновый поток, такой как AsyncTask. У вас есть простой guide here

Ваш код будет выглядеть примерно так:

public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 

new HttpTask().execute("http://www.meusite.com/ws/default.php"); 

} 

private class HttpTask extends AsyncTask<String, Integer, Long> { 

    protected Long doInBackground(String... urls) { 
     int count = urls.length; 
     long totalSize = 0; 
     for (int i = 0; i < count; i++) { 

      HttpClient httpclient = new DefaultHttpClient(); 

      HttpPost httppost = new HttpPost(urls[i]); 

      try { 

       List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
      nameValuePairs.add(new BasicNameValuePair("action", "Sucesso")); 
       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

       HttpResponse response = httpclient.execute(httppost); 
       String responseText = EntityUtils.toString(response.getEntity()); 
       Toast.makeText(this, responseText , 5000).show(); 

      } 
      catch (ClientProtocolException e) { 
       Toast.makeText(this, "Erro Conversão" , 5000).show(); 
      } 
      catch (IOException e) { 
       Toast.makeText(this, "Erro conexão" , 5000).show(); 
      } 


      // Escape early if cancel() is called 
      if (isCancelled()) break; 
     } 
     return totalSize; 
    } 


    protected void onProgressUpdate(Integer... progress) { } 

    protected void onPostExecute(Long result) { } 
} 


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