小编Mop*_*per的帖子

StateListDrawable用于切换colorfilters

我想创建在TabHost中使用的自定义按钮.我一直在尝试使用相同的图像资源(png),但是根据状态改变colorfilter.所以我把这个作为自定义按钮的布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="fill_parent">
    <ImageView android:id="@+id/tab_icon"
        android:layout_centerInParent="true" android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <TextView android:id="@+id/tab_text" android:layout_below="@id/tab_icon"
        android:layout_centerHorizontal="true" android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

在我的活动中,我添加了这样的标签:

tabHost.addTab(tabHost.newTabSpec(TAB_NAME_NEWS).setIndicator(buildTab(R.drawable.tab_icon_news, R.string.news))
          .setContent(newsIntent));
Run Code Online (Sandbox Code Playgroud)

这是'buildTab'方法:

private final static int[] SELECTED = new int[] { android.R.attr.state_selected };
private final static int[] IDLE = new int[] { -android.R.attr.state_selected };

private View buildTab(int icon, int label) {
    LayoutInflater inflater = LayoutInflater.from(this);
    View view = inflater.inflate(R.layout.tab_button, null);
    StateListDrawable drawable = new StateListDrawable();

    Drawable selected = getResources().getDrawable(icon);
    selected.mutate();
    selected.setBounds(0, 0, selected.getIntrinsicWidth(), selected.getIntrinsicHeight()); …
Run Code Online (Sandbox Code Playgroud)

java android android-layout android-tabhost colorfilter

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

如何更改Servlet 3.0 Spring MVC分段上传表单的字符编码?

我有一个非常简单的JSP/Servlet 3.0/Spring MVC 3.1应用程序.

在我的一个页面上,我有多种形式.其中一种形式允许用户上传文件,因此配置文件enctype="multipart/form-data".我在web.xml文件multipart-config中使用自Servlet 3.0以来可用的元素配置了multipart上传,并结合了<bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver"/>我的spring配置.

我也org.springframework.web.filter.CharacterEncodingFilter配置了Spring .

我遇到的问题是我找不到将StandardServletMultipartResolver的默认编码设置为UTF-8的方法,这通常会导致多部分表单中文本字段的内容全部出现乱码.

有没有什么办法解决这一问题?

提前致谢.

web.xml配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                  http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>foo-web</display-name>
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        WEB-INF\applicationContext.xml
    </param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
    <servlet-name>foo</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>0</load-on-startup>
    <multipart-config>
        <max-file-size>52428800</max-file-size>
        <file-size-threshold>5242880</file-size-threshold>
    </multipart-config>
</servlet>
<servlet-mapping>
    <servlet-name>foo</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
    <welcome-file>login</welcome-file>
</welcome-file-list>
Run Code Online (Sandbox Code Playgroud)

spring jsp spring-mvc servlet-3.0

9
推荐指数
1
解决办法
8504
查看次数

正确格式的android:重力在attrs.xml?

我有以下情况:

styles.xml:

<style name="fooStyle">
    <item name="android:padding">?fooView.padding</item>
    <item name="android:background">?fooView.background</item>
    <item name="android:gravity">?fooView.gravity</item>
</style>
Run Code Online (Sandbox Code Playgroud)

attrs.xml:

<attr name="fooView.padding" format="dimension" />
<attr name="fooView.background" format="color|reference" />
<attr name="fooView.gravity" format="????"/>
Run Code Online (Sandbox Code Playgroud)

themes.xml:

<style name="fooViewTheme" parent="android:Theme">
    <item name="fooView.padding" >2dip</item>
    <item name="fooView.background" >#AA000000</item>
    <item name="fooView.gravity">right|bottom</item>
</style>
Run Code Online (Sandbox Code Playgroud)

问题是我无法弄清楚fooView.gravity应该是什么格式.我已经试过用string,enumflag但没有似乎工作:我总是得到java.lang.NumberFormatException: unable to parse 'right|bottom' as integer尽快使用这个主题被加载视图.

所有答案都表示赞赏.

android android-layout

8
推荐指数
1
解决办法
6376
查看次数

应用程序处于停止状态时接收Android GCM通知

在我们使用GCM的其中一个应用程序上,我们一直在收到有关应用程序被杀后应用程序停止接收通知的报告.再次启动应用程序时,通知显示正常.

经过调查,我们发现这是由于Android 3.1上的这一变化:

请注意,系统将FLAG_EXCLUDE_STOPPED_PACKAGES添加到所有广播意图.这样做是为了防止来自后台服务的广播无意或不必要地启动已停止的应用程序的组件.后台服务或应用程序可以通过将FLAG_INCLUDE_STOPPED_PACKAGES标志添加到应允许激活已停止的应用程序的广播意图来覆盖此行为.(Android 3.1更改)

我检查了收到通知后GCM触发的意图,我注意到确实设置了FLAG_EXCLUDE_STOPPED_PACKAGES.

这意味着在Android 3.1+上运行我们的应用的所有用户一旦杀死他们的应用就会停止接收通知,直到他们自己重启.(Pre-Android 3.1工作得很好).

由于GCM框架本身触发了intent,我们无法更改在其上设置的标志,因此我们正在寻找另一种解决方法.

所有想法都表示赞赏.

android android-intent android-c2dm google-cloud-messaging

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

MySQL触发器以某种方式导致提交

我们在几个表上有一个简单的审计系统.这一切都很好,但每隔一段时间,我们就会在导致触发器触发的操作中得到这样的错误:

java.sql.SQLException: Explicit or implicit commit is not allowed in stored function or trigger.

不幸的是,我们无法弄清楚我们的触发器如何导致提交.

这些是(有时)导致错误的触发器:

CREATE
TRIGGER `my_schema`.`fileDescriptorInsertTrigger`
AFTER INSERT ON `my_schema`.`FILE_DESCRIPTOR`
FOR EACH ROW
    insert into `AUDIT_EVENT`
            (`applicationId`,`classifier`,`lastModified`)
        values
            (NEW.application,'FILE_AND_DIR',NOW())
    on duplicate key
        update lastModified=NOW();

CREATE
TRIGGER `my_schema`.`fileDescriptorUpdateTrigger`
AFTER UPDATE ON `my_schema`.`FILE_DESCRIPTOR`
FOR EACH ROW
    update `AUDIT_EVENT`
      set lastModified=NOW()
      where classifier='FILE_AND_DIR'
        and applicationId=NEW.application;

CREATE
TRIGGER `my_schema`.`fileDescriptorDeleteTrigger`
AFTER DELETE ON `my_schema`.`FILE_DESCRIPTOR`
FOR EACH ROW
    update `AUDIT_EVENT`
      set lastModified=NOW()
      where classifier='FILE_AND_DIR'
        and applicationId=OLD.application;
Run Code Online (Sandbox Code Playgroud)

编辑:根据要求,输出 show variables like '%commit%'

Variable_name   Value …
Run Code Online (Sandbox Code Playgroud)

mysql triggers hibernate

5
推荐指数
1
解决办法
977
查看次数

强制 kafka 消费者轮询延迟最高的分区

我有一个设置,其中有几个KafkaConsumers分别处理单个主题上的多个分区。它们被静态分配了分区,以确保每个消费者都有相同数量的分区来处理。还选择了记录键,以便我们在所有分区上平均分配消息。

在负载很重的时候,我们经常看到少数分区建立了相当大的延迟(数千条消息/几分钟的价值),而其他获得相同负载并被同一消费者消耗的分区设法保持延迟低至几百条消息/几秒。

看起来消费者正在以最快的速度获取记录,绕过大多数分区,但有时会有一个分区被遗漏了很长时间。理想情况下,我希望延迟在各个分区中分布得更均匀。

我已经阅读KafkaConsumer了一段时间关于轮询行为和配置的文章,到目前为止,我认为有两个选项可以解决这个问题:

  1. 构建一些自定义的东西,可以监控每个分区的滞后,并使用KafkaConsumer.pause().resume()基本上强制KafkaConsumer从滞后最大的分区读取
  2. 限制我们KafkaConsumer只订阅一个TopicPartition,并使用KafkaConsumer.

这些选项似乎都不是处理此问题的正确方法。配置似乎也没有答案:

  • max.partition.fetch.bytes 仅指定单个分区的最大提取大小,不保证下一次提取将来自另一个分区。
  • max.poll.interval.ms 仅适用于消费者组,而不适用于每个分区。

我是否缺少鼓励KafkaConsumer更频繁地切换分区的方法?或者一种对具有最高滞后的分区实施偏好的方法?

java scala apache-kafka kafka-consumer-api

5
推荐指数
1
解决办法
431
查看次数

一般转发 GRPC 调用

我有一个 GRPC API,在重构之后,其中一些包被重命名。这包括package我们定义 API 的 proto 文件之一中的声明。像这样的东西:

package foo;

service BazApi {
    rpc FooEventStream(stream Ack) returns (stream FooEvent);
}
Run Code Online (Sandbox Code Playgroud)

改为

package bar;

service BazApi {
    rpc FooEventStream(stream Ack) returns (stream FooEvent);
}
Run Code Online (Sandbox Code Playgroud)

服务器端是grpc-java在顶部使用scala 和 monix 实现的。

这对于使用新 proto 文件的客户端来说一切正常,但对于构​​建在旧 proto 文件之上的旧客户端,这会导致问题:UNIMPLEMENTED: Method not found: foo.BazApi/FooEventStream.

通过 GRPC API 传递的消息的实际数据格式没有改变,只是包。

由于我们需要保持向后兼容性,我一直在寻找一种方法来让旧客户端正常工作,同时保持名称更改。

我希望ServerInterceptor使用能够检查传入呼叫的泛型来完成这项工作,看到它来自旧客户端(我们在标头中有客户端版本)并将其重定向/转发到重命名的服务。(因为只是包名发生了变化,这很容易弄清楚,例如foo.BazApi/FooEventStream-> bar.BazApi/FooEventStream

但是,似乎没有一种优雅的方法可以做到这一点。我认为可以通过ClientCall为正确的端点启动一个新端点,然后ServerCall通过委托给ClientCall.

有一个更好的方法吗?

grpc grpc-java

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