小编Mur*_*gat的帖子

从OKHttp拦截器返回错误(使用改造)

我正在使用OkHttp和Retrofit来制作我的应用程序的网络请求.我还使用拦截器进行身份验证,并在必要时重试请求.

服务器有时会出现临时问题,并返回空体,尽管响应状态为200 OK.这会导致我的应用程序崩溃,因为调用了Retrofit Callback的成功块,返回(并使用GSON解析)的自定义对象为null,成功回调中的代码假定返回一个对象.

我已经向服务器团队报告了这个问题,但我也想修复它,而不必使用null检查将所有成功回调代码包装在应用程序上.

Currenty我倾向于两个选项,虽然任何其他想法都是最受欢迎的:1)不从拦截器返回(这甚至可能吗?)并且只显示一个错误对话框2)返回一些会使Retrofit调用失败的部分打回来.

我的代码如下.正如您所看到的,当收到空体时,我会重试该请求最多3次.

@Override
public Response intercept(Chain chain) throws IOException
{
    // First
    Request request = chain.request();
    Response response = chain.proceed(request);

    ....
    ....
    ....

    // Retry empty body response requests for a maximum of 3 times
    Integer retryMaxCount = 3;
    MediaType contentType = response.body().contentType();
    String bodyString = response.body().string();

    while (bodyString.length() == 0 && retryMaxCount > 0)
    {
        //Empty body received!, Retrying...

        retryMaxCount--;
        response = chain.proceed(request);
        bodyString = response.body().string();
    }

    if (bodyString.length() != 0)
    {
        // Create …
Run Code Online (Sandbox Code Playgroud)

java android interceptor retrofit okhttp

11
推荐指数
1
解决办法
9294
查看次数

从编译中禁用XCode项目中的某些文件

我通过复制现有文件夹在XCode中启动了一个新项目,因为我的新应用程序将与旧版本具有许多共同功能.

问题是新应用程序不会使用我在旧应用程序中使用的框架.当我删除框架时,包括该框架在内的所有文件都会引发错误.

基本上我想在许多文件上禁用所有语法检查,依赖性检查等.我希望XCode忽略这些文件,尽管它们在项目树中.稍后当我修改它们时,我将再次手动启用它们.通过这种方式,我可以编译和测试我的小错误更改,而不会修复它在"未修改"文件中导致的所有错误,无论如何我将在未来修复.

我可以从项目树中删除它们,然后在我的工作完成后逐个添加它们,但我不想这样做,因为我的项目树可能搞砸了,应该有另一种方法来实现这一点.

我尝试从所有目标成员身份中删除这些文件,但它没有帮助.

提前致谢.

xcode ios

10
推荐指数
3
解决办法
1万
查看次数

如何检测用户使用的iOS设备?

我正在寻找一种方法来检测我的应用程序正在运行的设备.我对软件版本不感兴趣.我搜索了很多问题但是没有一个(令人惊讶地)满足了我的需求,原因如下:

解决方案1:

NSString *deviceType = [UIDevice currentDevice].model;
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为它只给我"iPad".我想知道它是iPad,iPad 2,新iPad,iPhone 3GS,iPhone4等.

解决方案2:不测试设备类型,检查各个功能

这不适用,因为我希望此数据收集用户统计信息,而不是执行任何特定于设备的操作.

解决方案3:使用此处的 UIDeviceHardware

此代码看起来很过时,似乎访问设备上的私有数据.甚至有人争论使用此应用的应用是否会获得批准.更重要的是,我不知道它是如何工作的:) 这里也有另一种选择

我提到的最后两个中的任何一个都可以安全使用吗?他们未来是否合规?他们是否遵守Apple批准规则?

或者还有其他方法来解决这个问题吗?

提前致谢.

iphone objective-c device uidevice ipad

7
推荐指数
1
解决办法
756
查看次数

谷歌AdMob GADBannerView第一个请求需要很长时间并冻结UI

我在我的应用中使用了Google AdMob SDK(最近刚下载的最新版本).

当我的应用启动时,它会冻结4-5秒,直到加载并显示广告.之后它运行顺利.当我注释掉横幅请求行时,应用程序正常启动.

我已经制作了一个自定义助手类,其中我有以下代码.

- (void) getGoogleBanner:(UIViewController *) targetController
{
    self.googleBannerView.rootViewController = targetController;
    [self.googleBannerView.rootViewController.view addSubview:self.googleBannerView];
    [self.googleBannerView setDelegate:self];
    GADRequest* request = [GADRequest request];
    [self.googleBannerView loadRequest:request];
}
Run Code Online (Sandbox Code Playgroud)

哪里

  • googleBannerView是我的类的属性,并且具有GADBannerView类型
  • 我事先正确设置了框架尺寸和广告单元ID
  • targetController是我想要添加横幅的控制器
  • 我在各种不同控制器的viewDidAppear中调用[CustomClass getGoogleBanner:self]方法并成功显示横幅,但首次加载问题除外.

我想知道是否有人遇到过这个问题,以及它是如何解决的.我愿意接受任何可以消除冻结问题的想法.我试图将代码运行到后台线程,但我失败了因为我对它不是很有经验.

非常感谢任何帮助,提前谢谢.

banner admob ios

7
推荐指数
1
解决办法
1765
查看次数

标签 统计

ios ×2

admob ×1

android ×1

banner ×1

device ×1

interceptor ×1

ipad ×1

iphone ×1

java ×1

objective-c ×1

okhttp ×1

retrofit ×1

uidevice ×1

xcode ×1