小编Add*_*dev的帖子

检测可点击项目的投掷手势

想象一下有4个按钮的布局

 _______________________________
|              |                |
|      A       |       B        |
|______________|________________|
|              |                |
|      C       |       D        |
|______________|________________|
Run Code Online (Sandbox Code Playgroud)

我想检测整个布局上的投掷手势,但是当投掷开始时,没有检测到按钮.

我正在使用:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    gesturedetector= new GestureDetector(this, this);

    findViewById(R.id.touchContainer).setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            Log.e("","TouchEvent");
            return gesturedetector.onTouchEvent(event);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

当没有可点击的项目时,如果从可点击的项目开始投掷则失败.

我怎么解决这个问题?提供50分的赏金,以获得完整的工作答案

java android android-layout android-resources

23
推荐指数
1
解决办法
5968
查看次数

具有弱值的HashMap

我正在为持久存储的对象实现缓存.这个想法是:

  • 方法 getObjectFromPersistence(long id); ///Takes about 3 seconds
  • 方法 getObjectFromCache(long id) //Instantly

并有一个方法:getObject(long id)使用以下伪代码:

synchronized(this){
    CustomObject result= getObjectFromCache(id)
    if (result==null){
       result=getObjectFromPersistence(id);
       addToCache(result);
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

但我需要允许垃圾收集器收集CustomObject.到目前为止,我正在使用一个HashMap<Long,WeakReference<CustomObject>实现.问题是随着时间的推移HashMap变得空洞WeakReferences.

我已经检查了WeakHashMap但是键很弱(并且值仍然是强引用)所以使用WeakReferences的longs没有任何意义.

什么是解决这个问题的最佳解决方案?是否有一些"逆WeakHashMap"或类似的东西?

谢谢

java android weak-references hashmap

23
推荐指数
2
解决办法
7307
查看次数

在Canvas android中绘制有边框的文本

我想在Canvas中画一些类似于:

在此输入图像描述

我怎么能做边界效果?谢谢

java android android-layout

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

清洁架构:如何在UI中反映数据层的变化

我正在尝试根据Android中的Uncle Bob的Clean Architecture进行设计.

问题:

我想解决的是如何使在一个存储库中生成的更改反映在应用程序的其他部分,如其他存储库或视图.

这个例子

我为这个例子设计了一个非常简单的例子.请注意,边界接口已被删除,以使图表保持较小.

想象一个应用程序,显示一个视频列表(标题,thumnail和类似计数),点击视频,你可以看到详细信息(你可以喜欢/不喜欢视频).

此外,该应用程序还有一个统计系统,可以计算用户喜欢或不喜欢的视频数量.

这个应用程序的主要类可以是:

对于视频部分/模块: 在此输入图像描述

对于Stats部分/模块: 在此输入图像描述

目标

现在想象一下你检查你的统计数据,然后浏览视频列表,打开一个视频的详细信息,然后单击类似按钮.

在将类似内容发送到服务器之后,应用程序的几个元素应该知道更改:

  • 当然详细视图,应该用更改来更新(这可以通过回调进行,所以没问题)
  • 视频列表应更新给定视频的"喜欢"计数
  • StatsRepository投票新视频后,可能想要更新/无效缓存
  • 如果统计信息列表可见(想象一下分屏),它还应该显示更新的统计信息(或者至少接收事件以重新查询数据)

问题

解决这种沟通的常见模式有哪些?请尽可能完整地回答您的问题,指定事件的生成位置,通过应用程序传播的方式等.

注意:奖励将用于完整答案

java architecture android coding-style

21
推荐指数
2
解决办法
2305
查看次数

在Java中加载RSA私钥(algid解析错误,而不是序列)

我正在尝试将使用ssl生成的私有RSA密钥加载到java中,我的代码是:

生成密钥:

openssl genrsa -out mykey.pem 1024
Run Code Online (Sandbox Code Playgroud)

结果:

-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCUibP4fY2PA/sGMKMbU6usuIGcOAqgQjD6c2ylVo05Oz7pgjnE
+O0l2MFRUYUGT5KKk/W+0cAXkxaQHE3n8A8X1mHT8eMDmWnzz0PeYjDE8LQmAw8R
Y2FnVKFAB36BIjdb5FsZmCk5QYKU5+nWLMqH/j/IR5AyX5wR2SMoslUg2QIDAQAB
AoGAeJ1s7638IhLIZtldyRXjRKi6ToFPV50IKodJxOSIXt3WE0V05ZaA84eUSxUY
IOzCgRbuqVmnUz1USAdD18AecC8qc7tXTRALLy7q8fxklPwmGPUOvTFmI7gRMUnv
cWrq1gySk3SKpj0YmWnuY9Xmd2+xoWLzUeFD1CROY5OTjIECQQDDlp1+Al7+duR0
XyMlkWLIk0nIbkQ5zlTAEipzmaeTSOJi6YG3EMMz3AGuZb7tw6HFxWqeg1hyKJ+T
cTM3WTdJAkEAwmrCDKE29n3wFOBKsZZFQbDgVOUXCBs2ubEI+ALe1DJU5BlfnrhJ
OINRCNgnwSFNbwxDTkDpR6J6Av2ElAvNEQJAV0dVvk5Wj50Ecz2lFHWdLD41taAn
B9igDxnMIcvWcK4cf+ENhmCPiwvJIEa8/aLIBNYErvmTtVWVaBkirrc8KQJABr+z
+sJB6S6X/fGHRkDkKJKeRvQo54QiUzHdENbwq0cQAVcMJbNZ/1c3oen2/1JLoNY5
I+dG8dCnEaGBT65VMQJBAIDqH1Kqs5tb51cpt6h9ot31SUVud5pSML/babwp3pRs
1s6poreym4PkAyRug0Dgcj1zVLt25TlOHvrL9r3Swq8=
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

加载:

String privKeyPEM=readFile("mykey.pem");
privKeyPEM= privKeyPEM.replace("-----BEGIN RSA PRIVATE KEY-----", "").replace("\n", "");
// Remove the first and last lines
privKeyPEM = privKeyPEM.replace("-----END RSA PRIVATE KEY-----", "");
System.out.println(privKeyPEM);

// Base64 decode the data
byte [] encoded = Base64.decode(privKeyPEM);

// PKCS8 decode the encoded RSA private key
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(encoded);
KeyFactory kf …
Run Code Online (Sandbox Code Playgroud)

java encryption openssl rsa

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

20
推荐指数
3
解决办法
3708
查看次数

使用Volley获取成功请求的HTTP状态代码

我正在使用volley检索无效网址的内容,即http://www.gigd32fdsu.com:这是我的测试代码:

// Instantiate the RequestQueue.
RequestQueue queue = Volley.newRequestQueue(this);
final String url = "http://www.gigd32fdsu.com";

// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(Request.Method.GET, url, 
new Response.Listener() {
    @Override
    public void onResponse(Object response) {
        // Display the first 500 characters of the response string.
        mTextView.setText("Response is: " + response.toString().substring(0, 500));
    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        mTextView.setText("That didn't work! " + error.networkResponse.statusCode);
    }
});
// Add the request to …
Run Code Online (Sandbox Code Playgroud)

java android android-volley

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

混淆:隐藏java中的硬编码值

可能重复:
在混淆代码中隐藏字符串

我试图隐藏我的应用程序的一些静态字符串,以使其更难反编译,这种方式像密码算法名称这样的常量在混淆代码中更难找到.

我考虑过这样的事情:

String CONCAT= "concat"+"string";
String RAW_STRING= "raw_string";
String FROM_BYTES=new String("from_bytes".getBytes());
String FROM_CHARS=new String(new char[]{'f','r','o','m','_','c','h','a','r','s'});
String FROM_CHAR2=new String(new char[]{102,114,111,109,95,99,104,97,114,115,95,50});
Run Code Online (Sandbox Code Playgroud)

最后两个选项似乎比原始选项"更暗"但我想有更好的方法来做到这一点.

我怎样才能改善这个?谢谢

java security android proguard

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

在Android KitKat中调用setGroup()时未显示通知

我正在测试可堆叠通知(Stacking Notifications文章).

我发现在某些情况下,notify()在运行android 4.X KitKat的设备中调用后,通知未显示.

为了简单地解决问题,我创建了这个模拟通知的代码(button1)和带有摘要的第二个通知(button2)

private final static int NOTIFICATION_ID_A=6;
private final static int NOTIFICATION_ID_B = 7;
private final static int NOTIFICATION_ID_SUMMARY = 8;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showNotif(NOTIFICATION_ID_A,false);
        }
    });
    findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showNotif(NOTIFICATION_ID_B,false);
            showNotif(NOTIFICATION_ID_SUMMARY,true);
        }
    });
}

