小编Jag*_*uar的帖子

如何使用Retrofit-Android记录请求和响应正文?

我在Retrofit API中找不到用于记录完整请求/响应主体的相关方法.我期待在Profiler中提供一些帮助(但它只提供有关响应的元数据).我尝试在Builder中设置日志级别,但这对我没有帮助:

RestAdapter adapter = (new RestAdapter.Builder()).
                setEndpoint(baseUrl).
                setRequestInterceptor(interceptor).
                setProfiler(profiler).
                setClient(client).
                setExecutors(MyApplication.getWebServiceThreadPool()).
                setLogLevel(LogLevel.FULL).
                setLog(new RestAdapter.Log() {
                    @Override
                    public void log(String msg) {
                        Log.i(TAG, msg);
                    }
                }).
                build();
Run Code Online (Sandbox Code Playgroud)

编辑:此代码现在正在运行.我不知道它为什么不提前工作.可能是因为我正在使用一些旧版本的改造.

logging android retrofit retrofit2

117
推荐指数
5
解决办法
10万
查看次数

java中的静态分配 - 堆,堆栈和永久生成

我最近一直在阅读java中的内存分配方案,并且由于我从各种来源阅读,因此有很多疑问.我已经收集了我的概念,并且我会要求完成所有要点并对它们进行评论.我开始知道内存分配是特定于JVM的,所以我必须事先说,我的问题是Sun特定的.

  1. 类(由类加载器加载)进入堆上的特殊区域:永久生成
  2. 与类名称,与类关联的对象数组,JVM使用的内部对象(如java/lang/Object)和优化信息等类相关的所有信息都会进入永久生成区域.
  3. 所有静态成员变量再次保留在"永久生成"区域中.
  4. 物体在不同的堆上:年轻一代
  5. 每个类只有一个方法的副本,无论是静态还是非静态方法.该副本放在永久生成区域.对于非静态方法,所有参数和局部变量都进入堆栈 - 只要对该方法进行具体调用,我们就会得到一个与之关联的新堆栈帧.我不确定静态方法的局部变量存储在哪里.他们是永久世代的堆吗?或者只是他们的引用存储在Permanent Generation区域,而实际的副本是在其他地方(Where?)
  6. 我也不确定方法的返回类型存储在何处.
  7. 如果对象(在年轻代中)需要使用静态成员(在永久生成中),则为它们提供对静态成员的引用&&它们被给予足够的存储空间来存储方法的返回类型等.

谢谢你经历这个!

java static memory-management permanent-generation

110
推荐指数
1
解决办法
6万
查看次数

如何使用OkHttp/Retrofit重试HTTP请求?

我在我的Android项目中使用Retrofit/OkHttp(1.6).

我没有找到内置于其中任何一个的任何请求重试机制.在搜索更多时,我看到OkHttp似乎有沉默重试.我没有看到我的任何连接(HTTP或HTTPS)发生这种情况.如何使用okclient配置重试?

现在,我正在捕获异常并重试维护计数器变量.

android retrofit okhttp

59
推荐指数
4
解决办法
6万
查看次数

FrameLayout与RelativeLayout进行叠加

我需要为我的应用程序实现一个覆盖(半透明)屏幕,类似于Showcase View

我的猜测是FrameLayout用于这个用例,因为它用于将项目堆叠在一起.但我很惊讶地发现上面的库使用了RelativeLayout.

我的问题是什么时候使用FrameLayout,如果不是这样的话?如果我走的FrameLayout路有什么缺点?

android android-relativelayout android-framelayout

58
推荐指数
1
解决办法
4万
查看次数

会话管理:如何为REST服务生成身份验证令牌?(新泽西州)

