如何在Android应用程序中进行HTTP请求

时间:2015-11-06 06:33:59

标签: java php android

我是android的新开发者我没有很多Java或Android的经验。我正在寻找一种方法将POST数据发送到PHP脚本并显示结果。这里是我制作的android程序,用于在线mysql服务器上发送数据但是当我插入数据时它会插入Null值这里是我的android java代码

 package com.example.myapp.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);
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {

    }

    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>(2);
                nameValuePairs.add(new BasicNameValuePair("latitude", paramlt));
                nameValuePairs.add(new BasicNameValuePair("Longitude", paramln));

                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();
        String[] str = new String[2];
        str[0] = lt;
        str[1] = ln ;
        sendPostReqAsyncTask.execute(str);
    }

    @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
    }

  }

这里也是我的PHP脚本

<?php
$host='1.2.3.4';
$uname='android';
$pwd='asdfghj';
$db="asdf";

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

$Latitude = $_POST['lt'];
   $Longitude = $_POST['ln'];

$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);

&GT;

3 个答案:

答案 0 :(得分:1)

你正在经过“纬度”。来自android和php,你得到$_POST['lt']

它将如何工作,两个键应该相同

答案 1 :(得分:0)

写下面的代码:

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

$Latitude = $_POST['latitude'];
$Longitude = $_POST['Longitude'];

答案 2 :(得分:0)

变化

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

到这个

nameValuePairs.add(new BasicNameValuePair("lt", paramlt)); nameValuePairs.add(new BasicNameValuePair("ln", paramln));