小编FVo*_*Vod的帖子

如何从序列化程序输出中动态删除字段

我正在使用Django Rest框架开发API,我想动态删除序列化程序中的字段.问题是我需要根据另一个字段的值删除它们.我怎么能这样做?我有一个序列化器,如:

class DynamicSerliazer(serializers.ModelSerializer):
    type = serializers.SerializerMethodField()
    url = serializers.SerializerMethodField()
    title = serializers.SerializerMethodField()
    elements = serializers.SerializerMethodField()

    def __init__(self, *args, **kwargs):
        super(DynamicSerliazer, self).__init__(*args, **kwargs)
        if self.fields and is_mobile_platform(self.context.get('request', None)) and "url" in self.fields:
            self.fields.pop("url")
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我已经删除了字段"url",具体取决于请求是否已从移动平台完成.但是,我想根据"类型"值删除"元素"字段.我该怎么办?

提前致谢

django-serializer django-rest-framework

18
推荐指数
2
解决办法
8152
查看次数

单元测试android应用程序与改造和rxjava

我已经开发了一个使用rxJava改造的Android应用程序,现在我正在尝试使用Mockito设置单元测试,但我不知道如何模拟api响应以创建不做真正的测试电话但有假响应.

例如,我想测试方法syncGenres对我的SplashPresenter工作正常.我的课程如下:

public class SplashPresenterImpl implements SplashPresenter {

private SplashView splashView;

public SplashPresenterImpl(SplashView splashView) {
    this.splashView = splashView;
}

@Override
public void syncGenres() {
    Api.syncGenres(new Subscriber<List<Genre>>() {
        @Override
        public void onError(Throwable e) {
            if(splashView != null) {
                splashView.onError();
            }
        }

        @Override
        public void onNext(List<Genre> genres) {
            SharedPreferencesUtils.setGenres(genres);
            if(splashView != null) {
                splashView.navigateToHome();
            }
        }
    });
}
}
Run Code Online (Sandbox Code Playgroud)

Api类就像:

public class Api {
    ...
    public static Subscription syncGenres(Subscriber<List<Genre>> apiSubscriber) {
        final Observable<List<Genre>> call = ApiClient.getService().syncGenres();
        return call
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(apiSubscriber);
    } …
Run Code Online (Sandbox Code Playgroud)

android mocking mockito rx-java retrofit2

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

在Android中将服务用作单身人士

创建Service一个单独的工具是不好的做法?我的意思是一个Service永远不会停止,并包含一些其他引擎和Activities将使用的私人数据,所以Service可能有类似的东西:

public class CustomService extends Service {
    private List<Profile> mProfiles;
    private static CustomService instance;

     public static CustomService getInstance() {
         if(instance == null) {
             instance = new CustomService();
         }
         return instance;
     }

     public List<Profile> getProfiles() {
          return mProfiles;
     }

     @Override
     public int onStartCommand(Intent intent, int flags, int startId) {
         ...
     }
     ...
}
Run Code Online (Sandbox Code Playgroud)

做一个Service而不仅仅是一个单例的原因是它必须独立于应用程序工作,因为它在启动时连接一个永远不应该关闭且不依赖于应用程序的websocket.你建议我做什么?有没有更好的方法来重新使用Service,以便mProfiles从其他引擎获得一些数据(例如数组)Activities

我读过Service一个单独的工作,但我不知道如何从应用程序的任何其他点访问私有变量.

singleton android design-patterns android-service android-lifecycle

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

将接口放在bundle中以启动新活动

我需要从具有两个不同模型的两个不同屏幕开始一个活动,但是,两个模型都有一些共享信息,这是我在新活动中需要的信息.问题是我无法使这些模型从同一父模型扩展,因为其中一个模型已经扩展了一个父模型.我曾考虑创建一个包含共享方法的接口,但是,如果我这样做,那么如何将该接口放入启动下一个活动所需的包中?

我添加了一些简化的代码以澄清我的情况:

public class A extends Model implements CustomInterface {
    String name;
    String address;

