Сохранение данных в MySQL Backend (POST) с помощью дооснащения в Android - PullRequest
0 голосов
/ 06 октября 2018

Я пытаюсь опубликовать некоторые данные для бэкенда в моем приложении, используя модификацию.Я попробовал метод, чтобы сделать это, но данные не публикуются, вместо этого он показывает ошибку 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();
        }
    });
}
}

Я не могу понять, что я делаю неправильно.Мой метод onResponse в MainActivity показывает следующий ответ TOAST:

GONE: Ответ (протокол = h2, код = 404, сообщение =, URL = здесь, показывая мой URL)

и данные не публикуются в бэкэнде.Любая помощь будет высоко оценена.

Спасибо.

Правки,

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

 ?>

1 Ответ

0 голосов
/ 06 октября 2018

Вы допустили небольшую ошибку здесь ..

В вашем 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);

TO

@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:

Изменить класс вашей модели

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