Это базовый проект для моего настоящего начинания.
Приложение для Android работает нормально и отправляет данные в базу данных, однако возникает исключение ошибки.
ИзображениеСкриншот экрана моего телефона
Основная деятельность
package com.mytrendin.retrofitsenddata;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import okhttp3.OkHttpClient;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class MainActivity extends AppCompatActivity {EditText name,email, password;
Button save;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
name= (EditText) findViewById(R.id.name);
email= (EditText) findViewById(R.id.email);
password= (EditText) findViewById(R.id.password);
save = (Button) findViewById(R.id.save);
save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
OkHttpClient client = new OkHttpClient();
Gson gson = new GsonBuilder()
.setLenient()
.create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://192.168.1.4")
.client(client)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();ApiService service = retrofit.create(ApiService.class);
Student student = new Student();
student.setName(name.getText().toString());
student.setEmail(email.getText().toString());
student.setPassword(email.getText().toString());
Call<Student> call = service.insertData(student.getName(),student.getEmail(),student.getPassword());
call.enqueue(new Callback<Student>() {
@Override
public void onResponse(Call<Student> call, Response<Student> response) {
Toast.makeText(MainActivity.this, "response"+response, Toast.LENGTH_LONG).show();
name.setText("");
email.setText("");
password.setText("");
}
@Override
public void onFailure(Call<Student> call, Throwable t) {Log.i("Hello",""+t);
Toast.makeText(MainActivity.this, "Throwable"+t, Toast.LENGTH_LONG).show();
}});
}
});
}
}
Класс обслуживания API:
public interface ApiService {
@FormUrlEncoded
@POST("/test/index.php")
Call<Student> insertData(@Field("name") String name, @Field("email") String email , @Field("password") String password);
}
Студенческий класс ::
public class Student {
String name, email, password;public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
и серверный скрипт PHP.
$username = $_POST['name'];
$useremail = $_POST['email'];
$userpassword = $_POST['password'];
$user = "root";
$pass = "admin@00100";
$host= "localhost";
$dbname="test";
$con = mysqli_connect($host,$user,$pass,$dbname);
$sql="insert into userdata(name,email,password) values('".$username."','".$useremail."','".$userpassword."');";
if(mysqli_query($con,$sql)){
echo "data inserted";
}else{
echo "Failed";
}
?>
Другие решения, которые я нашел, не работают для решения проблемы. Где я могу пойти не так?
Проблема на самом деле после вставки вы получаете ответ как String
но вы назначаете его Class Student
Так замени
Call<Student> insertData(@Field("name") String name, @Field("email") String email , @Field("password") String password);
с
Call<String> insertData(@Field("name") String name, @Field("email") String email , @Field("password") String password);
Других решений пока нет …