2017-04-01 123 views
1

我尝试使用下面的代码从Android应用程序发送经纬度服务器

package com.example.john.bustrackgps; 

import android.Manifest; 

import android.content.Context; 
import android.content.Intent; 
import android.content.pm.PackageManager; 
import android.location.Criteria; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.support.v4.app.ActivityCompat; 
import android.support.v7.app.AlertDialog; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.TextView; 
import android.widget.Toast; 
import com.android.volley.RequestQueue; 
import com.android.volley.Response; 
import com.android.volley.toolbox.Volley; 

import org.json.JSONException; 
import org.json.JSONObject; 

public class MainActivity extends AppCompatActivity implements LocationListener { 

    LocationManager locationManager; 
    String mprovider; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     Criteria criteria = new Criteria(); 

     mprovider = locationManager.getBestProvider(criteria, false); 

     if (mprovider != null && !mprovider.equals("")) { 
      if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
       return; 
      } 
      Location location = locationManager.getLastKnownLocation(mprovider); 
      locationManager.requestLocationUpdates(mprovider, 15000, 1, this); 

      if (location != null) 
       onLocationChanged(location); 
      else 
       Toast.makeText(getBaseContext(), "No Location Provider Found Check Your Code", Toast.LENGTH_SHORT).show(); 
     } 
    } 

    public void onLocationChanged(Location location) { 
     TextView longitude = (TextView) findViewById(R.id.textView); 
     TextView latitude = (TextView) findViewById(R.id.textView1); 

     longitude.setText("Current Longitude: " + location.getLongitude()); 
     latitude.setText("Current Latitude: " + location.getLatitude()); 

     Response.Listener<String> responseListener = new Response.Listener<String>() { 

      @Override 
      public void onResponse(String response) { 
       try { 
        JSONObject jsonResponse = new JSONObject(response); 
        boolean success = jsonResponse.getBoolean("success"); 
        if (success) { 
         Intent intent = new Intent(MainActivity.this, ServerUpload.class); 
         MainActivity.this.startActivity(intent); 
        } else { 
         AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 
         builder.setMessage("Upload failed") 
           .setNegativeButton("Retry", null) 
           .create() 
           .show(); 
        } 

       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
     }; 


     ServerUpload registerRequest = new ServerUpload(latitude,longitude,responseListener); 
     RequestQueue queue = Volley.newRequestQueue(MainActivity.this); 
     queue.add(registerRequest); 

    } 

    public void onStatusChanged(String s,int i,Bundle bundle) 
    {} 

    public void onProviderEnabled(String s) 
    {} 

    public void onProviderDisabled(String s) 
    {} 
} 

这是我ServerUpload类

package com.example.john.bustrackgps; 

import android.widget.TextView; 

import com.android.volley.Response; 
import com.android.volley.toolbox.StringRequest; 
import java.util.HashMap; 
import java.util.Map; 


public class ServerUpload extends StringRequest { 
    private static final String REGISTER_REQUEST_URL = "http://192.168.169.2/serverfiles/bts.php"; 
    private Map<String, String> params; 

    public ServerUpload(TextView latitude, TextView longitude, Response.Listener<String> listener){ 

     super(Method.POST, REGISTER_REQUEST_URL, listener, null); 

     final String latitude1 =latitude.toString(); 
     final String longitude1 =longitude.toString(); 
     params = new HashMap<>(); 
     params.put("latitude", latitude1); 
     params.put("longitude", longitude1); 
    } 

    @Override 
    public Map<String, String> getParams() { 
     return params; 
    } 
} 

发送经纬度这是我bts.php代码

<?php 

$con = mysqli_connect("127.0.0.1", "root", "", "bustrack"); 


$latitude = $_POST["latitude"]; 

$longitude = $_POST["longitude"]; 

$statement = mysqli_prepare($con, "INSERT INTO updates (latitude, longitude) VALUES (?, ?)"); 

mysqli_stmt_bind_param($statement, "ss", $latitude, $longitude); 

mysqli_stmt_execute($statement); 


$response = array(); 

$response["success"] = true; 


echo json_encode($response); 

问题是数据没有输入数据库。它的0,0或“android.extends ....”

我是非常新的android和不知道问题是。任何帮助,将不胜感激!!!

+0

首先检查/调试,你得到纬度长或没有,然后尝试检查数据传递到服务器的正常与否?之后检查您的PHP代码数据库。 – AmeeJoshi

+0

是的,我得到了正确的经度和纬度。他们得到显示。数据传递到服务器时发生问题。 – John

+0

我认为你的问题不清楚有服务器或Android端代码的问题? –

回答

0

修复您的ServerUpload方法中的此错误。

final String latitude1 =latitude.getText().toString(); 
final String longitude1 =longitude.getText().toString(); 

试试这个

public ServerUpload(TextView latitude, TextView longitude, Response.Listener<String> listener){ 

    super(Method.POST, REGISTER_REQUEST_URL, listener, null); 

    final String latitude1 =latitude.getText().toString(); 
    final String longitude1 =longitude.getText().toString(); 
    params = new HashMap<>(); 
    params.put("latitude", latitude1); 
    params.put("longitude", longitude1); 
} 
+0

非常感谢你!它现在上传。然而,应用程序在更新到服务器后立即崩溃。经度和纬度被插入两次。你能帮我解决吗?注意:它也曾经在之前崩溃。我不知道为什么...... – John

+0

@John问你的堆栈跟踪和代码的另一个问题。 – Darish

+0

好吧,我会的。谢谢!!! – John

相关问题