HTTP POST双变量

时间:2015-11-05 05:08:53

标签: java android

我为一个应该占用经度和纬度的Android应用程序编写代码我希望将其发布到Web服务器但是在我的Android手机上运行它时,这个代码插入了null值mysql数据库,我是android开发的新手,所以请帮助我,你的建议将受到高度赞赏 提前谢谢

 package com.example.mypc.myapplication;
    import android.location.Criteria;
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.LocationManager;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.app.Activity;
    import android.content.Context;
    import android.view.View;
    import android.widget.TextView;
    import android.view.Menu;
    import android.widget.Toast;

    import org.apache.http.HttpEntity;
    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 java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;

    public class MainActivity extends Activity implements LocationListener{
        LocationManager lm;
        TextView lt, ln;
        String provider;
        Location l;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            ln=(TextView)findViewById(R.id.lng);
            lt=(TextView)findViewById(R.id.lat);
            //get location service
            lm=(LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
            Criteria c=new Criteria();
            //criteria object will select best service based on
            //Accuracy, power consumption, response, bearing and monetary cost
            //set false to use best service otherwise it will select the default Sim network
            //and give the location based on sim network
            //now it will first check satellite than Internet than Sim network location
            provider=lm.getBestProvider(c, false);
            //now you have best provider
            //get location
            l=lm.getLastKnownLocation(provider);
            if(l!=null)
            {
                //get latitude and longitude of the location
                double lng=l.getLongitude();
                double lat=l.getLatitude();
                //display on text view
                ln.setText(""+lng);
                lt.setText(""+lat);
            }
            else
            {
                ln.setText("No Provider");
                lt.setText("No Provider");
            }
        }
        //If you want location on changing place also than use below method
        //otherwise remove all below methods and don't implement location listener
        @Override
        public void onLocationChanged(Location arg0)
        {
            double lng=l.getLongitude();
            double lat=l.getLatitude();
            ln.setText(""+lng);
            lt.setText(""+lat);
        }
        public void insert(View view){
            String lati = lt.getText().toString();
            String longi = ln.getText().toString();

            insertToDatabase(lati,longi);
        }
        private void insertToDatabase(final String lt, final String ln){
            class SendPostReqAsyncTask extends AsyncTask<String, Void, String> {
                @Override
                protected String doInBackground(String... params) {
                    String paramlt = params[0];
                    String paramln = params[1];


                    List<BasicNameValuePair> nameValuePairs = new ArrayList<BasicNameValuePair>();
                    nameValuePairs.add(new BasicNameValuePair("latitude",Double.toString(Double.parseDouble(lt))));
                   nameValuePairs.add(new BasicNameValuePair("Longitude",Double.toString(Double.parseDouble(ln))));

                   try {
                        HttpClient httpClient = new DefaultHttpClient();
                        HttpPost httpPost = new HttpPost(
                                "http://calcare.pk/insert.php");
                        httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

                        HttpResponse response = httpClient.execute(httpPost);

                        HttpEntity entity = response.getEntity();


                    } catch (ClientProtocolException e) {

                    } catch (IOException e) {

                    }
                    return "success";
                }
                @Override
                protected void onPostExecute(String result) {
                    super.onPostExecute(result);

                    Toast.makeText(getApplicationContext(), result, Toast.LENGTH_LONG).show();
                    TextView textViewResult = (TextView) findViewById(R.id.textViewResult);
                    textViewResult.setText("Inserted");
                }
            }
            SendPostReqAsyncTask sendPostReqAsyncTask = new SendPostReqAsyncTask();
            sendPostReqAsyncTask.execute(lt, ln);
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.menu_main, menu);
            return true;
        }
        @Override
        public void onProviderDisabled(String arg0) {
            // TODO Auto-generated method stub
        }
        @Override
        public void onProviderEnabled(String arg0) {
            // TODO Auto-generated method stub
        }

        @Override
        public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
            // TODO Auto-generated method stub
        }
    }

我在mysql中插入数据的PhP脚本如下所示

<?php
    $host='7.8.7.10';
    $uname='asdfa';
    $pwd='asdffp';
    $db="asdfasf";

    $con = mysql_connect($host,$uname,$pwd) or die("connection failed");
    mysql_select_db($db,$con) or die("db selection failed");

    $Latitude = $_POST['lati'];
       $Longitude = $_POST['longi'];

    $flag['code']=0;

    if($r=mysql_query("insert into sample (latitude,Longitude) values ('$Latitude','$Longitude')",$con))
    {
        $flag['code']=1;
        echo"hi";
    }

    print(json_encode($flag));
    mysql_close($con);
?>

1 个答案:

答案 0 :(得分:0)

SendPostReqAsyncTask sendPostReqAsyncTask = new SendPostReqAsyncTask();
String[] str = new String[2];
str[0] = lt;
str[1] = ln ;
sendPostReqAsyncTask.execute(str);

<强> doInBackground

nameValuePairs.add(new BasicNameValuePair("latitude",paramlt));
nameValuePairs.add(new BasicNameValuePair("Longitude",paramln));