我正在尝试在我的REST服务中实现会话管理.我在冲浪时了解了这些指南:

  1. 不使用服务器端会话 - 它违反了RESTful原则.

  2. 使用HTTP基本身份验证 - 现在不可能,因为我被要求不使用SSL/TLS(毫无疑问需要Basic身份验证.)

  3. 使用Http摘要 - 我听说这会增加网络流量.这听起来很昂贵,尤其是当我的客户端是移动设备时.

  4. 使用cookies - 我被告知我不应该依赖cookie来保护我的重要资源,它们可以很容易地被欺骗.另外,我通过cookie了解了跨站点脚本攻击.

  5. 我留下了生成身份验证令牌的选项,用户每次都必须发送 - 我承认这不是"完全"RESTful.

现在我需要知道,我应该如何生成这些唯一的身份验证令牌,这些令牌在业务级别上足够安全?泽西岛有一些图书馆吗?我应该去OAuth.我刚刚读了一些关于它们的内容,它们对我来说有用吗?请记住,我的目标客户端是移动设备 - 他们可以访问OAuth服务吗?

security rest session oauth jersey

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

Retrofit是否在主线程上进行网络调用?

我正在尝试在Android上探索Retrofit + OkHttp.这是我在网上找到的一些代码:

RestAdapter restAdapter = new RestAdapter.Builder().setExecutors(executor, executor)
.setClient(new OkClient(okHttpClient))
.setServer("blah").toString())
.build();
Run Code Online (Sandbox Code Playgroud)

如果我不使用执行程序服务,我的代码是否会在主线程上运行?我应该在新线程中发出Web请求吗?

android retrofit okhttp

31
推荐指数
4
解决办法
3万
查看次数

在C++中定义静态成员

我试图定义一个这样的公共静态变量:

public :
         static int j=0;        //or any other value too
Run Code Online (Sandbox Code Playgroud)

我在这一行得到了一个编译错误:ISO C++禁止非const静态成员`j'的类内初始化.

  1. 为什么在C++中不允许这样做?

  2. 为什么允许const成员初始化?

  3. 这是否意味着C++中的静态变量没有像C一样用0初始化?

谢谢 !

c++ static

25
推荐指数
4
解决办法
3万
查看次数

如何通过反射改变方法行为?

我在一些遗留代码中有一个静态方法,由多个客户端调用.我显然没有选择覆盖它,或通过依赖注入改变行为.我不允许修改现有的类.

我现在要做的是使用反射更改行为(该方法 - 具有相同的签名和返回类型).

可能吗 ?如果没有,任何设计模式都能救我吗?

谢谢 !

编辑:对于我可以更改/修改的内容存在一些疑惑.我无法更改任何现有的类/方法 - 但我可以为项目添加更多类.我能用现有类做的最好的就是注释它们.这样做是为了避免破坏现有代码中的任何内容 - 这意味着对一个大项目进行了一轮完整的测试.

编辑2:java.lang.Instrumentation不适用于Android - 或者它听起来很合适!

java android design-patterns legacy-code

25
推荐指数
2
解决办法
3万
查看次数

单个文件中的多个类:此处不允许使用修饰符私有

我无法理解为什么这段代码无法编译:

class A {
    public static void main(String[] args) {
        System.out.println("hi");
    }
}

private class B {
    int a;
}
Run Code Online (Sandbox Code Playgroud)

我将内容保存在一个名为的文件中A.java- 我收到一个错误:

modifier private not allowed here // where I have defined class B
Run Code Online (Sandbox Code Playgroud)

当我尝试B作为私有和受保护时,会发生这种情况.有人可以解释一下这背后的原因吗?

谢谢 !

java access-modifiers

16
推荐指数
1
解决办法
2万
查看次数

为什么在Android上使用getCacheDir()

一旦系统内存不足,Android可能会自动删除CacheDir中的文件.但文档说我们不应该依赖系统清除这个缓存,因此编写额外的代码进行轮询和删除.

如果是这样的话,为何要选择getCacheDir()getFilesDir()?两者都在内存中,而后者在清理什么以及何时清理方面为开发人员提供了更多的权力.

谢谢!

android

15
推荐指数
1
解决办法
2万
查看次数