无法将数据从Android应用程序发送到PHP网页(错误:遗憾的是应用程序停止工作)

Hello I want to post a string from my android application to a website in PHP using Httppost The application lay out consists of a text box and a send button .When I click on Send button the application crashes with a message Unfortunately the application stopped working.Can any body please provide how to solve the problem.

The MainActivity.java File

 package com.example.test5;

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

    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 com.example.test5.R;

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


    public class MainActivity extends Activity {

         Button sendButton;

            EditText msgTextField;

            /** Called when the activity is first created. */
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);       

                // make message text field object
                msgTextField = (EditText) findViewById(R.id.msgTextField);
                // make send button object
                sendButton = (Button) findViewById(R.id.sendButton);

            }

            // this is the function that gets called when you click the button
            public void send(View v)
            {
                // get the message from the message text box
                String msg = msgTextField.getText().toString();  

                // make sure the fields are not empty
                if (msg.length()>0)
                   {

                   HttpClient httpclient = new DefaultHttpClient();

                  HttpPost httppost = new HttpPost("http://thawide.com/androidtest.php");

                   List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
                   nameValuePairs.add(new BasicNameValuePair("id", "12345"));
                   nameValuePairs.add(new BasicNameValuePair("message", msg));
                   try {
                    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                } catch (UnsupportedEncodingException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                   try {
                    httpclient.execute(httppost);
                } catch (ClientProtocolException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                  msgTextField.setText(""); // clear text box
                Toast.makeText(getBaseContext(),"sucess",Toast.LENGTH_SHORT).show();


                }
                else
                {
                    // display message if text fields are empty
                    Toast.makeText(getBaseContext(),"All field are required",Toast.LENGTH_SHORT).show();
                }

            }


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

    }

Menifest File

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

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

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.test5.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>

activity_main.XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >



    <EditText
        android:id="@+id/msgTextField"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/sendButton"
        android:layout_below="@+id/textView2"
        android:layout_marginTop="59dp"
        android:ems="10" />

    <Button
        android:id="@+id/sendButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView1"
        android:layout_below="@+id/msgTextField"
        android:layout_marginTop="72dp"
        android:onClick="send"
        android:text="Send" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/msgTextField"
        android:layout_below="@+id/textView1"
        android:layout_marginTop="60dp"
        android:text="Message" />


</RelativeLayout>

server side code

<?php
// get the "message" variable from the post request
// this is the data coming from the Android app
$message=$_POST["message"]; 
// specify the file where we will save the contents of the variable message
$filename="androidmessages.html";
// write (append) the data to the file
//file_put_contents($filename,$message."<br />",FILE_APPEND);
 $fh = fopen("androidmessages.html", "wb");
fwrite($fh, $message."<br />");
fclose($fh);
// load the contents of the file to a variable
$androidmessages=file_get_contents($filename);

// display the contents of the variable (which has the contents of the file)
echo $androidmessages;

?>

You should not perform network IO on the UI thread. You'll need to use AsyncTask or Thread to perform your network transaction on a background thread.

You can refer to this Tutorial to get more understanding.

Surround HttpClient with try catch block and put the Stack Trace here.. You may perform all Internet requests in AsyncTask that is really simple to use and don't process in the UI thread.