我正在使用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",具体取决于请求是否已从移动平台完成.但是,我想根据"类型"值删除"元素"字段.我该怎么办?
提前致谢
我已经开发了一个使用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) 创建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
我需要从具有两个不同模型的两个不同屏幕开始一个活动,但是,两个模型都有一些共享信息,这是我在新活动中需要的信息.问题是我无法使这些模型从同一父模型扩展,因为其中一个模型已经扩展了一个父模型.我曾考虑创建一个包含共享方法的接口,但是,如果我这样做,那么如何将该接口放入启动下一个活动所需的包中?
我添加了一些简化的代码以澄清我的情况:
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放在一个包中.我怎么能这样做?
提前致谢.
我们想在我们正在开发的应用程序中使用Room,但我们需要加密数据库.我知道有一个SQLCipher来加密一个SQL数据库(虽然我从来没有使用它),但我认为它不支持API级别16和更高的方法,所以我认为Room不受支持.另一方面,有支持加密的Realm,但我真的想用Room代替.那我们怎么加密数据库呢?
非常感谢
我有一个重用视图的循环器视图,我的问题是一个视图包含ViewPager,如果recyclelerview的适配器重用视图所在的视图,那么viewpager会发生异常.但是,onCreateViewHolder方法仅在第一次调用时才会被调用.我怎么能避免这种行为并实现onCreateViewHolder可以被多次调用?
提前致谢
android android-adapter android-viewpager android-recyclerview
我们在Android应用程序中添加了crashlytics,我们正在使用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
我怎么能在android中知道是使用公制还是帝国?我没有在Locale中看到任何选项,我唯一想到的是使用locale.getCountry(); 方法并检查该国家是否是英国,美国......但是,有没有一种机器人知道它的方法?
提前致谢!
我正在开发一个带有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) 我正在使用 Django Rest Framework 开发一个 API,我需要一些带有一些字段的模型,这些字段应该支持多种语言的翻译,然后,当然,序列化器应该必须使用预期的语言检索字段。我考虑过两种选择:向模型添加额外的字段(一个语言字段)或使用每种语言的所有文本创建另一个模型。另一方面,我看到有一些库(例如 django-modeltranslation)旨在解决该问题,但是,我想了解一些关于它们的意见。你怎么认为?你会向我推荐什么?
非常感谢
django translation django-models django-rest-framework django-modeltranslation
android ×8
mocking ×2
android-room ×1
crashlytics ×1
django ×1
interface ×1
mockito ×1
mvp ×1
proguard ×1
retrofit2 ×1
rx-java ×1
singleton ×1
sql ×1
sqlcipher ×1
translation ×1