Android 4.x版本中的Retrofit 2

时间:2019-01-02 07:20:01

标签: android retrofit2

我们正在使用Retrofit 2,并在Android 4.x版本中的“异常”下面处理此问题,并在其他Android版本中正常工作。在下面添加了代码

Caused by java.lang.NoClassDefFoundError: javax/annotation/Nullable
   at java.lang.reflect.Field.getAnnotation(Field.java)
   at java.lang.reflect.Field.getAnnotation(Field.java:212)
   at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldNames(ReflectiveTypeAdapterFactory.java:72)
   at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:159)
   at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:100)
   at com.google.gson.Gson.getAdapter(Gson.java:423)
   at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:115)
   at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:164)
   at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:100)
   at com.google.gson.Gson.getAdapter(Gson.java:423)
   at retrofit2.converter.gson.GsonConverterFactory.requestBodyConverter(GsonConverterFactory.java:71)
   at retrofit2.Retrofit.nextRequestBodyConverter(Retrofit.java:282)
   at retrofit2.Retrofit.requestBodyConverter(Retrofit.java:262)
   at retrofit2.ServiceMethod$Builder.parseParameterAnnotation(ServiceMethod.java:710)
   at retrofit2.ServiceMethod$Builder.parseParameter(ServiceMethod.java:336)
   at retrofit2.ServiceMethod$Builder.build(ServiceMethod.java:204)
   at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:170)
   at retrofit2.Retrofit$1.invoke(Retrofit.java:147)
   at $Proxy1.getMagGold(Unknown Source)
   at com.amazon.DynamoDBOne.getMagGold(DynamoDBOne.java:82)
   at com.task.SyncUserDatas.getUserGoldData(SyncUserDatas.java:330)
   at com.task.SyncUserDatas.doInBackground(SyncUserDatas.java:292)
   at com.task.SyncUserDatas.doInBackground(SyncUserDatas.java:57)
   at android.os.AsyncTask$2.call(AsyncTask.java:287)
   at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
   at java.util.concurrent.FutureTask.run(FutureTask.java:137)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
   at java.lang.Thread.run(Thread.java:856)

下面是代码

public interface ApiServices{
@POST("getGold")
Call<GetMagGoldResponse> getMagGold(@Header("Authorization") String Authorization, @Body UserId userId);
}
Retrofit retrofit = new Retrofit.Builder()
            .addConverterFactory(GsonConverterFactory.create())
            .baseUrl(<URL>)
            .client(getLogClient())
            .build();
ApiServices service = retrofit.create(ApiServices.class);

service.getMagGold(token, userId).execute().body();

1 个答案:

答案 0 :(得分:1)

将此行放入gradle.build中,您就很好了。



    package com.minlu.basedao;

    import java.io.IOException;
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    import java.util.Properties;

    public class BaseDao {
        private static String USER = "minlu_****"; 

        private static String PASSWORD = "*******3aFCDi";//自己创建数据库所设置的密码 

        private String MYSQL_URL="jdbc:mysql://47.244.***.***:**/minlu_****"; 

        private static Connection conn = null; 

        PreparedStatement pre = null;// 预编译对象 

        public Connection getConn() { 
            return conn; 
        } 

        public static void setConn(Connection conn) { 
            BaseDao.conn = conn; 
        } 

        public BaseDao() 
        { 

            try { 
                Class.forName("com.mysql.jdbc.Driver");//加载驱动 
                System.out.println("加载驱动成功");
            } catch (ClassNotFoundException e) { 
                // TODO Auto-generated catch block 
                System.out.println("找不到驱动程序类 ,加载驱动失败!"); 
            }

            try { 
                conn = DriverManager.getConnection(MYSQL_URL, USER, PASSWORD);//创建数据库链接对象 
                System.out.println("数据库链接成功2");
            } catch (SQLException es) { 
                // TODO Auto-generated catch block 
                System.out.println("数据库连接失败!!!"+es.getMessage()); 
            } 
        } 
    }