我正在创建一个Android应用程序,可以使用Retrofit2将数据上传到数据库。当我提交数据时,它会转到数据库,但是一个错误总是说无法为接口调用no-args构造函数。我尝试寻找不同的解决方案,但似乎不起作用。
这是我的API类:
import javax.xml.transform.Result;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;
public interface RegisterAPI {
@FormUrlEncoded
@POST("insertText.php")
retrofit2.Call<Result> createUser(
@Field("name") String name,
@Field("age") String age);
}
这是我的InsertActivity类:
public static final String ROOT_URL= "https://MYURL/";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_insert);
editTextName = (EditText) findViewById(R.id.editTextName);
editTextAge = (EditText) findViewById(R.id.editTextAge);
buttonRegister = (Button) findViewById(R.id.buttonRegister);
buttonRegister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
insertUser();
}
});
}
public void insertUser(){
String name = editTextName.getText().toString().trim();
String age = editTextAge.getText().toString().trim();
Gson gson = new GsonBuilder()
.setLenient()
.create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(ROOT_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
RegisterAPI service = retrofit.create(RegisterAPI.class);
Call<Result> call = service.createUser(
name,
age
);
call.enqueue(new Callback<Result>() {
@Override
public void onResponse(Call<Result> call, Response<Result> response) {
Toast.makeText(getApplicationContext(), "SUCCESS", Toast.LENGTH_LONG).show();
}
@Override
public void onFailure(Call<Result> call, Throwable t) {
Toast.makeText(getApplicationContext(), t.getMessage(), Toast.LENGTH_LONG).show();
}
});
}
答案 0 :(得分:0)
这是因为preferredDuringSchedulingIgnoredDuringExecution
是一个接口,因此,当您收到响应时,javax.xml.transform.Result
反序列化器会尝试将响应转换为无法创建的接口。
要解决此问题,您可以传递Gson
。
顺便说一下,我很确定您使用了javax.xml.transform.Result
的错误导入。