我是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;
答案 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));