我在保存數據時遇到ActiveAndroid問題。引起:java.lang.SecurityException:無法使字段構造函數可訪問
import com.activeandroid.Model;
import com.activeandroid.annotation.Column;
import com.activeandroid.annotation.Table;
import com.google.gson.annotations.SerializedName;
@Table(name = "login_response")
public class LoginResponse extends Model{
@Column(name = "a_token")
@SerializedName("access_token")
public String mAccessToken;
@Column(name = "expiry_time")
@SerializedName("expires_in")
public Long mExpiresIn;
@Column(name = "refresh_token")
@SerializedName("refresh_token")
public String mRefreshToken;
@Column(name = "scope")
@SerializedName("scope")
public String mScope;
@Column(name = "token_type")
@SerializedName("token_type")
public String mTokenType;
public LoginResponse(){}
public String getAccessToken() {
return mAccessToken;
}
public void setAccessToken(String accessToken) {
mAccessToken = accessToken;
}
public Long getExpiresIn() {
return mExpiresIn;
}
public void setExpiresIn(Long expiresIn) {
mExpiresIn = expiresIn;
}
public String getRefreshToken() {
return mRefreshToken;
}
public void setRefreshToken(String refreshToken) {
mRefreshToken = refreshToken;
}
public String getScope() {
return mScope;
}
public void setScope(String scope) {
mScope = scope;
}
public String getTokenType() {
return mTokenType;
}
public void setTokenType(String tokenType) {
mTokenType = tokenType;
}
}
以上是在從web api獲取數據時使用翻新獲得的響應的映射類。 但我得到了這樣的錯誤。
致命異常:主 工藝:com.bidhee.onlinepayment,PID:3826 java.lang.IllegalArgumentException異常:無法爲 類com.bidhee.onlinepayment.model.login.LoginResponse 爲方法創建轉換器LoginApi.getResponse 在retrofit2.ServiceMethod $ Builder.methodError(ServiceMethod.java:695) 在retrofit2.ServiceMethod $ Builder.createResponseConverter(ServiceMethod.java:681) 在retrofit2.ServiceMethod $ Builder.build(ServiceMethod.java:166 )012ofat retrofit2.Retrofit.loadServiceM在$ proxy2.getResponse(Unknown Source)處的java.lang.reflect.Proxy.invoke(Proxy.java:393) 中修改$ 1.invoke(Retrofit.java:145) 。 ) 在com.bidhee.onlinepayment.ui.viewpresenter.login.LoginPresenterImpl.attemptLogin(LoginPresenterImpl.java:39) 在com.bidhee.onlinepayment.ui.viewpresenter.login.LoginRegisterActivity.onBtnSignInClicked(LoginRegisterActivity.java:93) 在android上,在butterknife.internal.DebouncingOnClickListener.onClick(DebouncingOnClickListener.java:22) 處使用com.bidhee.onlinepayment.ui.viewpresenter.login.LoginRegisterActivity $$ ViewBinder $ 1.doClick(LoginRegisterActivity $$ ViewBinder.java:23) 。 view.View.performClick(View.java:5198) at android.view.View $ PerformClick.run(View.java:21147) at android.os.Handler.handleCallback(Handler.java:739) at android。 os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang。 reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616 ) 引起:java.lang.SecurityException:無法使字段構造函數可訪問 at com.google.gson.internal.ConstructorConstructor.newDefaultConstructor(ConstructorConstructor.java:101) com.google.gson.internal.ConstructorConstructor。java.lang.reflect.Constructor.setAccessible(Constructor.java:334) 得到(ConstructorConstructor.java:83) 在com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:95) 在com.google.gson.Gson.getAdapter(Gson.java:416) 在com.google.gson.internal.bind.MapTypeAdapterFactory.getKeyAdapter(MapTypeAdapterFactory.java:140) 在com.google.gson.internal.bind.MapTypeAdapterFactory.create(MapTypeAdapterFactory.java:125) 在com.google.gson。 Gson.getAdapter(G (ReflectiveTypeAdapterFactory.java:105))。 at com.google.gson。internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:104) 在com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:160) 在com.google.gson.internal.bind.ReflectiveTypeAdapterFactory。通過com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldAdapter(ReflectiveTypeAdapterFactory.java:135) 在com.google.gson.Gson.getAdapter(Gson.java:416) 創建(ReflectiveTypeAdapterFactory.java:96) com.google.gson.internal.bind.ReflectiveTypeAdapterFactory在com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:104)$ 1(ReflectiveTypeAdapterFactory.java:105) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:160) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:96) at com.google。 gson.Gson.getAdapter(Gson.java:416) 在retrofit2.converter.gson.GsonConverterFactory.responseBodyConverter(GsonConverterFactory.java:63) 在retrofit2.Retrofit.nextResponseBodyConverter(Retrofit.java:325) 在retrofit2.Retrofit。 responseBodyConverter(Retrofit.java:308) 在retrofit2.ServiceMethod $ Builder.createResponseConverter(ServiceMethod.java:679) 在retrofit2.ServiceMethod $ Builder.build(ServiceMethod.java:166)(Retrofit.java:166) at retrofit2.Retrofit $ 1.invoke(Retrofit.java:145) at java.lang.reflect.Proxy.invoke(Proxy.java:393) at $在com.bidhee.onlinepayment.ui.viewpresenter.login.LoginPresenterImpl.attemptLogin(LoginPresenterImpl.java:39) at com.bidhee.onlinepayment.ui.viewpresenter.login.LoginRegisterActivity.onBtnSignInClicked(LoginRegisterActivity .java:93) at com.bidhee.onlinepayment.ui.viewpresenter.login.LoginRegisterActivity $$ ViewBinder $ 1.doClick(LoginRegisterActivity $$ ViewBinder.java:23) at butterknife.internal.DebouncingOnClickListener.onClick(Deb ouncingOnClickListener.java:22) at android.view.View.performClick(View.java:5198) at android.view.View $ PerformClick.run(View.java:21147) at android.os.Handler.handleCallback( Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread。 java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os .ZygoteInit.main(ZygoteInit.java:616)
有人ActiveAndroid前工作正常,但是當我試圖使用Android活躍,我得到了上述錯誤。 我可以相同的手動創建不同類的對象,並保存它,但同時使用retrofit和活動android我不能。
我使用改裝與依賴
編譯 'com.squareup.retrofit2:改造:2.0.2'
編譯「com.squareup.retrofit2:變流器GSON:2.0。2'
這是我如何建設改造客戶
okhttpClientBuilder = new OkHttpClient.Builder();
retrofitBuilder = new Retrofit.Builder();
client = okhttpClientBuilder
.addInterceptor(new ApiInterceptor())
.build();
retrofit = retrofitBuilder
.baseUrl(BuildConfig.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(client)
.build();
我調用API的方式是
Retrofit retrofit = OnlinePaymentApplication.getRetrofit();
APIs.LoginApi api = retrofit.create(APIs.LoginApi.class);
Call<LoginResponse> call = api.getResponse(grantType, clientId, clientSecret, userName, userPassword);
call.enqueue(new Callback<LoginResponse>() {
@Override
public void onResponse(Call<LoginResponse> call, Response<LoginResponse> response) {
loginView.hideProgress();
if (response.isSuccessful()) {
loginView.onLoginDataReceived(response.body());
} else {
ErrorResponse error = ErrorUtils.parseError(response);
loginView.onErrorMessageReceived(error.getMessage());
}
}
@Override
public void onFailure(Call<LoginResponse> call, Throwable t) {
loginView.hideProgress();
if (t instanceof IOException) {
loginView.onErrorMessageReceived(MetaData.NETWORK_ERROR);
} else {
loginView.onErrorMessageReceived(t.getLocalizedMessage());
}
}
});
加你在哪裏叫它 –
我已經更新了我的問題 –