我有一个要解析的项目列表,但其中一个项目的解析可能会失败.
什么是"Rx-Way"来捕获错误但继续执行序列
代码示例:
var observable = Rx.Observable.from([0,1,2,3,4,5])
.map(
function(value){
if(value == 3){
throw new Error("Value cannot be 3");
}
return value;
});
observable.subscribe(
function(value){
console.log("onNext " + value);
},
function(error){
console.log("Error: " + error.message);
},
function(){
console.log("Completed!");
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/4.0.6/rx.all.js"></script>
Run Code Online (Sandbox Code Playgroud)
我想以非Rx方式做什么:
var items = [0,1,2,3,4,5];
for (var item in items){
try{
if(item == 3){
throw new Error("Value cannot be 3");
}
console.log(item);
}catch(error){
console.log("Error: " + error.message);
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢
我正在尝试使用前Lollipop设备(4.x)上的共享元素进行活动转换.可能吗?到目前为止,我正在尝试这个:
public class RewardDetail extends ActionBarActivity {
@Override
public void onCreate(final Bundle savedInstanceState) {
...
ViewCompat.setTransitionName(imageView, TRANSITION_NAME);
}
...
public static void launch(ActionBarActivity activity, View transitionView, WelcomeReward detailData) {
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, transitionView, TRANSITION_NAME);
Intent intent = new Intent(activity, RewardDetail.class);
intent.putExtra(PARAM_DATA, detailData);
ActivityCompat.startActivity(activity, intent, options.toBundle());
}
}
Run Code Online (Sandbox Code Playgroud)
叫做:
@Override
public void onClick(final View v) {
int position = recyclerView.getChildPosition(v);
WelcomeReward welcomeReward = data.get(position);
RewardDetail.launch(WelcomeRewardActivity.this, v.findViewById(R.id.reward_view), welcomeReward);
}
Run Code Online (Sandbox Code Playgroud)
但它导致"常规"转换(没有共享元素).有任何想法吗?
编辑
根据这段视频,可以做到:
https://www.youtube.com/watch?v=RhiPJByIMrM&index=8&list=WL
是否有一个图书馆已经为棒棒糖前实现了这个?
java android material-design activity-transition shared-element-transition
我正在尝试建立一个在jcenter上发布的aar.
assembleRelease任务正常,javadoc任务也可正常工作,但javadocJar任务输出此错误:
/Users/martinmoreno/Projects/android-dev-utils/dev-utils/src/main/java/com/tinchoapps/devutils/BitmapUtils.java:11:错误:包android.support.annotation不存在
import android.support .annotation.NonNull;
这是(简化的)gradle文件:
apply plugin: 'com.android.library'
apply plugin: 'com.github.dcendents.android-maven'
android {
...
buildTypes {
release {
minifyEnabled false
shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.debug
}
}
...
}
...
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:support-annotations:20.0.0'
compile 'com.android.support:support-v4:22.0.0'
}
task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}
task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
destinationDir = file("../javadoc/")
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from …
Run Code Online (Sandbox Code Playgroud) 我已经将Android Studio从0.9x更新到1.0 RC(1和2),我的项目构建时间从20秒增加到大约90秒.
任何人都有同样的问题?
UPDATE
在终端上运行相同的任务,我看到"解决依赖关系"步骤占用了大部分额外时间.
更新2
感谢@bond,我注意到脱机会将构建时间缩短到大约30秒,所以我尝试在build.gradle上使用mavenLocal(),但也没有运气.
顶级build.gradle:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
mavenLocal()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.0.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
mavenLocal()
jcenter()
}
}
Run Code Online (Sandbox Code Playgroud) 我想在滚动达到最大值后拉动webView"反弹"(类似于"拉动 - 刷新"效果).
我有自定义视图扩展WebView,并覆盖该方法
@Override
protected boolean overScrollBy(final int deltaX, final int deltaY, final int scrollX, final int scrollY, final int scrollRangeX, final int scrollRangeY, final int maxOverScrollX, final int maxOverScrollY, final boolean isTouchEvent)
{
VerticalOverScrollController.Result result = overscrollController.calcVerticalOverScroll(deltaY, scrollY);
Log.d("overScrollBy", "scrollY " + result.scrollY + " overScrollY " + result.overScrollY);
return super.overScrollBy(deltaX, deltaY, scrollX, result.getScrollY(), scrollRangeX, scrollRangeY, maxOverScrollX, result.getOverScrollY(), isTouchEvent);
}
Run Code Online (Sandbox Code Playgroud)
和calcVerticalOverScroll是
public Result calcVerticalOverScroll(final int deltaY, final int scrollY)
{
Result result = new Result();
if …
Run Code Online (Sandbox Code Playgroud) 我有一个FragmentStatePagerAdapter,里面有6个片段.
每个Fragment连接到服务器并加载数据.
现在,服务器连接正在Fragment.onStart()中完成,这意味着在任何时候,我都有3个http请求(选定的片段,每侧一个).
我想要的是当时只有一个连接,所以我打算使用
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener()
{
@Override
public void onPageSelected(final int position)
{
CustomFragment fragment = (CustomFragment) myFragmentStatePagerAdapter.getItem(position);
fragment.onSelected();//do stuff in here
}
});
Run Code Online (Sandbox Code Playgroud)
问题是,getItem()
返回片段的新实例,尚未添加到管理器(因此,尚未创建视图等).
此外,我已经尝试setUserVisibleHint(boolean isVisibleToUser)
但是没有被调用可见,只有isVisibleToUser = false
那么,如何为Fragment实现"onPageSelected()"事件呢?
提前致谢
我正试图为我的Seekbar做一个"贴上标签"的拇指.目标是每次Seekbar位置更改时自定义拇指上方的文本.
我这样做:
...
seekBar = (SeekBar) findViewById(R.id.bet_seek_bar);
seekBar.setMax(10);
setSeekBarLabel("0");
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar)
{
}
@Override
public void onStartTrackingTouch(SeekBar seekBar)
{
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
{
setSeekBarLabel(String.valueOf(progress));
}
});
}
private void setSeekBarLabel(String text)
{
BitmapDrawable thumb = Utils.writeOnBitmap(thumbBmp, text, 0, 0, thumbLablePaint);
seekBar.setThumb(thumb);
}
Run Code Online (Sandbox Code Playgroud)
运行后,触摸栏,我得到了这个:
我现在不关心任何文本问题(不写一个,门廊等).
我关心拇指相对于酒吧进度的位置.
拇指位置应该是绿色条结束的位置.我错过了什么?
问候.
我正在尝试测试ContentProvider类,但无法使其工作.
getProvider()继续返回null,但正如我从ProviderTestCase2.setUp()代码中理解的那样,它不应该.
public class NotesProviderTest extends ProviderTestCase2<NotesProvider>
{
...
public NotesProviderTest()
{
super(NotesProvider.class, Contract.AUTHORITY);
}
@Override
protected void setUp() throws Exception
{
super.setUp();
}
public void testNoteProvider__inserts_a_valid_record() throws Exception
{
Note note = new Note(new JSONObject(simpleNoteJson));
NotesProvider provider = getProvider();
Uri insert = provider.insert(Note.URI, note.getContentValues());
assertEquals(1L, ContentUris.parseId(insert));
Cursor cursor = provider.query(Note.URI, null, null, new String[]{}, null);
assertNotNull(cursor);
cursor.close();
}
}
Run Code Online (Sandbox Code Playgroud)
附注:如果在应用程序中使用,提供程序可以正常工作
提前致谢.
根据Android文档,活动生命周期如下:
问题是,假设我有两个活动(A和B)并且它们没有被异常杀死(内存不足等):
当一个人进入后台而另一个人被恢复/创建时,执行顺序如何?
这种保证适用于任何特定订单吗?在每个Android版本?
Regads
android ×8
gradle ×1
java ×1
javadoc ×1
javascript ×1
lifecycle ×1
overscroll ×1
reactivex ×1
rxjs ×1
seekbar ×1
unit-testing ×1
webview ×1