private void showNotif(int notificationId,boolean groupSummary) {
    CharSequence title="Title "+notificationId;
    CharSequence message="Message "+notificationId;
    NotificationCompat.Builder notifBuilder = new NotificationCompat.Builder(this); …
Run Code Online (Sandbox Code Playgroud)

java notifications android

17
推荐指数
1
解决办法
2079
查看次数

领域:在应用程序中使用一个或多个领域(以及一个或多个模式)

我正在实现一个应用程序,它使用Realm在某些点(它们之间不相关)持久化数据.例如:

  1. 保存用户收藏的项目.
  2. (应用程序聊天)保存聊天对话和最近的常量
  3. 为应用程序的某些请求实现持久性缓存
  4. 保存最近的搜索/表单以提供自动完成功能

(让我们将这些点中的每一个命名为模块/包)

每个模块/包都有一些RealmObjects要坚持.我该如何组织这个?从代码清洁,性能或我应该关心的任何事情的角度来看

选项A:使用具有唯一模式的唯一(默认)领域:

使用 Realm.getInstance(context)

访问RealmObjects每个模块/包中的正确

选项B:使用具有默认架构的多个域

RealmConfiguration在每个模块中使用的域中指定不同的名称(使用默认架构).

由于数据属于应用程序的不同部分,隔离且未互连,因此请为每个模块使用不同的域名.

选项C:使用多个领域和范围每个应用程序包使用模式的模型类 为每个隔离的包指定名称和模式.例如:

public static Realm getChat(Context context){
    RealmConfiguration config = new RealmConfiguration.Builder(context)
            .name("chat.realm")
            .schemaVersion(1)
            .setModules(new ChatRealmModule())
            .build();
    return Realm.getInstance(config);
}

// Create the module
@RealmModule(classes = { ChatRoom.class, ChatMessage.class, ChatUser.class})
public static class ChatRealmModule{
}
Run Code Online (Sandbox Code Playgroud)

选项D:其他?

java android realm

17
推荐指数
1
解决办法
4010
查看次数