我正在使用parse.com
Android SDK管理我的应用中的一些图片.是cancel()
停止与parse.com
服务器进行交易的唯一方法吗?
最小的例子:
final ParseFile file = ... ;
file.getDataInBackground(new GetDataCallback() {
//called when loading is done
@Override
public void done(byte[] bytes, ParseException e) {
Log.e(TAG, String.valueOf(bytes == null));
}
}, new ProgressCallback() {
//called to notify progress
@Override
public void done(Integer integer) {
Log.e(TAG, String.valueOf(integer));
if (integer > 50) {
file.cancel();
}
}
});
Run Code Online (Sandbox Code Playgroud)
我希望在达到50%之后加载停止,但事实并非如此.我在这种情况下的登录将是:
1
2
3
....
49
50
51
....
98
99
100
true
Run Code Online (Sandbox Code Playgroud)
与您调用的cancel()
次数和次数不同的唯一区别是,如果您取消了byte[]
结果,则为null.但这确实是次要的,这里的重点是file …
我在CoordinateLayout视图中有两个Fab.当我展示Snackbar时,我希望两个Fab一起上升,但结果是只有一个Fab(较低的一个)响应并上升(见图).我在这里想念什么?
叫小吃店
mSnackbar = Snackbar.make(getActivity().findViewById(R.id.coords_wrapper), "Loading", 1000000000);
Run Code Online (Sandbox Code Playgroud)
XML
<android.support.design.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/coords_wrapper">
<!-- main contents here, left out -->
<Relativelayout ...... />
<android.support.design.widget.FloatingActionButton
android:id="@+id/action_button_location"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src ="@drawable/ic_add_black"
android:layout_gravity="right|bottom"
android:layout_marginBottom="82dp"
android:layout_marginRight="16dp"
app:borderWidth="0dp"
app:elevation="6dp"
/>
<android.support.design.widget.FloatingActionButton
android:id="@+id/action_button_filter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src ="@drawable/ic_add_black"
android:layout_gravity="right|bottom"
android:layout_margin="16dp"
app:borderWidth="0dp"
app:elevation="6dp"
/>
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud) android android-support-library android-design-library android-snackbar android-coordinatorlayout
我让用户更改他的凭据.他键入了新的用户名,电子邮件和密码,我想:
ParseUser user = ParseUser.getCurrentUser();
user.setUsername("MY NEW NAME");
user.setEmail(email);
user.setPassword("MY NEW PW");
user.saveInBackground(...);
Run Code Online (Sandbox Code Playgroud)
所以呢?所以这个save()
调用可能会因为很多原因而失败(例如:其他人已经使用了用户名).我可以说,在这种情况下,上述字段都没有得到更新,这是公平的:我显示错误,用户知道一切都出错了.
如果您注意到事情变得复杂,即使在之后ParseException
,user
上面会保留其脏字段,这些字段无法保存到服务器.即
//saveInBackground fails
//...
user.getUsername().equals("MY NEW NAME") // true!
Run Code Online (Sandbox Code Playgroud)
现在,我可以通过调用将这些字段恢复为正确的值user.fetch()
,但这不适用于该password
字段.
这是特别不需要的,因为任何未来的呼叫save()
或此类呼叫(可能不会因为可能是完全不同的呼叫而失败)也会更新密码!即
//later
ParseUser user = ParseUser.getCurrentUser();
user.put("stuff");
user.save();
Run Code Online (Sandbox Code Playgroud)
这不仅会放"东西",还会将密码更改为"我的新PW" ..用户不知道.
有没有办法重置本地password
字段,除此之外fetch()
不起作用?我知道我可以通过三种不同的查询来保存用户名,电子邮件和密码,但这不是我案例的可能解决方案.
我有一个包含大量片段的Activity android应用程序.当我显示列表屏幕时,我想使用Toolbar
with app:layout_scrollFlags="scroll|enterAlways"
属性.在细节片段中,我想使用CollapsingToolbarLayout
带有图像的片段.由于它是一个Activity应用程序,我只有一个Toolbar
.是否可以通过编程方式修改我的布局以适应这两种情况?
android android-layout android-fragments material-design android-support-design
我们以mpg
数据集为例,特别是class
和cyl
列.我可以看到每个单元有多少条目class
,并根据cyl值区分填充颜色:
library(ggplot2)
p <- ggplot(mpg)
p <- p + geom_bar(mapping=aes(x=class, fill=factor(cyl)), position=position_dodge())
print(p)
Run Code Online (Sandbox Code Playgroud)
但是,我想看到的是每个不同值的平均条目数(每个class
)cyl
.基本上,如果你看一下上面的图,我想要每个类一个单独的条,其高度应该是该类的彩色条的平均高度.
我可以通过预处理数据框来获得这个结果,例如:
df <- aggregate(formula=cyl~class, data=mpg, FUN=function(x) { length(x) / length(unique(x)) })
p <- ggplot(df)
p <- p + geom_bar(mapping=aes(x=class, y=cyl), stat='identity')
p <- p + ylab('average count')
Run Code Online (Sandbox Code Playgroud)
这给了我想要的输出:
但是,考虑到ggplot2有多强大,我想知道这是否可以通过ggplot函数实现.我想这涉及使用特定的stat
(可能与group=cyl
?),但我无法做到.
标题很清楚.我有这个布局:
_________________
|_______________| <- Toolbar
|___|___|___|___| <- Tablayout
| |
| |
| ViewPager |
| |
|_______________|
Run Code Online (Sandbox Code Playgroud)
工具栏和tablayout都在一个内部AppBarLayout
,所以我可以使用滚动标记来隐藏工具栏向上滚动.问题是这只适用于嵌套滚动支持的视图.大多数标签 - 我的意思是,大多数页面 - 是support.v4.NestedScrollView
s,所以这是可以的; 其他人(并且需要)ListView
.
从Lollipop开始,我可以简单地添加android:nestedScrollingEnabled="true"
到列表视图,并且工具栏在滚动时正确隐藏.
但是,在API <21上,没有这样的属性,工具栏也不会隐藏.更重要的是,列表中的最后一项是隐藏的,因为有一些测量错误CoordinatorLayout
:listview就好像它有工具栏当前占用的空间一样.
解决方案:
切换到RecyclerView
,它支持嵌套滚动:我不能,因为我需要使用只适用于适配器视图的外部库适配器,并且我无法替换(即,ParseQueryAdapter
);
扩展ListView
和实现嵌套滚动:似乎很复杂;
扩展ListView
并实现一些解决方法,例如测量东西以避免最后一项问题或(和)自定义行为以使工具栏隐藏:似乎也很复杂;
使用一些布局技巧:找不到.
有帮助吗?
例如,我(拼命)尝试:
<android.support.v4.widget.NestedScrollView
android:nestedScrollingEnabled="true"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
</android.support.v4.widget.NestedScrollView>
Run Code Online (Sandbox Code Playgroud)
但是这种方式ListView
并没有被列为match_parent
.我得到一个小高度的小视图,页面的其余部分是空的.
android android-listview android-support-library android-design-library android-appbarlayout
我不知道为什么会发生这种情况,但是我无法从Google相册提供者中选择图片。在API 27上进行测试。
如果我使用:
val intent = Intent(Intent.ACTION_GET_CONTENT)
intent.addCategory(Intent.CATEGORY_OPENABLE)
intent.type = "image/*"
Run Code Online (Sandbox Code Playgroud)
当我打开“照片”提供程序并浏览文件夹时,会看到很多这样的文件:
2019-03-02 12:04:15.164 17641-13395/? W/NetworkManagementSocketTagger: untagSocket(120) failed with errno -22
2019-03-02 12:04:22.528 13217-13217/? E/ResourceType: Style contains key with bad entry: 0x01010586
2019-03-02 12:04:22.535 13217-13217/? W/ResourceType: For resource 0x7f020366, entry index(870) is beyond type entryCount(468)
Run Code Online (Sandbox Code Playgroud)
当我单击图片时,我看到以下内容:
2019-03-02 12:04:34.150 13217-13217/? W/ResourceType: For resource 0x7f02036c, entry index(876) is beyond type entryCount(468)
2019-03-02 12:04:34.151 13217-13217/? W/ResourceType: For resource 0x7f02036c, entry index(876) is beyond type entryCount(468)
2019-03-02 12:04:34.229 2907-16891/? W/MediaExtractor: …
Run Code Online (Sandbox Code Playgroud) android android-intent kotlin google-photos document-provider
我已经尝试了几个小时,我觉得是时候放弃了.如何循环xml中定义的AnimatorSet?
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator />
<objectAnimator />
<objectAnimator />
<objectAnimator />
</set>
Run Code Online (Sandbox Code Playgroud)
我尝试了几十种组合startOffset
,repeatCount
而且duration
单一组合objectAnimator
,但这不是正确的方法.
我读到了这个有前途的解决方法:
a.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
animation.start();
Log.i();
}
});
Run Code Online (Sandbox Code Playgroud)
但它只是不起作用:onAnimationEnd
一次调用,重复动画,然后onAnimationEnd
不再调用.
这里的其他类似问题涉及错误的答案(参考android.view.animation
框架)或建议为单个定义自定义插值器objectAnimator
,但这不是我正在寻找的.谢谢.
我正在开发一个处理图片和使用parse.com
服务作为后端的应用程序.在某些时候我不得不选择:
100x100
用于缩略图,400x400
用于更大的视图,1000x1000
用于全屏视图;1000x1000
版本,并在需要时将其缩小,可能是服务器端.我目前正在研究的解决方案是两者的混合:我持有100x100
缩略图,1000x1000
全屏视图,并希望将其缩小以满足任何其他需求.我开始研究云代码功能来实现这一目标.我希望将函数传递给当前视图的宽度,以使图像适应客户的需要.
var Image = require("parse-image");
Parse.Cloud.define("getPicture", function(request, response) {
var url = request.params.pictureUrl;
var objWidth = request.params.width / 2;
Parse.Cloud.httpRequest({
url: url
}).then(function(resp) {
var i = new Image();
return i.setData(resp.buffer);
}).then(function(i) {
var scale = objWidth / i.width();
if (scale >= 1) {
response.success(i.data());
}
return i.scale({
ratio: scale
});
}).then(function(i) {
return i.data();
}).then(function(data) {
response.success(data);
});
});
Run Code Online (Sandbox Code Playgroud)
我有两个问题:
这种方法是正确的,还是应该更好地存储一个中等版本的图像(如400x400 …
我正在使用OpenCV for java(但这与我猜不相关).我正在使用这里BackgroundSubtractorMOG2
引用的(很差)类.我已经阅读并理解了Zivkovic关于算法的论文,您可以在这里找到.
BackgroundSubtractorMOG2
在其构造函数中引入一个名为的参数history
.它是什么,它如何影响结果?例如,你能指点我在纸上的参考吗?
从类源代码,第106行,据说alpha = 1/history
.这意味着历史就是论文中的T参数,即(或多或少)构成训练集的帧数.
然而,它似乎并非如此.将构造函数中的值从10更改为500或更高,对最终结果没有影响.这就是我所说的:
Mat result = new Mat();
int history = 10; //or 50, or 500, or whatever
BackgroundSubtractorMOG2 sub = new BackgroundSubtractorMOG2(history, 16, false);
for (....) {
sub.apply(frame[i], result);
}
imshow(result); //let's see last frame
Run Code Online (Sandbox Code Playgroud)
我设定的历史无关紧要,无论是5,10,500,1000 - 结果总是一样的.然而,如果我改变了alpha
价值(学习率)apply()
,我可以看到它真正的影响力:
Mat result = new Mat();
float alpha = 0.1; //learning rate, 1/T (1/history?)
BackgroundSubtractorMOG2 sub = new BackgroundSubtractorMOG2(whatever, …
Run Code Online (Sandbox Code Playgroud)