Android基础 - No Launcher activity found!

在尝试启动Android应用时遇到了'No Launcher activity found!'的错误,该错误表明在AndroidManifest.xml中未找到主启动活动。解决方案是在配置文件中正确指定启动活动。文章详细解释了问题的原因,并提供了修复建议,包括确保Activity名称与资源类R的包名匹配。

1.  No Launcher activity found!


今天启动Android App时, 出现以下错误:

[2013-06-02 22:55:50 - Demo1] No Launcher activity found!

[2013-06-02 22:55:50 - Demo1] The launch will only sync the application package on the device!


原因是: 在 AndroidManifest.xml没有加:

             <intent-filter>
                <category android:name="android.intent.category.LAUNCHER" />
                <action android:name="android.intent.action.MAIN" />
            </intent-filter>

所以启动器找不到要启动的Activity。

-----------------------------------------------------------------------------------

修改前的 AndroidManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.test.test"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="17" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity android:name="com.test.sudoku.Sudoku" >           
        </activity>
    </application>
</manifest>


修改后:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.test.test"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="17" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity android:name="com.test.sudoku.Sudoku" >
            <intent-filter>
                <category android:name="android.intent.category.LAUNCHER" />
                <action android:name="android.intent.action.MAIN" />
            </intent-filter>
        </activity>
    </application>
</manifest>




2.  AndroidManifest.xml 中 R 与Activity的  Package 


AndroidManifest.xml中指定资源文件类R所在的地方:

	<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    	    package="com.test.test"

与 Activity的name的前缀的关系:

	<activity android:name="com.test.sudoku.Sudoku" >

如果资源类 R 的package与 Activity的package 一样,那么,我们可以将Activity的name写成下面的样子;否则就必须将Activity的pack名加上,写成上面的样子

	<activity android:name=".Sudoku" >

参考网页:

http://stackoverflow.com/questions/14955993/no-launcher-activity-found



使用 QueryDSL 的 `Projections.bean` 方法时,返回字段为 `null` 是一种常见行为,尤其是在查询结果中某些字段没有匹配值的情况下。`Projections.bean` 用于将查询结果映射到一个 Java Bean 对象中,它会根据字段名称自动匹配属性,如果某个字段在查询结果中不存在或为 `null`,则对应的属性值也会被设置为 `null` [^1]。 为了避免这种情况,可以采取以下几种策略: 1. **使用默认值** 在目标 Java Bean 中,可以为字段提供默认值,以确保即使数据库中没有返回值,也不会出现 `null`。例如: ```java public class UserDto { private String name = "Unknown"; private Integer age = 0; // getters and setters } ``` 2. **使用 `coalesce` 方法** 在 QueryDSL 查询中,可以使用 `QExpressions` 或 `JPAExpressions` 提供的 `coalesce` 方法为字段提供默认值。例如: ```java QUser user = QUser.user; UserDto result = queryFactory.select(Projections.bean(UserDto.class, user.name.coalesce("Unknown").as("name"), user.age.coalesce(0).as("age") )).from(user).where(...).fetchOne(); ``` 3. **使用 `@Query` 注解定义自定义查询** 在 Spring Data JPA 中,可以通过 `@Query` 注解定义自定义查询,并在 JPQL 中指定默认值,从而避免 `null` 值的出现。例如: ```java @Repository public interface UserRepository extends JpaRepository<User, Long> { @Query("SELECT new com.example.UserDto(COALESCE(u.name, 'Unknown'), COALESCE(u.age, 0)) FROM User u WHERE u.id = ?1") UserDto findUserWithDefaultValues(Long id); } ``` 4. **使用 `Optional` 包装返回值** 如果希望更安全地处理可能为 `null` 的情况,可以考虑将返回值包装在 `Optional` 中,从而强制调用者处理 `null` 的情况。例如: ```java Optional<UserDto> result = Optional.ofNullable(queryFactory.select(Projections.bean(UserDto.class, user.name.as("name"), user.age.as("age") )).from(user).where(...).fetchOne()); ``` 5. **使用 `@Nullable` 和 `@NonNull` 注解** 在定义接口时,可以使用 `@Nullable` 和 `@NonNull` 注解来明确哪些字段可以为 `null`,哪些字段不能为 `null`。这有助于在编译时进行检查,避免运行时错误。例如: ```java @Nullable User findByEmailAddress(@Nullable EmailAddress emailAddress); ``` 通过上述方法,可以有效解决 QueryDSL 的 `Projections.bean` 方法返回字段为 `null` 的问题,确保查询结果的健壮性和可预测性。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值