将数据从Android发送到PHP页面

将数据从Android发送到PHP页面,php,android,http,exception,Php,Android,Http,Exception,现在我正在尝试将数据从android应用程序(带模拟器)发送到web服务器(一个php页面)。首先,我用emulator试过这个程序,它正在运行。之后,我用电话尝试了这个程序,出现了一个异常: -->IO异常:操作超时 我的代码的一部分: HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://10.0.2.2:90/takeDatas.php"); try {

现在我正在尝试将数据从android应用程序(带模拟器)发送到web服务器(一个php页面)。首先,我用emulator试过这个程序,它正在运行。之后,我用电话尝试了这个程序,出现了一个异常:

-->IO异常:操作超时

我的代码的一部分:

HttpClient httpclient = new DefaultHttpClient();

HttpPost httppost = new HttpPost("http://10.0.2.2:90/takeDatas.php");
try {                   
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
    nameValuePairs.add(new BasicNameValuePair("enlem", latitude ));
    nameValuePairs.add(new BasicNameValuePair("boylam", longitude ));
    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    httpclient.execute(httppost);

} catch (ClientProtocolException e) {
    Toast.makeText(ReportLocationActivity.this, "Client protokol exception ", Toast.LENGTH_LONG).show();
} catch (IOException e) {
    Toast.makeText(ReportLocationActivity.this, "IO exception "+e.getMessage(), Toast.LENGTH_LONG).show();
}
HttpClient-HttpClient=newdefaulthttpclient();
HttpPost HttpPost=新的HttpPost(“http://10.0.2.2:90/takeDatas.php");
试试{
List nameValuePairs=新的ArrayList(2);
添加(新的BasicNameValuePair(“enlem”,纬度));
添加(新的BasicNameValuePair(“boylam”,经度));
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
httpclient.execute(httppost);
}捕获(客户端协议例外e){
Toast.makeText(ReportLocationActivity.this,“客户端协议异常”,Toast.LENGTH_LONG.show();
}捕获(IOE异常){
Toast.makeText(ReportLocationActivity.this,“IO异常”+e.getMessage(),Toast.LENGTH\u LONG.show();
}
我希望你能帮助我。
提前感谢。

emulator中的
localhost
就是emulator本身。不确定Windows环境,但在Linux下,我可以通过IP
10.0.2.2
(注意:此IP不是我的Linux系统的IP,但可以通过此IP从模拟器访问主机系统上的web服务器)。
您可以阅读有关仿真器联网的更多信息。

仿真器中的
localhost
就是仿真器本身。不确定Windows环境,但在Linux下,我可以通过IP
10.0.2.2
(注意:此IP不是我的Linux系统的IP,但可以通过此IP从模拟器访问主机系统上的web服务器)。
您可以阅读有关emulator联网的更多信息。

是,而不是使用127.0.0.1,或者,您必须使用

HttpClient-HttpClient=newdefaulthttpclient();
HttpPost HttpPost=新的HttpPost(“http://10.0.2.2/yourpage.php");
//这是要发送的数据
字符串MyName=“flower”//有要发送的数据吗
试一试{
//添加您的数据
List nameValuePairs=新的ArrayList(1);
添加(新的BasicNameValuePair(“action”,MyName));
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
//执行HTTP Post请求
ResponseHandler ResponseHandler=新BasicResponseHandler();
String response=httpclient.execute(httppost,responseHandler);
//这是来自php应用程序的响应
字符串反向限制=响应;
Toast.makeText(这是“response”+reverseString,Toast.LENGTH_LONG).show();
}捕获(客户端协议例外e){
Toast.makeText(这是“CPE响应”+e.toString(),Toast.LENGTH\u LONG.show();
//TODO自动生成的捕捉块
}捕获(IOE异常){
Toast.makeText(这是“IOE响应”+e.toString(),Toast.LENGTH\u LONG.show();
//TODO自动生成的捕捉块
}

是,而不是使用127.0.0.1,或者,您必须使用

HttpClient-HttpClient=newdefaulthttpclient();
HttpPost HttpPost=新的HttpPost(“http://10.0.2.2/yourpage.php");
//这是要发送的数据
字符串MyName=“flower”//有要发送的数据吗
试一试{
//添加您的数据
List nameValuePairs=新的ArrayList(1);
添加(新的BasicNameValuePair(“action”,MyName));
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
//执行HTTP Post请求
ResponseHandler ResponseHandler=新BasicResponseHandler();
String response=httpclient.execute(httppost,responseHandler);
//这是来自php应用程序的响应
字符串反向限制=响应;
Toast.makeText(这是“response”+reverseString,Toast.LENGTH_LONG).show();
}捕获(客户端协议例外e){
Toast.makeText(这是“CPE响应”+e.toString(),Toast.LENGTH\u LONG.show();
//TODO自动生成的捕捉块
}捕获(IOE异常){
Toast.makeText(这是“IOE响应”+e.toString(),Toast.LENGTH\u LONG.show();
//TODO自动生成的捕捉块
}

由于异步方法调用,可能会生成此错误。因此需要将该异步方法包装到类中。 代码如下:

 package com.example.asynchttppost;

    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 android.app.Activity;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ProgressBar;
    import android.widget.Toast;

    public class MainActivity extends Activity implements OnClickListener{

        private EditText value;
        private Button btn;
        private ProgressBar pb;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            value=(EditText)findViewById(R.id.editText1);
            btn=(Button)findViewById(R.id.button1);
            pb=(ProgressBar)findViewById(R.id.progressBar1);
            pb.setVisibility(View.GONE);
            btn.setOnClickListener(this);
        }


        public void onClick(View v) {
            // TODO Auto-generated method stub
                if(value.getText().toString().length()<1){

                    // out of range
                    Toast.makeText(this, "please enter something", Toast.LENGTH_LONG).show();
                }else{
                    pb.setVisibility(View.VISIBLE);
                    new MyAsyncTask().execute(value.getText().toString());      
                }


        } 

        private class MyAsyncTask extends AsyncTask<String, Integer, Double>{

            @Override
            protected Double doInBackground(String... params) {
                // TODO Auto-generated method stub
                postData(params[0]);
                return null;
            }

            protected void onPostExecute(Double result){
                pb.setVisibility(View.GONE);
                Toast.makeText(getApplicationContext(), "Code Sent", Toast.LENGTH_SHORT).show();
            }
            protected void onProgressUpdate(Integer... progress){
                pb.setProgress(progress[0]);
            }

            public void postData(String valueIWantToSend) {
                // Create a new HttpClient and Post Header
                String url= "your website url";
                //String url ="http://10.0.2.2/remoteaccess/";
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost(url);

                try {
                    // Add your data
                    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                    nameValuePairs.add(new BasicNameValuePair("myHttpData", valueIWantToSend));
                    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
                }
            }

        }
    }
package com.example.asynchtppost;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.List;
导入org.apache.http.HttpResponse;
导入org.apache.http.NameValuePair;
导入org.apache.http.client.ClientProtocolException;
导入org.apache.http.client.HttpClient;
导入org.apache.http.client.entity.UrlEncodedFormEntity;
导入org.apache.http.client.methods.HttpPost;
导入org.apache.http.impl.client.DefaultHttpClient;
导入org.apache.http.message.BasicNameValuePair;
导入android.app.Activity;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.ProgressBar;
导入android.widget.Toast;
公共类MainActivity扩展活动实现OnClickListener{
私有文本值;
专用按钮btn;
私人ProgressBar pb;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
值=(EditText)findViewById(R.id.editText1);
btn=(按钮)findViewById(R.id.button1);
pb=(ProgressBar)findViewById(R.id.progressBar1);
pb.setVisibility(View.GONE);
btn.setOnClickListener(此);
}
公共void onClick(视图v){
//TODO自动生成的方法存根
if(value.getT)
 package com.example.asynchttppost;

    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 android.app.Activity;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ProgressBar;
    import android.widget.Toast;

    public class MainActivity extends Activity implements OnClickListener{

        private EditText value;
        private Button btn;
        private ProgressBar pb;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            value=(EditText)findViewById(R.id.editText1);
            btn=(Button)findViewById(R.id.button1);
            pb=(ProgressBar)findViewById(R.id.progressBar1);
            pb.setVisibility(View.GONE);
            btn.setOnClickListener(this);
        }


        public void onClick(View v) {
            // TODO Auto-generated method stub
                if(value.getText().toString().length()<1){

                    // out of range
                    Toast.makeText(this, "please enter something", Toast.LENGTH_LONG).show();
                }else{
                    pb.setVisibility(View.VISIBLE);
                    new MyAsyncTask().execute(value.getText().toString());      
                }


        } 

        private class MyAsyncTask extends AsyncTask<String, Integer, Double>{

            @Override
            protected Double doInBackground(String... params) {
                // TODO Auto-generated method stub
                postData(params[0]);
                return null;
            }

            protected void onPostExecute(Double result){
                pb.setVisibility(View.GONE);
                Toast.makeText(getApplicationContext(), "Code Sent", Toast.LENGTH_SHORT).show();
            }
            protected void onProgressUpdate(Integer... progress){
                pb.setProgress(progress[0]);
            }

            public void postData(String valueIWantToSend) {
                // Create a new HttpClient and Post Header
                String url= "your website url";
                //String url ="http://10.0.2.2/remoteaccess/";
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost(url);

                try {
                    // Add your data
                    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                    nameValuePairs.add(new BasicNameValuePair("myHttpData", valueIWantToSend));
                    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
                }
            }

        }
    }