我有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展示如何做同样事情的人.
我正在尝试使用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请求的日志,实际上我在日志中看不到任何"文件"文本.
这有什么问题?
我在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) 我有三个活动: - 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
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表达式,但我需要它.
我只看到下一个解决方案:
使网络模块不是java而是android-module并使用retrolambda(但是我要从这个模块中生成.jar而不是.aar所以它必须是java)
不要在我的java模块中使用lambda表达式(以后的.jar)(但我想使用它,因为rxJava中没有lambda的愚蠢代码太匹配了)
对我来说最好的解决方案就是在我的java模块中使用retrolambda.我试过做类似的事情,但retroambda依赖(apply plugin:'me.tatarka.retrolambda')在编译期间没有受到影响.或者也许使用java 1.7与retrolambda之类的东西.但gradle文件没有部分android {...}来设置compileOptions.
这该怎么做?
我正在尝试使用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(登录)。
请帮助我理解这个表达有什么问题。