0

我在保存數據時遇到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()); 
       } 

      } 
     }); 
+0

加你在哪裏叫它 –

+0

我已經更新了我的問題 –

回答

0

你需要指定你想要一個GSON轉換器版本號2.0.0是這樣的:

Retrofit retrofit = new Retrofit.Builder() 
    .baseUrl(URL) 
    .addConverterFactory(GsonConverterFactory.create()) 
    .build(); 
相關問題