Retrofit 2.0 - 无法为接口调用no-args构造函数

时间:2017-10-30 22:29:46

标签: android retrofit retrofit2

我正在创建一个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();
        }
    });

}

1 个答案:

答案 0 :(得分:0)

这是因为preferredDuringSchedulingIgnoredDuringExecution是一个接口,因此,当您收到响应时,javax.xml.transform.Result反序列化器会尝试将响应转换为无法创建的接口。

要解决此问题,您可以传递Gson

的实现

顺便说一下,我很确定您使用了javax.xml.transform.Result的错误导入。