Java 安卓don';t启动默认活动(MainActivity)

Java 安卓don';t启动默认活动(MainActivity),java,android,android-studio,Java,Android,Android Studio,我有一个非常简单的小部件应用程序,只有一个活动(MainActivity)。 在一开始,我已经从BlankActivity模板创建了MainActivity。稍后我用组件填充了它,并将其添加到AndroidManifest中 问题在于Android没有启动该活动(唯一一个) 当应用程序启动时,我看到的是白色的空白视图(带有带有应用程序名称的顶栏) 我设置了一个断点,但在调试过程中没有找到它 我已尝试将默认类别设置为MainActivity,但未设置: <category android:n

我有一个非常简单的小部件应用程序,只有一个活动(MainActivity)。 在一开始,我已经从BlankActivity模板创建了MainActivity。稍后我用组件填充了它,并将其添加到AndroidManifest中

问题在于Android没有启动该活动(唯一一个)

当应用程序启动时,我看到的是白色的空白视图(带有带有应用程序名称的顶栏)

我设置了一个断点,但在调试过程中没有找到它

我已尝试将默认类别设置为MainActivity,但未设置:

<category android:name="android.intent.category.DEFAULT"/>
我确信我的主要活动在查看包中

  • 我尝试从emulator卸载应用程序,然后再次安装应用程序,但并没有帮助
  • 我已尝试将应用程序安装到另一个模拟器-未成功
  • 我已尝试将应用程序安装到手机-未成功
  • 我试图清理和重建我的项目-没有成功
  • 我已尝试在AndroidStudio运行配置中设置DefaultActivity-未成功
  • 我已尝试在运行配置中设置指定的活动(MainActivity)-未成功
AndroidManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="pl.test.firstwidget"
    android:versionCode="1"
    android:versionName="1.0">

  <uses-permission android:name="android.permission.INTERNET"/>

  <application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

    <activity
        android:name=".view.MainActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>

    <receiver android:name=".view.MyWidgetProvider" >
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        </intent-filter>
        <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_info" />
    </receiver>

  </application>

</manifest>
格雷德尔先生

apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId 'pl.test.firstwidget'
        minSdkVersion 15
        targetSdkVersion 25
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors {
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })

    compile 'com.google.code.gson:gson:2.8.0'
    compile 'com.squareup.retrofit2:retrofit:2.3.0'
    compile 'com.squareup.retrofit2:converter-gson:2.3.0'
    compile 'com.squareup.okhttp3:logging-interceptor:3.8.0'

    compile group: 'joda-time', name: 'joda-time', version: '2.9.9'

    compile 'com.jakewharton:butterknife:8.6.0'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

    compile 'com.android.support:appcompat-v7:25.3.1'
    testCompile 'junit:junit:4.12'
}

有人看到我做错了什么吗?

您需要重写
public void onCreate(Bundle savedInstanceState)
而不是api 21+在重新启动时保持活动状态的方法

注意:与onCreate(android.os.Bundle)相同,但调用了 使用persistableMode属性设置为persistAcrossReboots创建的活动(在清单中,否则不会调用它,因此为空视图)

关于PersistableBundle

如果活动正在进行中 在之前关闭或断电后重新初始化,然后 此捆绑包包含它最近提供给的数据 onSaveInstanceState(捆绑)中的outPersistentState。注:否则 是空的

所以使用

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState, persistentState);
    setContentView(R.layout.activity_main);

    ButterKnife.bind(this);
    fillView();
}

您需要重写
public void onCreate(Bundle savedInstanceState)
而不是api 21+在重新启动时保持活动状态的方法

注意:与onCreate(android.os.Bundle)相同,但调用了 使用persistableMode属性设置为persistAcrossReboots创建的活动(在清单中,否则不会调用它,因此为空视图)

关于PersistableBundle

如果活动正在进行中 在之前关闭或断电后重新初始化,然后 此捆绑包包含它最近提供给的数据 onSaveInstanceState(捆绑)中的outPersistentState。注:否则 是空的

所以使用

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState, persistentState);
    setContentView(R.layout.activity_main);

    ButterKnife.bind(this);
    fillView();
}

看来没什么问题

  • 您不需要清单中的
    android.intent.category.DEFAULT
    ,只要
    android.intent.action.MAIN
    android.intent.category.LAUNCHER
    就可以了

  • 如果你现在正在开始Android开发,请删除对butterKnife的所有引用,暂时不要使用它;只是为了验证它是否运行

  • 按照Pavneet_Singh的回答更改您的
    onCreate
    方法,但不要使用超级方法,只需使用:


  • 看来没什么问题

  • 您不需要清单中的
    android.intent.category.DEFAULT
    ,只要
    android.intent.action.MAIN
    android.intent.category.LAUNCHER
    就可以了

  • 如果你现在正在开始Android开发,请删除对butterKnife的所有引用,暂时不要使用它;只是为了验证它是否运行

  • 按照Pavneet_Singh的回答更改您的
    onCreate
    方法,但不要使用超级方法,只需使用:


  • 你的意思是,它不是从Android Studio启动的,也不是当你点击主屏幕上的图标时启动的。@PedroVarela op说
    当应用程序启动时,我看到的是白色空白视图
    ,让我添加更多链接(现在就收集它们)和信息move butterknife哦,我的天啊…谢谢你!我已经从onCreate方法中删除了一个参数,这很有帮助!当你写它的时候,它看起来很简单。@mariachiandroid framework通常有不同的构造函数,仔细阅读它们,因为这样的事情会发生。你的意思是,它不是从Android Studio启动的,或者当你点击主屏幕上的图标时。@PedroVarela op说,
    我在应用程序启动时看到的是白色空白视图
    ,让我添加更多链接(现在就收集它们)和信息Move Butterknife哦,我的天哪……谢谢你!我已经从onCreate方法中删除了一个参数,这很有帮助!当你写它的时候,它看起来很简单。@mariachiandroid框架通常有不同的构造函数,仔细阅读它们,因为这样的事情会发生。Ad.1我尝试过——没有成功。公元2年。我没有开始,只是收到了一个奇怪的问题。。。黄油刀不影响问题。公元3年。帕夫尼特·辛格的小费帮了忙,谢谢!我试过了——没有成功。公元2年。我没有开始,只是收到了一个奇怪的问题。。。黄油刀不影响问题。公元3年。帕夫尼特·辛格的小费帮了忙,谢谢!
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState, persistentState);
        setContentView(R.layout.activity_main);
    
        ButterKnife.bind(this);
        fillView();
    }
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.id.activity_main);
        // ..code
    }