在 android 中使用改造将数据保存到 mysql 后端 (POST)
Saving Data to mysql backend (POST) using retrofit in android
我正在尝试 post 一些数据使用改造在我的应用程序中进行后端处理。我尝试了一种方法,但数据未 posted 而是显示 somw 错误,以下是我的关注 类:
1) ApiService 接口
public interface ApiService {
@FormUrlEncoded
@POST("/enquiry.php")
Call<InsertData> insertFood(@Field("id")String id,@Field("Recipient_Email") String Recipient_Email, @Field("Subject") String Subject, @Field("Message") String Message);
}
2)InsertData.java
public class InsertData {
@SerializedName("id")
private String id;
@SerializedName("Recipient_email")
private String Recipient_email;
@SerializedName("Subject")
private String Subject;
@SerializedName("Message")
private String Message;
public InsertData(String id, String Recipient_email, String Subject, String Message) {
this.id = id;
this.Recipient_email = Recipient_email;
this.Subject = Subject;
this.Message = Message;
}
public InsertData() {
}
public void setId(String id) {
this.id = id;
}
public void setRecipient_email(String Recipient_email) {
this.Recipient_email = Recipient_email;
}
public void setSubject(String Subject){
this.Subject = Subject;
}
public void setMessage(String Message){
this.Message=Message;
}
}
3) MainActivity.java
public class MainActivity extends AppCompatActivity {
private Button btnInsert;
private ProgressDialog progressDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnInsert = (Button) findViewById(R.id.savebtn_id);
progressDialog = new ProgressDialog(this);
progressDialog.setTitle("Inserting");
progressDialog.setMessage("Please wait ....");
final EditText etRecipient = (EditText) findViewById(R.id.recipient_id);
final EditText etSubject = (EditText) findViewById(R.id.subject_id);
final EditText etMessage = (EditText)findViewById(R.id.message_id);
final EditText etid = (EditText)findViewById(R.id.id2);
btnInsert.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
progressDialog.show();
String id= etid.getText().toString();
String Recipient_Email = etRecipient.getText().toString();
String Subject = etSubject.getText().toString();
String Message = etMessage.getText().toString();
insertData(id,Recipient_Email,Subject,Message);
}
});
}
/**
* this method used to send data to server or our local server
* @param id
* @param Recipient_Email
* @param Subject
* @param Message
*/
private void insertData(String id, String Recipient_Email, String Subject, String Message){
ApiService apiService = ApiClient.getClient().create(ApiService.class);
Call<InsertData> call = apiService.insertFood(id,Recipient_Email, Subject,Message);
call.enqueue(new Callback<InsertData>() {
@Override
public void onResponse(Call<InsertData> call, Response<InsertData> response) {
InsertData insertData = response.body();
progressDialog.dismiss();
Toast.makeText(MainActivity.this,"GONE :"+response.body().toString() , Toast.LENGTH_LONG).show();
}
@Override
public void onFailure(Call<InsertData> call, Throwable t) {
Toast.makeText(MainActivity.this, t.getMessage(), Toast.LENGTH_SHORT).show();
progressDialog.dismiss();
}
});
}
}
我不知道我做错了什么。我在 MainActivity 中的 onResponse 方法显示以下 TOAST 响应:
GONE: Response(protocol=h2,code=404,message=,url=这里显示我的 url)
并且数据未post发送到后端。任何帮助将不胜感激。
谢谢。
编辑,
1) ApiClient.java
public class ApiClient {
public static final String URL="https://pksinghhps.000webhostapp.com/asserts/";
public static Retrofit RETROFIT = null;
public static Retrofit getClient(){
if(RETROFIT==null){
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new LoggingInterceptor())
.build();
RETROFIT = new Retrofit.Builder()
.baseUrl(URL)
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return RETROFIT;
}
}
2) enquiry.php
<?PHP
include("connection.php");
if(isset($_POST['id']) && isset($_POST['Recipient_email']) &&
isset($_POST['Subject']) && isset($_POST['Message']))
{
$id=$_POST["id"];
$Recipient_email=$_POST["Recipient_email"];
$Subject=$_POST["Subject"];
$Message=$_POST["Message"];
$result = mysqli_query($conn, "SELECT id FROM enquiries WHERE color =
'".$id."'");
if(mysqli_num_rows($result) > 0)
{
echo "id exist";
exit;
}
else
{
$query="INSERT INTO
enquiries(id,Recipient_email,Subject,Message)
VALUES('$id','$Recipient_email','$Subject','$Message')";
$data=mysqli_query($conn,$query);
if($data)
{
echo "Successfully data sent";
}
else
{
echo "Error in sending data";
}
exit;
}
}
?>
你在这里犯了一个小错误..
在你的 PHP 代码中你有 Recipient_email 并且在改造中你发送 Recipient_Email
改变这个
@POST("/enquiry.php")
Call<InsertData> insertFood(@Field("id")String id,@Field("Recipient_Email") String Recipient_Email, @Field("Subject") String Subject, @Field("Message") String Message);
到
@POST("enquiry.php")
Call<InsertData> insertFood(@Field("id")String id,@Field("Recipient_email") String Recipient_Email, @Field("Subject") String Subject, @Field("Message") String Message);
编辑 1:
更改模型class
public class InsertData {
@SerializedName("id")
private String id;
@SerializedName("Recipient_email")
private String Recipient_email;
@SerializedName("Subject")
private String Subject;
@SerializedName("Message")
private String Message;
@SerializedName("success")
private String success;
@SerializedName("message")
private String message_resp;
public InsertData(String id, String Recipient_email, String Subject, String Message) {
this.id = id;
this.Recipient_email = Recipient_email;
this.Subject = Subject;
this.Message = Message;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getRecipient_email() {
return Recipient_email;
}
public void setRecipient_email(String recipient_email) {
Recipient_email = recipient_email;
}
public String getSubject() {
return Subject;
}
public void setSubject(String subject) {
Subject = subject;
}
public String getMessage() {
return Message;
}
public void setMessage(String message) {
Message = message;
}
public String getSuccess() {
return success;
}
public void setSuccess(String success) {
this.success = success;
}
public String getMessage_resp() {
return message_resp;
}
public void setMessage_resp(String message_resp) {
this.message_resp = message_resp;
}
}
我正在尝试 post 一些数据使用改造在我的应用程序中进行后端处理。我尝试了一种方法,但数据未 posted 而是显示 somw 错误,以下是我的关注 类:
1) ApiService 接口
public interface ApiService {
@FormUrlEncoded
@POST("/enquiry.php")
Call<InsertData> insertFood(@Field("id")String id,@Field("Recipient_Email") String Recipient_Email, @Field("Subject") String Subject, @Field("Message") String Message);
}
2)InsertData.java
public class InsertData {
@SerializedName("id")
private String id;
@SerializedName("Recipient_email")
private String Recipient_email;
@SerializedName("Subject")
private String Subject;
@SerializedName("Message")
private String Message;
public InsertData(String id, String Recipient_email, String Subject, String Message) {
this.id = id;
this.Recipient_email = Recipient_email;
this.Subject = Subject;
this.Message = Message;
}
public InsertData() {
}
public void setId(String id) {
this.id = id;
}
public void setRecipient_email(String Recipient_email) {
this.Recipient_email = Recipient_email;
}
public void setSubject(String Subject){
this.Subject = Subject;
}
public void setMessage(String Message){
this.Message=Message;
}
}
3) MainActivity.java
public class MainActivity extends AppCompatActivity {
private Button btnInsert;
private ProgressDialog progressDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnInsert = (Button) findViewById(R.id.savebtn_id);
progressDialog = new ProgressDialog(this);
progressDialog.setTitle("Inserting");
progressDialog.setMessage("Please wait ....");
final EditText etRecipient = (EditText) findViewById(R.id.recipient_id);
final EditText etSubject = (EditText) findViewById(R.id.subject_id);
final EditText etMessage = (EditText)findViewById(R.id.message_id);
final EditText etid = (EditText)findViewById(R.id.id2);
btnInsert.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
progressDialog.show();
String id= etid.getText().toString();
String Recipient_Email = etRecipient.getText().toString();
String Subject = etSubject.getText().toString();
String Message = etMessage.getText().toString();
insertData(id,Recipient_Email,Subject,Message);
}
});
}
/**
* this method used to send data to server or our local server
* @param id
* @param Recipient_Email
* @param Subject
* @param Message
*/
private void insertData(String id, String Recipient_Email, String Subject, String Message){
ApiService apiService = ApiClient.getClient().create(ApiService.class);
Call<InsertData> call = apiService.insertFood(id,Recipient_Email, Subject,Message);
call.enqueue(new Callback<InsertData>() {
@Override
public void onResponse(Call<InsertData> call, Response<InsertData> response) {
InsertData insertData = response.body();
progressDialog.dismiss();
Toast.makeText(MainActivity.this,"GONE :"+response.body().toString() , Toast.LENGTH_LONG).show();
}
@Override
public void onFailure(Call<InsertData> call, Throwable t) {
Toast.makeText(MainActivity.this, t.getMessage(), Toast.LENGTH_SHORT).show();
progressDialog.dismiss();
}
});
}
}
我不知道我做错了什么。我在 MainActivity 中的 onResponse 方法显示以下 TOAST 响应:
GONE: Response(protocol=h2,code=404,message=,url=这里显示我的 url)
并且数据未post发送到后端。任何帮助将不胜感激。
谢谢。
编辑,
1) ApiClient.java
public class ApiClient {
public static final String URL="https://pksinghhps.000webhostapp.com/asserts/";
public static Retrofit RETROFIT = null;
public static Retrofit getClient(){
if(RETROFIT==null){
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new LoggingInterceptor())
.build();
RETROFIT = new Retrofit.Builder()
.baseUrl(URL)
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return RETROFIT;
}
}
2) enquiry.php
<?PHP
include("connection.php");
if(isset($_POST['id']) && isset($_POST['Recipient_email']) &&
isset($_POST['Subject']) && isset($_POST['Message']))
{
$id=$_POST["id"];
$Recipient_email=$_POST["Recipient_email"];
$Subject=$_POST["Subject"];
$Message=$_POST["Message"];
$result = mysqli_query($conn, "SELECT id FROM enquiries WHERE color =
'".$id."'");
if(mysqli_num_rows($result) > 0)
{
echo "id exist";
exit;
}
else
{
$query="INSERT INTO
enquiries(id,Recipient_email,Subject,Message)
VALUES('$id','$Recipient_email','$Subject','$Message')";
$data=mysqli_query($conn,$query);
if($data)
{
echo "Successfully data sent";
}
else
{
echo "Error in sending data";
}
exit;
}
}
?>
你在这里犯了一个小错误..
在你的 PHP 代码中你有 Recipient_email 并且在改造中你发送 Recipient_Email
改变这个
@POST("/enquiry.php")
Call<InsertData> insertFood(@Field("id")String id,@Field("Recipient_Email") String Recipient_Email, @Field("Subject") String Subject, @Field("Message") String Message);
到
@POST("enquiry.php")
Call<InsertData> insertFood(@Field("id")String id,@Field("Recipient_email") String Recipient_Email, @Field("Subject") String Subject, @Field("Message") String Message);
编辑 1:
更改模型class
public class InsertData {
@SerializedName("id")
private String id;
@SerializedName("Recipient_email")
private String Recipient_email;
@SerializedName("Subject")
private String Subject;
@SerializedName("Message")
private String Message;
@SerializedName("success")
private String success;
@SerializedName("message")
private String message_resp;
public InsertData(String id, String Recipient_email, String Subject, String Message) {
this.id = id;
this.Recipient_email = Recipient_email;
this.Subject = Subject;
this.Message = Message;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getRecipient_email() {
return Recipient_email;
}
public void setRecipient_email(String recipient_email) {
Recipient_email = recipient_email;
}
public String getSubject() {
return Subject;
}
public void setSubject(String subject) {
Subject = subject;
}
public String getMessage() {
return Message;
}
public void setMessage(String message) {
Message = message;
}
public String getSuccess() {
return success;
}
public void setSuccess(String success) {
this.success = success;
}
public String getMessage_resp() {
return message_resp;
}
public void setMessage_resp(String message_resp) {
this.message_resp = message_resp;
}
}