Android 改装和GSON-获取数据需要10秒
我正在学习如何使用GSON对库进行改装,以便使我未来的应用程序更加稳定。然而,我期待着“奇怪的错误”。 我正在从中获取位置(用于测试目的) 这是我的密码 main活动Android 改装和GSON-获取数据需要10秒,android,json,rest,gson,retrofit,Android,Json,Rest,Gson,Retrofit,我正在学习如何使用GSON对库进行改装,以便使我未来的应用程序更加稳定。然而,我期待着“奇怪的错误”。 我正在从中获取位置(用于测试目的) 这是我的密码 main活动 public class MainActivity extends AppCompatActivity { private SOService mService; private long currentTime; //start time private long finishedTime; //end
public class MainActivity extends AppCompatActivity {
private SOService mService;
private long currentTime; //start time
private long finishedTime; //end time
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mService = ApiUtils.getClient();
currentTime = System.currentTimeMillis();
mService.getLocations().enqueue(new Callback<List<LocationsList>>() {
@Override
public void onResponse(Call<List<LocationsList>> call, Response<List<LocationsList>> response) {
if(response.isSuccessful()){
Log.d("TAG", response.body().toString());
finishedTime = System.currentTimeMillis();
Log.d("TAG", "It took " + TimeUnit.MILLISECONDS.toSeconds(finishedTime - currentTime) + " seconds to complete");
}
else{
Log.d("TAG","Code"+response.code());
}
}
@Override
public void onFailure(Call<List<LocationsList>> call, Throwable t) {
Log.d("TAG",t.getMessage());
}
});
}
}
更新客户端
public class RetrofitClient {
private static Retrofit client;
public static Retrofit getClient(String baseUrl){
if(client == null){
client = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return client;
}
}
SOService
public interface SOService {
@GET("/api/location/search/?query=san")
Call<List<LocationsList>> getLocations();
}
公共接口服务{
@获取(“/api/location/search/?query=san”)
调用getLocations();
}
我已经删除了用于更干净代码的包和导入。位置列表是POJO。执行代码时,我收到以下消息:
09-25 16:23:12.913 10994-10994/pw.davor.www.reformation D/TAG:[地点列表{title='San Francisco'
09-25 16:23:12.913 10994-10994/pw.davor.www.reformation D/TAG:完成这项工作花了10秒钟
但是,当我在Postman中执行GET请求时,大约需要100-300毫秒。每次调用都要构建一个新的客户端?也许可以将其创建为单例并重用它。(我想这可能是一个答案,但我猜,在不知道代码花费时间的情况下。您可能需要添加一些基准测试代码来找到热点。但它可能不是实际的REST调用/响应。)此外,Gson不是您可以获得的最快JSONTObject转换(使用反射重).你自己试过解析Json吗?(仅供参考,我使用了巨大的Gson对象和巨大的改装响应,它从来不会花费接近10秒的时间。我的意思是,这个列表有多大?@jdv-Nope,它是一个具有稍微不同的制作方法的单例。这个测试项目是“由书籍构建的”,代码来自他们的github页面。列表相当小,大约15个对象,每个对象有4个成员。@Rafael T我没有。我使用gson已经有几个月了,我从来没有遇到过这样的问题。你每次调用都在构建一个新的客户机?也许可以将它创建为一个单例并重用它。(我想这可能是一个答案,但我猜,在不知道代码花费时间的情况下。您可能需要添加一些基准测试代码来找到热点。但它可能不是实际的REST调用/响应。)此外,Gson不是您可以获得的最快JSONTObject转换(使用反射重).你自己试过解析Json吗?(仅供参考,我使用了巨大的Gson对象和巨大的改装响应,它从来不会花费接近10秒的时间。我的意思是,这个列表有多大?@jdv-Nope,它是一个具有稍微不同的制作方法的单例。这个测试项目是“由书籍构建的”,代码来自他们的github页面。列表相当小,大约15个对象,每个对象有4个成员。@Rafael T我没有。我使用gson已经几个月了,我从来没有遇到过这样的问题
public interface SOService {
@GET("/api/location/search/?query=san")
Call<List<LocationsList>> getLocations();
}