![](/img/trans.png)
[英]How to properly upload gps data from android app to XAMPP MYSQL using PHP POST Method?
[英]How to properly POST data from Android App to PHP?
我正在开发一个必须将用户数据发布到数据库(登录,密码,设备ID,纬度和经度)的应用程序。 我正在尝试通过PHP发布信息,但出现错误“第1行第1列路径$的输入结束” 。
我不确定该怎么办。
我试图用gson做些事情,但是也没有用。 如果有人有任何想法,请让我知道... :)
这是我的MainActivity代码:
public void createPost(String loginStr, String passwordStr, String id_urzadzenia, double latitude, double longitude) throws IOException {
Gson gson = new GsonBuilder()
.setLenient()
.create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://unpreached-courtesy.000webhostapp.com")
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
API ApiPlaceHolder = retrofit.create(API.class);
Call<Post> call = ApiPlaceHolder
.createPost(
loginStr,
passwordStr,
id_urzadzenia,
latitude,
longitude);
call.enqueue(new Callback<Post>() {
@Override
public void onResponse(Call<Post> call, Response<Post> response) {
if (!response.isSuccessful()) {
Toast.makeText(MainActivity.this, "Code " + response.code(), Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call<Post> call, Throwable t) {
Toast.makeText(MainActivity.this, t.getMessage(), Toast.LENGTH_LONG).show();
Toast.makeText(MainActivity.this, call.request().toString(), Toast.LENGTH_SHORT).show();
}
});
}
API接口代码:
public interface API {
@FormUrlEncoded
@POST("/dane.php")
Call<Post> createPost (
@Field("loginStr")String loginStr,
@Field("passwordStr") String passwordStr,
@Field("id_urzadzenia") String id_urzadzenia,
@Field("latitude") double latitude,
@Field("longitude") double longitude
);
}
Post.java类代码:
public class Post {
private String loginStr;
private String passwordStr;
private String id_urzadzenia;
private double latitude;
private double longitude;
public String getLoginStr() {
return loginStr;
}
public void setLoginStr(String loginStr) {
this.loginStr = loginStr;
}
public String getPasswordStr() {
return passwordStr;
}
public void setPasswordStr(String passwordStr) {
this.passwordStr = passwordStr;
}
public String getId_urzadzenia() {
return id_urzadzenia;
}
public void setId_urzadzenia(String id_urzadzenia) {
this.id_urzadzenia = id_urzadzenia;
}
public double getLatitude() {
return latitude;
}
public void setLatitude(double latitude) {
this.latitude = latitude;
}
public double getLongitude() {
return longitude;
}
public void setLongitude(double longitude) {
this.longitude = longitude;
}
}
还有我的PHP:
<?php header('Content-Type: application/json');
$con = mysqli_connect(DB_SERVER,DB_USER,DB_PASSWORD,DB_DATABASE);
$login = $_POST["loginStr"];
$id_urz = $_POST["id_urzadzenia"];
$dl_geo = $_POST["longitude"];
$sz_geo = $_POST["latitude"];
echo "Login użytkownika: " .$login . "\n";
echo "ID urządzenia: " . $id_urz . "\n";
echo "Szerokość geograficzna: " . $sz_geo . "\n";
echo "Długość geograficzna: " . $dl_geo . "\n";
date_default_timezone_get(Europe);
$godz = date("H:i:s");
$sql = "INSERT INTO TABLE bartek (id_urzadzenia,szerokosc,dlugosc,data) VALUES ('".json_encode($id_urz)."','".json_encode($sz_geo)."','".json_encode($dl_geo)."','".$godz."'";
mysqli_query($con, $sql);
mysqli_close($con);
?>
尝试这个
在Gradle中
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.5.0'
在接口中,例如:make RetrofitAPI.java
public static PostService postService = null;
public static PostService getService() {
if (postService == null) {
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(interceptor).build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(base_url)
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.build();
postService = retrofit.create(PostService.class);
}
return postService;
}
public interface API {
@FormUrlEncoded
@POST
Call<Post> createPost(@Url String url,
@Field("id_urzadzenia") String id_urzadzenia,
@Field("loginStr") String loginStr,
@Field("passwordStr") String passwordStr,
@Field("longitude") String longitude,
@Field("latitude") String latitude
);
}
在MainActivity中
public void createPost(String loginStr, String passwordStr, String id_urzadzenia, double latitude, double longitude) throws IOException {
final Call<Post> call_api = RetrofitAPI.getService().createPost(url, id_urzadzenia, loginStr, passwordStr, longitude, latitude );
call_api.enqueue(new Callback<Post>() {
@Override
public void onResponse(Call<Post> call, Response<Post> response) {
if(response.body() != null){
// Toast.makeText(ACTIVITY.this, "Success!!!", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call<Post> call, Throwable t) {
// Toast.makeText(ACTIVITY.this, "Error Occured", Toast.LENGTH_SHORT).show();
}
});
}
}
像这样更改您的php文件。 现在它应该插入您的数据库
//your database configuration
$con = mysqli_connect(DB_SERVER,DB_USER,DB_PASSWORD,DB_DATABASE);
$login = $_POST["loginStr"];
$id_urz = $_POST["id_urzadzenia"];
$dl_geo = $_POST["longitude"];
$sz_geo = $_POST["latitude"];
// echo "Login użytkownika: " .$login . "\n";
// echo "ID urządzenia: " . $id_urz . "\n";
// echo "Szerokość geograficzna: " . $sz_geo . "\n";
// echo "Długość geograficzna: " . $dl_geo . "\n";
date_default_timezone_get(Europe);
$godz = date("H:i:s");
$sql = "INSERT INTO bartek (id_urzadzenia,szerokosc,dlugosc,data) VALUES ('$id_urz','$sz_geo','$dl_geo','$godz')";
mysqli_query($con, $sql);
mysqli_close($con);
?>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.