    public String getName(){
        return name;
    }

    public String getAddress() {
        return address;
    }
}

public class B implements CustomInterface {
    String name;

    public String getName() {
        return name;
    }
}

public interface CustomInterface {
    String getName();
}
Run Code Online (Sandbox Code Playgroud)

我的问题是我需要使用包含两个模型之间共享信息的包来启动活动.所以,我想把CustomInterface放在一个包中.我怎么能这样做?

提前致谢.

android interface android-activity android-bundle

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

使用Room时如何加密数据库?

我们想在我们正在开发的应用程序中使用Room,但我们需要加密数据库.我知道有一个SQLCipher来加密一个SQL数据库(虽然我从来没有使用它),但我认为它不支持API级别16和更高的方法,所以我认为Room不受支持.另一方面,有支持加密的Realm,但我真的想用Room代替.那我们怎么加密数据库呢?

非常感谢

sql android sqlcipher android-room

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

不要在RecyclerView中回收特定的视图类型

我有一个重用视图的循环器视图,我的问题是一个视图包含ViewPager,如果recyclelerview的适配器重用视图所在的视图,那么viewpager会发生异常.但是,onCreateViewHolder方法仅在第一次调用时才会被调用.我怎么能避免这种行为并实现onCreateViewHolder可以被多次调用?

提前致谢

android android-adapter android-viewpager android-recyclerview

7
推荐指数
1
解决办法
3680
查看次数

与Crashlytics的Proguard

我们在Android应用程序中添加了,我们正在使用proguard.因此,正如crashlytics文档所述,我们在proguard配置文件中添加了以下代码:

-keep class com.crashlytics.** { *; }
-keep class com.crashlytics.android.**
-keepattributes SourceFile,LineNumberTable *Annotation*
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我们签署APK时,我们收到以下错误:

java.io.IOException: proguard.ParseException: Unknown option '*Annotation*' 
Run Code Online (Sandbox Code Playgroud)

我们做错了什么?

提前致谢

android proguard crashlytics android-proguard crashlytics-android

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

如何知道是否使用公制或英制

我怎么能在android中知道是使用公制还是帝国?我没有在Locale中看到任何选项,我唯一想到的是使用locale.getCountry(); 方法并检查该国家是否是英国,美国......但是,有没有一种机器人知道它的方法?

提前致谢!

android units-of-measurement

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

乐器测试MVP视图

我正在开发一个带有MVP架构的Android应用程序,我已经能够测试Presenter和Model类,但现在我正在尝试测试View方法.例如,我有以下观点:

public interface SplashView extends BaseMVPView {

    void initPresenter();

    void navigateToHome();

    void onError(ApiError apiError);
}
Run Code Online (Sandbox Code Playgroud)

这是由一个活动实现的.

public class SplashActivity extends BaseActivity implements SplashView {

    // MVP Presenter
    private SplashPresenter splashPresenter;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        initPresenter();
    }

    @Override
    public int getLayoutId() {
        return R.layout.activity_splash;
    }

    @Override
    public void destroy() {
        if(splashPresenter != null) {
            splashPresenter.onDestroy();
            splashPresenter = null;
        }
    }

    @Override
    public void initPresenter() {
        if(splashPresenter == null) {
            splashPresenter = new SplashPresenterImpl(this, ApiClient.getService());
            sync();
        }
    } …
Run Code Online (Sandbox Code Playgroud)

mvp android mocking android-testing android-espresso

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

Django Rest Framework 中的模型翻译

我正在使用 Django Rest Framework 开发一个 API,我需要一些带有一些字段的模型,这些字段应该支持多种语言的翻译,然后,当然,序列化器应该必须使用预期的语言检索字段。我考虑过两种选择:向模型添加额外的字段(一个语言字段)或使用每种语言的所有文本创建另一个模型。另一方面,我看到有一些库(例如 django-modeltranslation)旨在解决该问题,但是,我想了解一些关于它们的意见。你怎么认为?你会向我推荐什么?

非常感谢

django translation django-models django-rest-framework django-modeltranslation

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