Android 为什么改型从asp web服务获取数据太慢
我已经编写了一个android应用程序,但它从服务器获取数据的速度太慢 我使用rxjava和改进来获取数据,web服务是由asp.net编写的 请告诉我该怎么办 我已经和邮递员检查过网络服务,它们很好而且很快 请检查我的代码并告诉我有什么问题 这是我的密码: 片段:Android 为什么改型从asp web服务获取数据太慢,android,retrofit,rx-java,mvp,android-mvp,Android,Retrofit,Rx Java,Mvp,Android Mvp,我已经编写了一个android应用程序,但它从服务器获取数据的速度太慢 我使用rxjava和改进来获取数据,web服务是由asp.net编写的 请告诉我该怎么办 我已经和邮递员检查过网络服务,它们很好而且很快 请检查我的代码并告诉我有什么问题 这是我的密码: 片段: public class HomeFragment extends BaseFragment implements HomeContract.View { private HomeContract.Presenter pr
public class HomeFragment extends BaseFragment implements HomeContract.View {
private HomeContract.Presenter presenter;
private SliderView slider;
private TextView txt_homeFragment_showAllNew,
txt_homeFragment_showAllTopSelling,
txt_homeFragment_showAllHits;
private RecyclerView rv_homeFragment_newProduct,
rv_homeFragment_topSelling,
rv_homeFragment_hits,
rv_homeFragment_specialOffer;
private Button btn_homeFragment_showAllSpecial;
private HomeRecyclerAdapter adapter;
private Fragment fragment;
private FragmentTransaction transaction;
private Bundle bundle;
@SuppressLint("StaticFieldLeak")
private Dialog myDialog;
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
String pls = getResources().getString(R.string.please_wait);
String loading = getResources().getString(R.string.loading);
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
presenter = new HomePresenter(new TCommerceRepository(),getViewContext());
if(MainFragment.checkInternet) {
presenter.getNewProduct();
presenter.getHitsProduct();
presenter.getSlider();
}
}
@Override
public int getLayout() {
return R.layout.fragment_home;
}
@Override
public void setupViews() {
myDialog = new Dialog(getContext());
myDialog.setContentView(R.layout.dialog_alert);
TextView txtTitle = myDialog.findViewById(R.id.txt_alertDialog_title);
TextView txtMessage = myDialog.findViewById(R.id.txt_alertDialog_message);
String pls = getResources().getString(R.string.please_wait);
String loading = getResources().getString(R.string.loading);
txtTitle.setText(loading);
txtMessage.setText(pls);
myDialog.getWindow().setLayout(1000,500);
slider = rootView.findViewById(R.id.slider_homeFragment_slideShow);
txt_homeFragment_showAllNew = rootView.findViewById(R.id.txt_homeFragment_showAllNew);
txt_homeFragment_showAllTopSelling = rootView.findViewById(R.id.txt_homeFragment_showAllTopSelling);
txt_homeFragment_showAllHits = rootView.findViewById(R.id.txt_homeFragment_showAllHits);
rv_homeFragment_newProduct = rootView.findViewById(R.id.rv_homeFragment_newProduct);
rv_homeFragment_topSelling = rootView.findViewById(R.id.rv_homeFragment_topSelling);
rv_homeFragment_hits = rootView.findViewById(R.id.rv_homeFragment_hits);
rv_homeFragment_specialOffer = rootView.findViewById(R.id.rv_homeFragment_specialOffer);
btn_homeFragment_showAllSpecial = rootView.findViewById(R.id.btn_homeFragment_showAllSpecial);
txt_homeFragment_showAllNew.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bundle = new Bundle();
bundle.putInt("flag",1);
fragment = new StockListFragment();
fragment.setArguments(bundle);
transaction = Objects.requireNonNull(getActivity()).getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.frm_mainFragment_mainLayout, fragment);
transaction.commit();
}
});
txt_homeFragment_showAllTopSelling.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bundle = new Bundle();
bundle.putInt("flag",2);
fragment = new StockListFragment();
fragment.setArguments(bundle);
transaction = Objects.requireNonNull(getActivity()).getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.frm_mainFragment_mainLayout, fragment);
transaction.commit();
}
});
txt_homeFragment_showAllHits.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bundle = new Bundle();
bundle.putInt("flag",3);
fragment = new StockListFragment();
fragment.setArguments(bundle);
transaction = Objects.requireNonNull(getActivity()).getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.frm_mainFragment_mainLayout, fragment);
transaction.commit();
}
});
}
@Override
public Context getViewContext() {
return getContext();
}
@Override
public void showMessage(String msg) {
Log.i("LOG::::" , msg);
}
@Override
public void onStart() {
super.onStart();
presenter.attachView(this);
}
@Override
public void onStop() {
super.onStop();
presenter.detachView();
}
@Override
public void showNewProduct(StockListModel list) {
adapter = new HomeRecyclerAdapter(getViewContext() , list);
rv_homeFragment_newProduct.setLayoutManager(new LinearLayoutManager(getViewContext() , RecyclerView.HORIZONTAL , false));
rv_homeFragment_newProduct.setAdapter(adapter);
}
@Override
public void showTopSellProduct(StockListModel list) {
adapter = new HomeRecyclerAdapter(getViewContext() , list);
rv_homeFragment_topSelling.setLayoutManager(new LinearLayoutManager(getViewContext() , RecyclerView.HORIZONTAL , false));
rv_homeFragment_topSelling.setAdapter(adapter);
}
@Override
public void showHitsProduct(StockListModel list) {
adapter = new HomeRecyclerAdapter(getViewContext() , list);
rv_homeFragment_hits.setLayoutManager(new LinearLayoutManager(getViewContext() , RecyclerView.HORIZONTAL , false));
rv_homeFragment_hits.setAdapter(adapter);
if (myDialog.isShowing()){
myDialog.dismiss();
}
}
@Override
public void showSlider(ItemImageSlider itemImageSlider) {
if ((myDialog.isShowing())){
myDialog.dismiss();
} else {
myDialog.show();
}
TimerTask task = slider.getTimerTask();
Timer timer = new Timer();
timer.schedule(task,5000,2000);
ArrayList<String> urls = new ArrayList<>();
for (int i = 0; i < itemImageSlider.getItems().size(); i++) {
urls.add(itemImageSlider.getItems().get(i).getIcon());
}
slider.setUrls(urls);
}
}
我应该如何使用拦截器?
我应该更改什么?一个如何使用的示例(不是答案-只是为了调试)
并将其添加到客户端
.addNetworkInterceptor(新的LoginInterceptor())
为什么不使用拦截器来查看响应时间和其他信息?我已经使用了拦截器。如何查看响应时间和其他信息?是否存在应用程序问题或服务器问题?:2020-08-16 17:24:48.153 15571-15654/com.intechdev.tcommerce D/Inter:in 24216.3ms缓存控制:无缓存Pragma:no Cache,no Cache Content Type:application/json;charset=utf-8内容编码:gzip过期:-1服务器:Microsoft IIS/8.5 X-AspNet-Version:4.0.30319 Set Cookie:ASP.NET_SessionId=yy2xlvydmh4dyramwv1z053f;路径=/;HttpOnly;SameSite=Lax Access Control Allow Origin:*请删除上面注释中的api,如果它很重要的话,现在对于查询来说,响应输出是非常大的json,但不应该像上面提到的那样需要24216.3ms。在Windows的Postman客户端应用程序中测试api。我已经在Postman中测试过了。但是响应是如此之快。当用不同的设备或模拟器进行测试时,你是否得到了相同的结果,在不同的设备上也是一样的
public class HomePresenter implements HomeContract.Presenter {
private HomeContract.View view;
private TCommerceDataSource tCommerceDataSource;
private CompositeDisposable compositeDisposable = new CompositeDisposable();
private Context context;
HomePresenter (TCommerceDataSource tCommerceDataSource,Context context){
this.tCommerceDataSource = tCommerceDataSource;
this.context = context;
}
@Override
public void attachView(HomeContract.View view) {
this.view = view;
}
@Override
public void detachView() {
this.view = null;
if (compositeDisposable != null){
compositeDisposable.clear();
}
}
@Override
public void getNewProduct() {
tCommerceDataSource.getListStockNew().subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new SingleObserver<StockListModel>() {
@Override
public void onSubscribe(Disposable d) {
compositeDisposable.add(d);
}
@Override
public void onSuccess(StockListModel productList) {
view.showNewProduct(productList);
view.showTopSellProduct(productList);
}
@Override
public void onError(Throwable e) {
view.showMessage(e.toString());
}
});
}
@Override
public void getHitsProduct() {
tCommerceDataSource.getListStockBestView().subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new SingleObserver<StockListModel>() {
@Override
public void onSubscribe(Disposable d) {
compositeDisposable.add(d);
}
@Override
public void onSuccess(StockListModel stockListModel) {
view.showHitsProduct(stockListModel);
}
@Override
public void onError(Throwable e) {
view.showMessage(e.toString());
}
});
}
@Override
public void getSlider() {
tCommerceDataSource.getSlideImage().subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new SingleObserver<ItemImageSlider>() {
@Override
public void onSubscribe(Disposable d) {
compositeDisposable.add(d);
}
@Override
public void onSuccess(ItemImageSlider itemImageSlider) {
view.showSlider(itemImageSlider);
}
@Override
public void onError(Throwable e) {
view.showMessage(e.toString());
}
});
}
}
OkHttpClient httpClient = new OkHttpClient.Builder()
.connectTimeout(6 , TimeUnit.MINUTES)
.readTimeout(6 , TimeUnit.MINUTES)
.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request()
.newBuilder()
.build();
return chain.proceed(request);
}
}).build();
return httpClient;
public class LoginInterceptor extends Interceptor {
private static final String TAG = LoginInterceptor.class.getSimpleName() + " : ";
@Override
public Response intercept(Interceptor.Chain chain) throws IOException {
Request request = chain.request();
long t1 = System.nanoTime();
Log.i(TAG, String.format("Sending request %s on %s%n%s",
request.url(), chain.connection(), request.headers()));
Response response = chain.proceed(request);
long t2 = System.nanoTime();
Log.d(TAG, String.format("Received response for %s in %.1fms%n%s",
response.request().url(), (t2 - t1) / 1e6d, response.headers()));
return response;
}