2015-11-06 33 views
0

我是Android的新開發人員我對Java或Android沒有太多的經驗。我正在尋找一種將POST數據發送到PHP腳本並顯示結果的方法。這裏是我創造的Android程序發送在線MySQL服務器上的數據,但是當我插入的數據,它將插入Null值這裏是我的Android的Java代碼如何在Android應用程序中製作HTTP請求

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

?>

+0

嘗試http://square.github.io/okhttp/ –

回答

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

+0

謝謝#Akash現在工作(Y) –

+0

歡迎您,請標記爲正確:) – Aks4125

1

您是從Android和從PHP你得到它作爲$_POST['lt']

傳遞「緯度」,它會如何運作,都應該重點是相同

0

寫下面的代碼:

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

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

謝謝#Mahesh(Y)現在工作e :) –

相關問題