在 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;
    }
}