小编Yur*_*off的帖子

RxJava:如何将对象列表转换为另一个对象的List

我有SourceObjects列表,我需要将它转换为ResultObjects列表.

我可以使用ResultObject的方法将一个对象提取到另一个对象:

convertFromSource(srcObj);
Run Code Online (Sandbox Code Playgroud)

当然我可以这样做:

public void onNext(List<SourceObject> srcObjects) {
   List<ResultsObject> resObjects = new ArrayList<>();
   for (SourceObject srcObj : srcObjects) {
       resObjects.add(new ResultsObject().convertFromSource(srcObj));
   }
}
Run Code Online (Sandbox Code Playgroud)

但我会非常感谢能够使用rxJava展示如何做同样事情的人.

java android rx-java

54
推荐指数
4
解决办法
5万
查看次数

Retrofit - Multipart请求:必需的MultipartFile参数'file'不存在

我正在尝试使用Retrofit2在服务器上发送文件.我根据文档做了一切,但总是得到400服务器错误.

我试图这样做:

RequestBody body =
                RequestBody.create(MediaType.parse("image/png"), photo);
    //..........

    @Multipart
    @POST(ADD_PHOTO)
    Observable<HPSPhotoResponse>
    addPhoto(@Part("file") RequestBody file);
Run Code Online (Sandbox Code Playgroud)

......并且像这样:

MultipartBody.Part part = MultipartBody.Part.createFormData("file", "file", body);
     //...........

    @Multipart
    @POST(ADD_PHOTO)
    Observable<HPSPhotoResponse>
    addPhoto(@Part("file") MultipartBody.Part files);
Run Code Online (Sandbox Code Playgroud)

无所谓 结果始终相同"多部分请求:不存在所需的MultipartFile参数'文件'" - 服务器响应.

我认为服务器上的Spring工作不好,但是我在Swift(iOS)上做了相同的代码而且它有效!这里服务器看到这个'文件'部分.

Alamofire.upload(method, endpoint, headers: headers,
            multipartFormData: { multipartFormData in
                multipartFormData.appendBodyPart(fileURL: self.filePath!, name: "file")
            }
Run Code Online (Sandbox Code Playgroud)

现在我希望它可以在Android上使用Retrofit.但我甚至查看了Retrofit请求的日志,实际上我在日志中看不到任何"文件"文本.

这有什么问题?

android multipartform-data multipart retrofit retrofit2

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

Realm.io [Java] notifications - 如何仅在某些表中监听更改?

我在realm java文档中看到了这个示例代码.

public class MyActivity extends Activity {
    private Realm realm;
    // A reference to RealmChangeListener needs to be held to avoid being
    // removed by the garbage collector.
    private RealmChangeListener realmListener;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      realm = Realm.getDefaultInstance();
      reamlListener = new RealmChangeListener() {
        @Override
        public void onChange() {
            // ... do something with the updates (UI, etc.) ...
        }};
      realm.addChangeListener(realmListener);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // Remove the listener.
        realm.removeChangeListener(realmListener);
        // Close the realm …
Run Code Online (Sandbox Code Playgroud)

java database android realm

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

区分按"主页"按钮和打开另一个活动

我有三个活动: - SplashActivity - MainActivity - PlayerActivity

当然应用程序以SplashActivity开头,然后启动MainActivity并关闭.MainActivity在某个时刻启动了PlayerActivity并进入了Backstack.(MainActivity还活着但是在onStop上)然后我需要打开MainActivity并将PlayerActivity设置为后台(PlayerActivity是活着的但是在onStop上).然后我需要再次打开PlayerActivity并将MainActivity设置为background.

因此,当app将一个切换到另一个并返回时,PlayerActivity和MainActivity经常在没有onDestroy的情况下获得onPause()和onStop().

每次当用户按下"home"按钮时,我需要完成所有活动并启动SplashActivity应用程序,但主页按钮与活动之间的切换(onPause()和onStop())相同.所以我无法发现杀死活动的不同之处.

请帮忙.

编辑: 不幸的是,onUserLeaveHint没有帮助,它是一样的.如果User推送HOME,则调用:

onUserInteraction,onUserLeaveHint,onPause,onStop

此活动返回上一个活动(主),没有任何用户操作.

public class PlayerActivity扩展Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_next);

    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            startActivity(new Intent(PlayerActivity.this, MyActivity.class));
        }
    }, 5000);
}
Run Code Online (Sandbox Code Playgroud)

}

但仍然有相同的:

onUserInteraction,onUserLeaveHint,onPause,onStop

android activity-lifecycle android-lifecycle android-activity

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

Android应用程序+ Java模块(Java 1.8)

Android Project(gradle)有主要的应用程序模块: app - android应用程序(apply plugin:'com.android.application')和java-module: network - (apply plugin:'java')

java模块网络默认具有源代码兼容性1.8,因为lambda表达式,我真的想拥有它.

但默认情况下Android应用程序1.7我无法构建应用程序.当然我在我的app - android模块中使用了retrolambda ,但项目因为以下原因而无法编译:

Error:com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)

Error:Execution failed for task ':app:transformClassesWithDexForDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1
Run Code Online (Sandbox Code Playgroud)

如果我创建我的java模块,一切都编译好:

apply plugin: 'java'
sourceCompatibility = 1.7
targetCompatibility = 1.7
Run Code Online (Sandbox Code Playgroud)

但在这种情况下我不能使用lambda表达式,但我需要它.

我只看到下一个解决方案:

  1. 使网络模块不是java而是android-module并使用retrolambda(但是我要从这个模块中生成.jar而不是.aar所以它必须是java)

  2. 不要在我的java模块中使用lambda表达式(以后的.jar)(但我想使用它,因为rxJava中没有lambda的愚蠢代码太匹配了)

对我来说最好的解决方案就是在我的java模块中使用retrolambda.我试过做类似的事情,但retroambda依赖(apply plugin:'me.tatarka.retrolambda')在编译期间没有受到影响.或者也许使用java 1.7与retrolambda之类的东西.但gradle文件没有部分android {...}来设置compileOptions.

这该怎么做?

java lambda android gradle retrolambda

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

Lambda 表达式 - 不能将 lambda 参数设置为方法的参数

我正在尝试使用retrolambda在 Android 上使用 lambda 表达式。在下面的代码中,我需要添加作为接口的侦听器:

 public interface LoginUserInterface {

        void onLoginSuccess(LoginResponseEntity login);

        void onLoginFail(ServerResponse sr);
    }
Run Code Online (Sandbox Code Playgroud)

代码

 private void makeLoginRequest(LoginRequestEntity loginRequestEntity) {
        new LoginUserService(loginRequestEntity)
                .setListener(
                        login -> loginSuccess(login),
                        sr -> loginFail(sr))
                .execute();
    }

 private void loginSuccess(LoginResponseEntity login) {
         //TODO loginSuccess
    }

 private void loginFail(ServerResponse sr) {
        //TODO loginFail
    }
Run Code Online (Sandbox Code Playgroud)

但是 Android Studio 将红色loginSuccess( login )loginFail( sr )标记为错误并显示消息“无法应用 LoginResponseEntity ”和“无法应用 ServerResponse
所以我无法将 lambda 参数“ login ”设置为方法loginSuccess(登录)
请帮助我理解这个表达有什么问题。

java lambda android retrolambda

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