我正在使用一个自定义的 EditText 类,该类支持通过用户输入为特定小部件输入图像跨度,但遇到了一个奇怪的问题。当图像跨度出现在一行的末尾时,下一行的结转有时会导致图像跨度不再可见。
基本上,当将图像移到多行编辑文本中的下一行时,图像跨度似乎没有被编辑文本正确处理。它只是在被携带后对用户不可见。我可以退格第二张图像的内容,直到它看起来与第一张图像完全一样(到“n”),然后我们再次看到图像跨度。
有谁知道我能做些什么来解决这个问题?这是我想保留在我的应用程序中的一个关键组件。我也不能回退到单行编辑文本,多行支持也很关键。
为了重现性,这是我将 ImageSpan 添加到我的编辑文本的代码:
public void appendSpannedText(String s){
if (textToDrawableMap == null || textToDrawableMap.isEmpty()
|| !textToDrawableMap.containsKey(s)) {
return;
}
// Acquire the mapped drawable
Drawable drawable = textToDrawableMap.get(s);
Editable editable = getText();
int start = getSelectionStart();
// Insert the a space at the start that's eaten by the image span
// being set.
editable = editable.insert(start, SPACE);
// Insert the new string at the starting point
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(editable);
// Create the …Run Code Online (Sandbox Code Playgroud) 我正在努力思考通过REST API处理将集合更新到另一个资源的最佳方法,并且正在寻找其他人如何看待这个过程的指导.
假设您与实体"父"(一)和"子"(许多)具有多对一关系.我的思维过程是您可以通过单个PUT端点处理更新父项的子集合.这样,更新父项子实体的端点以及将新子实体添加到父项集合的端点通过单个端点进行.请求主体将包含子实体的数组,并且端点本身将包含足够的信息以知道正在更新哪个父实体:
即PUT .../parent/{uid}/child
端点将告诉我们具有{uid}的uid的父实体是被请求的父实体并且更新它的子实体.
这种机制感觉有点奇怪.也就是说,我必须以一种方式坚持新实体,并在另一种方式中更新它们.我的更新/保存操作最好是批量执行,但批量保存和更新都很奇怪.我必须这两个,因为你无法更新新实体
有没有更好的方法来实现这一目标?关系是分层的,这意味着没有父关系,子资源就不存在了.我还希望能够批量发布POST/PUT.
我可以暴露POST与PUT的区别(使用与上面相同的端点).我有一个约束,使得子实体具有唯一的名称,因此POST必须失败以使用现有名称POST新的子实体,并且当请求主体包含名称的子实体时,PUT将不得不失败不存在.这就是我选择使用单个端点进行共享操作的原因.
我有一个 @ManyToMany 关系注释,它生成具有唯一约束的不需要的索引。我不知道如何防止这种情况。这是我的注释的样子:
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "ab_join_table",
joinColumns = @JoinColumn(name = "entity_a_uid", referencedColumnName = "uid", insertable = false, updatable = false, unique = false),
inverseJoinColumns = @JoinColumn(name ="entity_b_uid", referencedColumnName = "uid", insertable = false, updatable = false, unique = false),
foreignKey = @ForeignKey(name = "none", value = ConstraintMode.NO_CONSTRAINT))
@org.hibernate.annotations.ForeignKey(name = "none", inverseName = "none")
private Set<EntityB> entities = new HashSet<>();
Run Code Online (Sandbox Code Playgroud)
基本上,我有一个表 EntityA 和 EntityB,它们具有多对多关系,并使用联接表来桥接关系。没什么特别的。问题是,UID 不希望是唯一的,并且我不希望添加这个唯一约束!它被添加为索引
"uk_5u10jim5rbm0dggygeebnr6ve" UNIQUE CONSTRAINT, btree (uid)
Run Code Online (Sandbox Code Playgroud)
我该如何防止这种情况?
我的列(不希望在其上创建索引)注释如下:
@Column(name="uid", nullable = false, unique = …Run Code Online (Sandbox Code Playgroud) 我正在开发一个使用mp4parser库(isoparser-1.0-RC-27.jar和aspectjrt-1.8.0.jar)合并mp4剪辑的应用程序.合并两个剪辑时,它们会成为一个剪辑,但随着更多剪辑被添加到其中,输出mp4会在视频后面显示音频.
这是代码:
Movie[] clips = new Movie[2];
//location of the movie clip storage
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), "TestMerge");
//Build the two clips into movies
Movie firstClip = MovieCreator.build(first);
Movie secondClip = MovieCreator.build(second);
//Add both movie clips
clips[0] = firstClip;
clips[1] = secondClip;
//List for audio and video tracks
List<Track> videoTracks = new LinkedList<Track>();
List<Track> audioTracks = new LinkedList<Track>();
//Iterate all the movie clips and find the audio and videos
for (Movie movie: clips) {
for (Track track : …Run Code Online (Sandbox Code Playgroud) 我正在构建一个具有透明背景的 CardView,并且在尝试将 cardBackgroundColor 设置为带有 alpha 通道的一个时遇到了问题。
这是我尝试过的:
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/list_view_btn"
android:layout_width="@dimen/icon_size"
android:layout_height="@dimen/icon_size"
android:layout_gravity="bottom|start"
android:layout_marginLeft="@dimen/activity_horizontal_margin"
android:layout_marginStart="@dimen/activity_horizontal_margin"
android:layout_marginBottom="@dimen/icon_bottom_margin"
card_view:cardBackgroundColor="#66F9F9F9"
card_view:cardCornerRadius="3dp"/>
Run Code Online (Sandbox Code Playgroud)
结果是一个没有任何透明度的 CardView 按钮(但带有 F9F9F9 灰色,忽略 66 alpha 值)。因此,下一步是尝试以编程方式执行此操作:
mListBtn.setPreventCornerOverlap(false);
int baseColor = getResources().getColor(R.color.material_gray);
mListBtn.setCardBackgroundColor(Color.argb(50,
Color.red(baseColor),
Color.green(baseColor),
Color.blue(baseColor)));
Run Code Online (Sandbox Code Playgroud)
这是结果:
请注意,中心和边框之间有一个填充。CardView 是空的,里面没有子视图,我在有/没有 setPreventCornerOverlap() 调用的情况下尝试了这个,看看这是否是问题......有人可以解释为什么会发生这种情况吗?
1)为什么我的带有 cardBackgroundColor 的 CardView 的 XML 定义忽略了 alpha 着色
2) 为什么以编程方式设置 cardBackgroundColor 会导致着色起作用,但现在隐式添加了填充?
在我的Hibernate项目中,我添加如下索引:
@Entity
@Table(name="MY_TABLE", indexes = {
@Index(name = "idx_user_name", columnList = "name"),
@Index(name = "idx_user_email", columnList = "email")
})
Run Code Online (Sandbox Code Playgroud)
哪个工作得很好,但是当我想制作这样的索引时会发生什么:
CREATE INDEX ON my_table (lower(name));
Run Code Online (Sandbox Code Playgroud)
如果我使用以下注释,我得到一个AnnotationException:
@Index(name = "idx_lower_name", columnList = "lower(name)")
Run Code Online (Sandbox Code Playgroud)
我希望通过Hibernate + JPA 2.1制作索引来发布我的项目.是否可以通过索引注释应用函数?
或者我应该在部署时运行SQL脚本以通过SQL自己添加这些索引?
我可能只是格式化columnList错误,或者可能存在我缺少的文档中没有描述的字段.
当我通过 @api_view装饰器。
我的自定义 API 视图如下所示:
@api_view(['GET'])
def TestView(request):
print(request.META)
return Response({'message': 'test'})
Run Code Online (Sandbox Code Playgroud)
我期待的是做类似的事情
curl --request GET \
--url http://localhost:8000/test \
--header 'custom: test'
我会看到我的自定义标题custom出现在输出中。相反,它根本不存在。从文档中,它对 request.META 字段表示以下内容:
A dictionary containing all available HTTP headers. Available headers depend on the client and server, but here are some examples:
Run Code Online (Sandbox Code Playgroud)
然而,它们根本没有出现在我的输出中。我在这里错过了什么吗?
如果相关,我将我的 URL 注册为:
urlpatterns = [url(r'test', views.TestView, name='test'), ...]
我的最终目标是编写一个自定义权限类,该类将解析自定义标头并使用它执行与身份验证相关的操作,并允许或拒绝请求。我在这里的 POC 只是为了展示我正在处理的基本示例。我可以提供输出,print(request.META)但它只是一堵没有我预期标题的文本墙。
正如我的问题所指出的,我想知道我们在WHERE子句中如何称呼具有这种条件的查询类型,即:
SELECT * FROM mytable
WHERE (col1, col2) < (1, 2);
Run Code Online (Sandbox Code Playgroud)
换句话说:
给我所有col1小于'1'的记录,或者如果它等于'1'则col2必须小于'2'-并且所有值都不为NULL。
我真的很喜欢这种类型的语法,但是不知道有关如何引用这种条件的命名约定。它看起来像是有条件的元组,但是这个名字并没有给我任何东西。
我的问题源于需要了解该语法的名称,以便研究如何使用带有Hibernate和JPA2和Postgres的Criteria API编写此语法。
我能够使用CriteriaBuilder的function()调用使用Criteria API编写此代码:
//Our left expression (date, id)
Expression leftVal = criteriaBuilder.function("ROW", Tuple.class,
from.get("date").as(java.util.Date.class),
from.get("id").as(Long.class));
//Our right expression ex: ('2015-09-15', 32450)
ParameterExpression<Date> dateParam = criteriaBuilder.parameter(Date.class);
ParameterExpression<Long> idParam = criteriaBuilder.parameter(Long.class);
Expression rightVal = criteriaBuilder.function("ROW", Tuple.class, dateParam, idParam)
//build the first predicate using ROW expressions
Predicate predicate = criteriaBuilder.greaterThan(leftVal, rightVal);
//more query building happens …Run Code Online (Sandbox Code Playgroud) 我有一个我在PostgreSQL DB中创建的函数,我想用JPA 2.1的StoredProcedureQuery方法调用它.
这是我的PostgreSQL查询:
CREATE OR REPLACE FUNCTION get_values(date text) returns refcursor
AS $$
DECLARE tuples refcursor;
BEGIN OPEN tuples FOR
SELECT user, COUNT(*)
FROM my_table
WHERE date_ = date
GROUP BY user;
return tuples;
END;
$$
LANGUAGE plpgsql
Run Code Online (Sandbox Code Playgroud)
这只是在特定日期对用户进行计数的简单查询.这只是一个演示查询,用于测试StoredProcedureQueries的工作方式.事实上,仅通过postgreSQL使用它就可以了.
现在,让我们尝试使用JPA 2.1和Javaland调用它:
StoredProcedureQuery storedProcedure = em.createStoredProcedureQuery("get_values");
storedProcedure.registerStoredProcedureParameter(2, String.class, ParameterMode.IN);
storedProcedure.registerStoredProcedureParameter(1, Object.class, ParameterMode.REF_CURSOR);
storedProcedure.setParameter(2, "2015-02-01");
storedProcedure.execute();
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我得到以下异常:
org.hibernate.HibernateException: PostgreSQL supports only one REF_CURSOR parameter, but multiple were registered
Run Code Online (Sandbox Code Playgroud)
声明只有一个引用游标!实际上,如果我只是为WHERE date_ = date注册了单个REF_CURSOR参数和硬编码我的Postgresql函数的值,那么这个调用就可以了.
因此,似乎使用ref_cursor向存储过程查询添加任何其他参数会破坏功能.单独,ref_cursor参数工作正常.
谁知道为什么会这样?为什么在PostgreSQL函数的StoredProcedureQuery中添加参数会破坏它?
它何时起作用的示例:
CREATE OR REPLACE FUNCTION get_values(date text) …Run Code Online (Sandbox Code Playgroud) 我有一个使用Spring Boot + Docker Compose + Eureka的非常简单的演示。
我的服务器在具有以下应用程序属性的端口8671上运行:
server:
port: 8761
eureka:
instance:
prefer-ip-address: true
client:
registerWithEureka: false
fetchRegistry: false
server:
waitTimeInMsWhenSyncEmpty: 0
Run Code Online (Sandbox Code Playgroud)
我的Eureka客户端使用以下应用程序属性在端口9000上运行:
server:
port: 9000
spring:
application:
name: user-registration
eureka:
client:
registerWithEureka: true
fetchRegistry: true
serviceUrl:
defaultZone: http://localhost:8761/eureka/
instance:
prefer-ip-address: true
Run Code Online (Sandbox Code Playgroud)
当我在父Maven项目中启动docker.compose文件时,这是我的docker-compose文件的内容:
eureka-server:
image: rosenthal/eureka-server
ports:
- "8761:8761"
user-registration:
image: rosenthal/user-registration
ports:
- "9000:9000"
links:
- eureka-server
Run Code Online (Sandbox Code Playgroud)
当我首先启动eureka服务器运行应用程序时,客户端通过
mvn spring-boot:run
Run Code Online (Sandbox Code Playgroud)
服务器成功注册了我的客户端(我称其为用户注册)。
当我通过docker-compose运行我的应用程序时,客户端无法向以下输出注册:
DiscoveryClient_USER-REGISTRATION/0fd640cbc3ba:user-registration:9000:
registering service...
user-registration_1 | 2017-06-21 04:36:05.120 ERROR 1 --- [nfoReplicator-0]
c.n.d.s.t.d.RedirectingEurekaHttpClient : Request execution error …Run Code Online (Sandbox Code Playgroud) 我希望能够在特定端点方法返回其值后处理对 Spring RestController 的 HTTP 请求的结果。例如我有:
GET /customer/{id}
Run Code Online (Sandbox Code Playgroud)
这通常只返回自定义资源。我定义的端点RestController只是返回一个客户对象。
我希望能够修改HttpEntity根据此返回结果生成的响应。特别是,我想在这个后处理器中完成所有 HATEOAS 工作并将其包装在我的父对象中。
实现这一目标的最佳方法是什么?我会包括我已经尝试过的内容,但我想不出任何可以干净地完成此操作的方法。
在实现 JAX-RS 的框架中,您所需要做的就是实现接口ContainerResponseFilter,然后可以将其添加到 REST 服务器。使用 Jersey 或 CXF 很容易做到这一点。
ContainerResponseFilterSpring REST中有一个概念吗?
java ×7
hibernate ×5
android ×3
spring ×3
jpa ×2
postgresql ×2
rest ×2
criteria ×1
django ×1
docker ×1
html ×1
jax-rs ×1
jpa-2.0 ×1
maven ×1
mp4parser ×1
pagination ×1
python ×1
spring-boot ×1
spring-mvc ×1
sql ×1
transparency ×1