小编mas*_*hin的帖子

如何使用Android DataBinding库保持用户对屏幕方向的输入变化?

我正处于新Android项目的最开始阶段.在我上一个项目中使用MVP之后,我想这次使用Data Binding实现MVVM.

当涉及到屏幕方向更改等配置更改时,我无法正确理解DataBinding.

那里的所有DataBinding示例(我在寻找"android mvvm数据绑定"时找到的所有)都有同样的问题:当我在EditText中输入内容并旋转屏幕时,EditText之后是空的.

一旦我的布局中出现类似下面的内容,我就无法获得视图(本例中为EditText)以在屏幕旋转更改后恢复其状态.

<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable
            name="vm"
            type="com.example.app.TestViewModel" />
    </data>

    <EditText android:id="@+id/question"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@={vm.question}" 
        android:hint="Question" />

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

我想这是因为每次都在活动onCreate方法中分配一个新的视图模型实例.

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ActivityTestBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_test);
    binding.setVm(new TestViewModel());
}
Run Code Online (Sandbox Code Playgroud)

你是如何正确处理的?

我无法开发具有多种形式的应用程序,这些形式会在屏幕方向上忘记所有用户输入

android android-layout android-databinding

5
推荐指数
2
解决办法
2757
查看次数

为什么在没有网络连接的情况下改造客户端会崩溃?

在我的 Android 应用程序中,我使用 Retrofit 2.2 和 RxJava 2 进行网络调用。当设备连接到网络时一切正常。当我禁用移动和 WiFi 网络时,应用程序崩溃。奇怪的是,我可以正确处理错误,但应用程序还是崩溃了。

这是Retrofit的API接口:

public interface BackendApi {

 @GET("v1/users/{uuid}")
 Observable<User> getUser(@Path("uuid") String userUuid);

}
Run Code Online (Sandbox Code Playgroud)

以下方法返回一个将在我的视图模型中订阅的 Observable。

@Override
public Observable<User> getUser(@NonNull final UUID id) {
    return api.getUser(id.toString()).map(user -> mapUser(user));
}
Run Code Online (Sandbox Code Playgroud)

在视图模型中,我订阅了 Observable:

compositeDisposable.add(userService.getUser(userId)
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::onGetUser, this::onGetUserError));
Run Code Online (Sandbox Code Playgroud)

下面几行显示了错误处理方法

 private void onGetUserError(final Throwable throwable) {
    log.error("onGetUserError, getting user failed because of {}", 
 throwable.getCause());
    if (isViewAttached()) {
        getView().showUserLoginOrRegisterError();
    }
 }
Run Code Online (Sandbox Code Playgroud)

问题是,当我断开设备与移动和 WiFi 连接的连接时, onGetUserError() 方法会被正确调用,但无论如何,存在未处理的异常导致我的应用程序崩溃。

这是完整的堆栈跟踪:

https://gist.github.com/anonymous/859ab3811a3ca5c63998a40b877c41bb

我不知道如何摆脱这些崩溃!

问候马丁

----------更新 03.04.2017--------- 还有另一个谜团...在 Samsung Galaxy (S5) …

java crash android retrofit2 rx-java2

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