小编Dan*_*ali的帖子

毕加索从其URI中加载可绘制资源

我必须展示一个drawable来自res一个ImageView.在这个应用程序中,我出于某些原因使用Picasso.

在这种情况下,我需要加载drawable使用其URI而不是其id.为此,这是我的代码:

uri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://"+context.getPackageName()+"/drawable/" + drawableName);
Run Code Online (Sandbox Code Playgroud)

这里使用的drawableName是文件名而不是资源ID.

然后

Picasso.with(context).load(uri).into(imageView);
Run Code Online (Sandbox Code Playgroud)

我肯定知道可绘制的名字是正确的,但毕加索似乎不喜欢这个uri.

android picasso

40
推荐指数
5
解决办法
6万
查看次数

不使用Observable.create创建Observable

我在我的Android应用程序中使用RxJava,我想从数据库加载数据.

通过这种方式,我创建了一个新的Observable,使用Observable.create()它返回一个列表EventLog

public Observable<List<EventLog>> loadEventLogs() {
    return Observable.create(new Observable.OnSubscribe<List<EventLog>>() {
        @Override
        public void call(Subscriber<? super List<EventLog>> subscriber) {
            List<DBEventLog> logs = new Select().from(DBEventLog.class).execute();
            List<EventLog> eventLogs = new ArrayList<>(logs.size());
            for (int i = 0; i < logs.size(); i++) {
                eventLogs.add(new EventLog(logs.get(i)));
            }
            subscriber.onNext(eventLogs);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

虽然它可以正常工作,但我读到使用Observable.create()它实际上并不是Rx Java的最佳实践(参见此处).

所以我用这种方式改变了这个方法.

public Observable<List<EventLog>> loadEventLogs() {
    return Observable.fromCallable(new Func0<List<EventLog>>() {
        @Override
        public List<EventLog> call() {
            List<DBEventLog> logs = new Select().from(DBEventLog.class).execute();
            List<EventLog> eventLogs = new ArrayList<>(logs.size());
            for (int …
Run Code Online (Sandbox Code Playgroud)

android reactive-programming rx-java

32
推荐指数
1
解决办法
6849
查看次数

如果脱机,使用Picasso从磁盘缓存加载映像

我有一些图像,我在应用程序启动时从不同的网站下载,通过这样做:

Picasso.with(context).load(image_url).fetch();
Run Code Online (Sandbox Code Playgroud)

现在,假设用户关闭应用程序并关闭.当应用程序再次启动时,Picasso会以这种方式显示图像:

Picasso.with(ctx).load(image_url).placeholder(R.drawable.ph).into(imageView);
Run Code Online (Sandbox Code Playgroud)

问题是某些图像是从磁盘缓存加载的(调试模式下为黄色三角形),而其他图像则是Picasso显示占位符.

为什么?我期待每个图像都从磁盘缓存加载.

android caching picasso

22
推荐指数
4
解决办法
3万
查看次数

从Uri检索可绘制资源

我以这种方式将可绘制资源路径存储在Uri中:

Uri uri = Uri.parse("android.resource://my_app_package/drawable/drawable_name");
Run Code Online (Sandbox Code Playgroud)

如何获得uri引用的Drawable?

我不想把它放在ImageView中,只需检索Drawable(或Bitmap)对象.

android uri android-drawable

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

将Firebase实时数据侦听器与RxJava结合使用

我在我的应用程序中使用Firebase以及RxJava.Firebase能够在后端数据中发生更改(添加,删除,更改等)时通知您的应用.我试图将Firebase的功能与RxJava结合起来.

调用我正在侦听的数据Leisure,以及包含a 和更新类型(添加,删除,移动,更改)的Observable发出.LeisureUpdateLeisure

这是我的方法,允许订阅此事件.

private Observable<LeisureUpdate> leisureUpdatesObservable;
private ChildEventListener leisureUpdatesListener;
private int leisureUpdatesSubscriptionsCount;

@NonNull
public Observable<LeisureUpdate> subscribeToLeisuresUpdates() {
    if (leisureUpdatesObservable == null) {
        leisureUpdatesObservable = Observable.create(new Observable.OnSubscribe<LeisureUpdate>() {

            @Override
            public void call(final Subscriber<? super LeisureUpdate> subscriber) {
                leisureUpdatesListener = firebase.child(FirebaseStructure.LEISURES).addChildEventListener(new ChildEventListener() {
                    @Override
                    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                        final Leisure leisure = convertMapToLeisure((Map<String, Object>) dataSnapshot.getValue());
                        subscriber.onNext(new LeisureUpdate(leisure, LeisureUpdate.ADDED));
                    }

                    @Override
                    public void onChildChanged(DataSnapshot dataSnapshot, String s) {
                        final Leisure leisure …
Run Code Online (Sandbox Code Playgroud)

android firebase rx-java

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

使用Jack编译器时出错 - app/build/intermediates/packaged/debug/classes.zip'是一个无效的库

我在使用Jack编译器时遇到这些错误,但我不明白是什么问题:

Error:Library reading phase: file '/Users/daniele.vitali/Development/android-studio/INTROCKAND/app/build/intermediates/packaged/debug/classes.zip' is an invalid library
com.android.jack.api.v01.CompilationException: Library reading phase: file '/Users/daniele.vitali/Development/android-studio/INTROCKAND/app/build/intermediates/packaged/debug/classes.zip' is an invalid library
    at com.android.jack.api.v01.impl.Api01ConfigImpl$Api01CompilationTaskImpl.run(Api01ConfigImpl.java:113)
    at com.android.builder.core.AndroidBuilder.convertByteCodeUsingJackApis(AndroidBuilder.java:1821)
    at com.android.builder.core.AndroidBuilder.convertByteCodeUsingJack(AndroidBuilder.java:1694)
    at com.android.build.gradle.internal.transforms.JackTransform.runJack(JackTransform.java:222)
    at com.android.build.gradle.internal.transforms.JackTransform.transform(JackTransform.java:196)
    at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:174)
    at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:170)
    at com.android.builder.profile.ThreadRecorder$1.record(ThreadRecorder.java:55)
    at com.android.builder.profile.ThreadRecorder$1.record(ThreadRecorder.java:47)
    at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:169)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.doExecute(AnnotationProcessingTaskFactory.java:244)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:220)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.execute(AnnotationProcessingTaskFactory.java:231)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:209)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
    at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at …
Run Code Online (Sandbox Code Playgroud)

android android-jack-and-jill

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

在按钮视图中删除文本填充

我想在Button视图中删除文本周围的填充.第一个截图是我将实现的结果,第二个截图是最先进的.

在此输入图像描述

在此输入图像描述

当然,我已经定义了一个自定义drawable来获得按钮外观.但即使我将padding属性设置为0dp,结果也不会改变.

请问有什么建议吗?

编辑 这是按钮的xml代码

<Button
        android:id="@+id/btnCancel"
        style="@style/dark_header_button"
        android:layout_width="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_height="wrap_content"
        android:includeFontPadding="false"
        android:padding="0dp"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:text="@android:string/cancel" />
Run Code Online (Sandbox Code Playgroud)

这是样式xml文件:

<style name="dark_header_button">
    <item name="android:background">@drawable/bkg_dark_header_button</item>
    <item name="android:shadowDy">-1</item>
    <item name="android:shadowColor">#000000</item>
    <item name="android:shadowRadius">1</item>
    <item name="android:textSize">14sp</item>
    <item name="android:textColor">#ffffff</item>
</style>
Run Code Online (Sandbox Code Playgroud)

这是可绘制的xml文件:

<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:state_pressed="true">
    <shape>

        <corners android:radius="10dp" />

        <gradient 
            android:angle="90" 
            android:endColor="#060606"
            android:startColor="#707070"
            android:type="linear" />

    </shape>
</item>
<item>
    <shape>

        <corners android:radius="10dp" />

        <gradient 
            android:angle="90" 
            android:endColor="#707070" 
            android:startColor="#060606" 
            android:type="linear" />

        <stroke 
            android:width="0.5dp" 
            android:color="#2b2b2b" />

    </shape>
</item>


</selector>
Run Code Online (Sandbox Code Playgroud)

android android-button

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

在外部存储上创建新文件时权限被拒绝

我需要将文件从资产复制到外部存储.这是我的代码:

    File f = new File(Environment.getExternalStorageDirectory() + File.separator
            + "MyApp" + File.separator + "tessdata" + File.separator + "eng.traineddata");
    if (!f.exists()) {
    AssetManager assetManager = getAssets();
    try {
        f.createNewFile();
        InputStream in = assetManager.open("eng.traineddata");
        OutputStream out = new FileOutputStream(Environment.getExternalStorageDirectory() + File.separator
            + "MyApp" + File.separator  + "tessdata" + File.separator + "eng.traineddata");
        byte[] buffer = new byte[1024];
        int read;
            while ((read = in.read(buffer)) != -1)
                    out.write(buffer, 0, read);
            in.close();
            in = null;
            out.flush();
            out.close();
            out = null;
        } catch (IOException e) {
            Log.e("tag", …
Run Code Online (Sandbox Code Playgroud)

file-io android

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

隐藏GridLayout中的行

我在一个包含3列和2行的xml文件中创建了一个GridLayout.如何通过代码隐藏第二行?

我尝试为该行中的视图设置可见性,但第一列似乎尽可能地扩展.

    <GridLayout
                    android:id="@+id/lytInfo"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:alignmentMode="alignBounds"
                    android:columnCount="3"
                    android:columnOrderPreserved="false"
                    android:paddingTop="@dimen/padding.verySmall" >

                <TextView android:id="@+id/tvNameLabel"
                    android:ellipsize="end"
                    android:maxLines="1"
                    android:singleLine="true"
                    android:text="@string/name"
                    android:textColor="@color/black"
                    android:textSize="@dimen/text.normal" />

                <Space android:layout_width="@dimen/padding.veryVerySmall" android:id="@+id/tvNameSpace"/>

                <TextView
                    android:id="@+id/tvName"
                    android:ellipsize="end"
                    android:maxLines="1"
                    android:singleLine="true"
                    android:textColor="@color/darkRed"
                    android:textSize="@dimen/text.normal"
                    android:textStyle="bold" />

                <TextView
                    android:ellipsize="end"
                    android:maxLines="1"
                    android:singleLine="true"
                    android:text="@string/pwd"
                    android:textColor="@color/black"
                    android:textSize="@dimen/text.normal" />

                <Space android:layout_width="@dimen/padding.veryVerySmall" />

                <TextView
                    android:id="@+id/tvPwd"
                    android:ellipsize="end"
                    android:maxLines="1"
                    android:singleLine="true"
                    android:textColor="@color/darkRed"
                    android:textSize="@dimen/text.normal"
                    android:textStyle="bold" />


            </GridLayout>
Run Code Online (Sandbox Code Playgroud)

这是我隐藏视图的时候:

f(knownName)
{
    viewRoot.findViewById(R.id.tvName).setVisibility(View.GONE);
    viewRoot.findViewById(R.id.tvNameSpace).setVisibility(View.GONE);
    viewRoot.findViewById(R.id.tvNameLabel).setVisibility(View.GONE);
    break;
}
Run Code Online (Sandbox Code Playgroud)

android grid-layout

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

Android Studio无法识别Espresso导入

我正在尝试使用Espresso编写测试用例.

我使用的是Android Studio 1.5.1(稳定频道),Gradle插件1.5,Gradle 2.7.问题是Android Studio无法识别任何与Espresso相关的导入(并且不仅仅是)在此输入图像描述

所以,我试图清理项目,重建,使缓存无效并重新启动,但没有.

我在我的app模块中添加了这些依赖项:

androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'
androidTestCompile 'com.android.support:support-annotations:23.1.1'
androidTestCompile 'com.android.support.test:runner:0.4.1'
androidTestCompile 'com.android.support.test:rules:0.4.1'
Run Code Online (Sandbox Code Playgroud)

我在defaultConfig中添加了runner:

testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
Run Code Online (Sandbox Code Playgroud)

我在androidTest文件夹下创建了测试套件类:

在此输入图像描述

我做错了什么?

UPDATE

这是我的build.gradle的(部分):

apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'

android {
    compileSdkVersion 23
    buildToolsVersion '23.0.2'

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 5
        versionName '1.4'

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    buildTypes {
        //my build type configs
    }

    packagingOptions {
        exclude 'META-INF/services/javax.annotation.processing.Processor'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/NOTICE.txt'
    }

    lintOptions {
        disable 'InvalidPackage'
    } …
Run Code Online (Sandbox Code Playgroud)

android android-espresso

7
推荐指数
3
解决办法
3047
查看次数