我有 Mongo 用户集合和地址集合。每个地址都由一个用户拥有。这是我的架构类:
export type UserDocument = User & mongoose.Document
@Schema({ timestamps: true })
export class User {
// @Prop({ type: mongoose.Types.ObjectId })
_id: string
@Prop({ required: true })
name: string
@Prop({ required: true, unique: true })
email: string
@Prop({ select: false })
password: string
}
export const UserSchema = SchemaFactory.createForClass(User)
export type AddressDocument = Address & Document
@Schema({ timestamps: true })
export class Address {
@Prop({ type: mongoose.Schema.Types.ObjectId, ref: User.name })
user: User
@Prop()
line1: string
@Prop()
line2?: string …Run Code Online (Sandbox Code Playgroud) 在javascript中如果我想循环遍历字典并设置另一个字典的属性,我会使用这样的东西:
for (let key in dict) {
if (obj.hasOwnProperty(key)) {
obj[key] = dict[key];
}
}
Run Code Online (Sandbox Code Playgroud)
如果obj是Typescript对象(类的实例),有没有办法执行相同的操作?
升级Android Studio后,一个没有问题的项目开始在编辑器中显示问题.我有很多Unresolved Reference错误.支持库下的任何内容(support-v4,support-v7).
在上面的屏幕截图中,任何显示为红色的内容都不会解析并显示为错误.我也在使用Lifecycle组件和Room数据库.他们似乎也有问题.看起来可以找到接口,但类不能.
例如,在我的一个班级中使用Room,
android.arch.persistence.room.Database并android.arch.persistence.room.TypeConverters正确解决,但是
android.arch.persistence.room.Room并且android.arch.persistence.room.RoomDatabase不.
注意:该项目在Android模拟器和设备上构建并运行良好,没有任何问题.它使用Android Studio上的构建按钮构建和运行,没有任何错误.我没有收到任何Class not found错误.这只是Android Studio编辑器中的一个问题.我已经重新启动了Android Studio,清理并重建了项目.
这是我的项目构建文件:
buildscript {
ext.kotlin_version = '1.2.70'
ext.serialization_version = '0.6.2'
ext.gradle_plugin_version = '3.2.0'
repositories {
google()
jcenter()
maven { url "https://jitpack.io" }
maven { url "https://kotlin.bintray.com/kotlinx" }
}
dependencies {
classpath "com.android.tools.build:gradle:3.2.1"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jetbrains.kotlinx:kotlinx-gradle-serialization-plugin:$serialization_version"
}
}
allprojects {
repositories {
google()
jcenter()
maven { url 'https://jitpack.io' }
maven { url "https://kotlin.bintray.com/kotlinx" }
}
}
task clean(type: …Run Code Online (Sandbox Code Playgroud) 我在我的应用程序中遇到问题,其中EditTexts上的错误弹出显示但文本不可见.它看起来像这样:
EditText我的应用程序中的所有s都会发生这种情况.这是一个布局XML的示例
布局:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/gradient"
android:fitsSystemWindows="true"
tools:context=".ui.onboarding.profile.OnboardingUserProfileActivity">
<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="fitXY"
app:srcCompat="@drawable/shapes_background" />
<ProgressBar
android:id="@+id/login_progress"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:visibility="gone" />
<ScrollView
android:id="@+id/form"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginBottom="20dp">
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="80dp"
android:orientation="vertical">
<android.support.constraint.ConstraintLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="40dp"
android:layout_marginBottom="20dp">
<ImageView
android:id="@+id/profileImageView"
android:layout_width="160dp"
android:layout_height="160dp"
android:scaleType="fitXY"
android:src="@drawable/user_profile_placeholder"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<android.support.design.widget.FloatingActionButton
android:id="@+id/cameraImageButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:srcCompat="@android:drawable/ic_menu_camera" />
</android.support.constraint.ConstraintLayout>
<android.support.design.widget.TextInputLayout
android:id="@+id/firstnameTvLayout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginBottom="20dp"
android:layout_weight="0.33"
android:textColorHint="@color/colorVeryLightGray"
android:theme="@style/AppTheme.WhiteColorAccent" …Run Code Online (Sandbox Code Playgroud) android android-layout kotlin android-textinputlayout android-textinputedittext
我正在从Eclipse迁移到android studio,这是我在eclipse中的设置:我有几个Android应用程序项目,这取决于一个工作区内的几个库项目(一些共享).在Android工作室中,我首先开始为每个应用程序创建一个项目,但很快意识到我必须将库项目作为每个项目中使用它们的模块.这意味着复制库项目并将它们包含在每个应用程序中,这是高度冗余的,并且需要维护库的多个副本.
所以我切换到将所有应用程序和库作为同一项目中的模块.这适用于构建,但会产生其他问题,例如版本控制问题,因为每个模块都位于单独的版本控制存储库中.
这种设置最简洁的方法是什么?真正的问题是,我可以在AS中拥有共享相同外部库项目的单独项目吗?
我正在编写一个警报(kinda)应用程序,它使用带有RTC_WAKEUP标志的AlarmManager注册广播意图,以便在指定时间关闭.作品...
当接收到广播时,接收器使用STREAM_ALARM流启动与MediaPlayer播放铃声的活动,并执行其他一些操作.一切正常,但如果在屏幕关闭时收到广播,则活动会正确启动,但铃声不会播放.工作正常并在屏幕打开和解锁时收到铃声.
编辑在播放铃声的活动中添加代码.
public void onCreate(Bundle bundle) {
super.onCreate(bundle)
...
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
ringtonePlayer = new MediaPlayer();
...
playRingtone();
}
private void playRingtone() throws IllegalArgumentException, SecurityException, IllegalStateException, IOException {
ringtonePlayer.setDataSource(prefs.getString(getRingTone(), RingtoneManager.getActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE).toString()));
ringtonePlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
ringtonePlayer.setWakeMode(this, PowerManager.PARTIAL_WAKE_LOCK);
ringtonePlayer.setLooping(true);
ringtonePlayer.prepare();
ringtonePlayer.start();
Log.i(LOG_TAG, "Ringtone started");
}
Run Code Online (Sandbox Code Playgroud) 我在使用Angular2路线时遇到了麻烦.我有几个级别的嵌套.这是我的设置:我为未经身份验证的用户提供了最高级别的路由.登录后,他们就在/my路线下.在那个级别上,他们有一个仪表板,可以将它们带到/my/projects/关卡.路由下projects需要id.设置细节如下.这是最高级别AppComponent:
@RouteConfig([
{path: '/home', name:'Home', component: HomeComponent, useAsDefault: true},
{path: '/login', name: 'Login', component: LoginComponent},
{path: '/signup', name: 'SignUp', component:SignUpComponent},
{path: '/my/...', name: 'MyApp', component: MyAppComponent}
])
export class AppComponent {
constructor(private router: Router) {
}
Run Code Online (Sandbox Code Playgroud)
经过身份验证后,用户将转到MyAppComponent,其设置如下:
@RouteConfig([
{path:'/dashboard', name: 'MyDashboard', component: DashboardComponent, useAsDefault: true},
{path: '/projects/...', name: 'MyProjects', component: ProjectRootComponent},
])
export class MyAppComponent {
constructor(private router: Router) {
}
}
Run Code Online (Sandbox Code Playgroud)
DashboardComponent:
export class DashboardComponent {
public projects: Array<Project>;
public loaded: …Run Code Online (Sandbox Code Playgroud) 我最近将我的angular2应用程序从RC路由器切换到v3路由器.我收到了错误
TypeError: Cannot read property 'split' of undefined
at match`.
Run Code Online (Sandbox Code Playgroud)
在路由器上启用跟踪以获取调试输出后,看起来错误的来源来自路由器:
NavigationError {id: 2, url: "/my/workspace/1252407935628215305/projects", error: TypeError: Cannot read property 'split' of undefined
at match - common_router_providers.js:28 NavigationError {id: 2, url: "/my/workspace/1252407935628215305/projects", error: TypeError: Cannot read property 'split' of undefined
at match (http://localhost:8080/vendor.6a9d…}error: TypeError: Cannot read property 'split' of undefined
at match (http://localhost:8080/vendor.6a9dd9122cbbc98aa93a.js:74100:22)
at matchPathsWithParamsAgainstRoute (http://localhost:8080/vendor.6a9dd9122cbbc98aa93a.js:74073:19)
at expandPathsWithParamsAgainstRoute (http://localhost:8080/vendor.6a9dd9122cbbc98aa93a.js:74038:17)
at expandPathsWithParams (http://localhost:8080/vendor.6a9dd9122cbbc98aa93a.js:74020:21)
at matchPathsWithParamsAgainstRoute (http://localhost:8080/vendor.6a9dd9122cbbc98aa93a.js:74085:23)
at expandPathsWithParamsAgainstRoute (http://localhost:8080/vendor.6a9dd9122cbbc98aa93a.js:74038:17)
at expandPathsWithParams (http://localhost:8080/vendor.6a9dd9122cbbc98aa93a.js:74020:21)
at expandSegment (http://localhost:8080/vendor.6a9dd9122cbbc98aa93a.js:74010:17)
at http://localhost:8080/vendor.6a9dd9122cbbc98aa93a.js:74014:84
at http://localhost:8080/vendor.6a9dd9122cbbc98aa93a.js:74367:41message: "Cannot …Run Code Online (Sandbox Code Playgroud) 我有一个活动,每次用户输入更改时我都会向其发出网络请求.
api定义如下:
interface Api {
@GET("/accounts/check")
fun checkUsername(@Query("username") username: String): Observable<UsernameResponse>
}
Run Code Online (Sandbox Code Playgroud)
然后是管理它的服务:
class ApiService {
var api: Api
init {
api = retrofit.create(Api::class.java)
}
companion object {
val baseUrl: String = "https://someapihost"
var rxAdapter: RxJava2CallAdapterFactory = RxJava2CallAdapterFactory.create()
val retrofit: Retrofit = Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(rxAdapter)
.build()
}
fun checkUsername(username: String): Observable<UsernameResponse> {
return api.checkUsername(username)
}
}
Run Code Online (Sandbox Code Playgroud)
然后在我的活动中,每当EditText内容发生变化时,我都会进行此调用:
private fun checkUsername(username: String) {
cancelSubscription()
checkUsernameDisposable = ApiService()
.checkUsername(username)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
updateUi(it)
}
}
Run Code Online (Sandbox Code Playgroud)
因此,每次输入变化时,这都会创建一个新的一次性用品.这显然是不正确的.我想要做的是使用新网络调用的结果更新现有订阅.