Udacity Sunshine android应用程序 - MainActivity.java不一致 - SDK目标错误?

时间:2014-07-28 22:41:04

标签: java android gradle

我正在关注Udacity的Android编程课程并实施Sunshine应用程序。它非常好,实施有点寻宝!我已经被困住超过24小时了,并且已经尝试了所有的东西,所以希望得到一些帮助,以防我错过了一些明显的东西!

直到第4b课末期,一切都很顺利,是时候让ForecastFragment实现LoaderCallbacks了。一旦我添加了工具,我的MainActivity.java就停止了想要使用构造函数进行编译,而PredFragment被加下划线,错误是参数错误。首先是我试图实例化的类的声明(请注意,他们坚持使用v4支持库:)

// ...
import android.support.v4.app.Fragment;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.support.v4.widget.SimpleCursorAdapter;
// ...
public class ForecastFragment extends Fragment
        implements LoaderCallbacks<Cursor> {

无论如何,经过大量的咬牙切齿和研究之后,我发现生成的初始MainActivity.java与我应该拥有的不同。令人惊讶的是,直到现在它才没有区别!

以下是我 应该 的MainActivity.java:

package com.mydomain.sunshine;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.container, new ForecastFragment())
                    .commit();
        }
    }

这是我在创建项目时生成的 之一:

package com.mydomain.sunshine;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {

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

        if (savedInstanceState == null) {
            getFragmentManager().beginTransaction()
                    .add(R.id.container, new ForecastFragment())
                    .commit();
        }
    }
}

此时我的build.gradle也是:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 20
    buildToolsVersion "20.0.0"

    defaultConfig {
        applicationId "com.mydomain.sunshine"
        minSdkVersion 19
        targetSdkVersion 20
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:support-v4:19.+'
}

好的,所以为了解决这个编译错误,我确保我需要正确安装所有SDK的东西并将build.gradle更改为:

apply plugin: 'android'

android {
    compileSdkVersion 19
    buildToolsVersion "19.1.0"

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:19.1.0'
    compile 'com.android.support:support-v4:19.1.0'
}

使用正确的MainActivity.java编译并且项目构建良好并在我的模拟器中启动,但现在我在启动时遇到以下运行时异常:

    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mydomain.sunshine/com.mydomain.sunshine.MainActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
            at android.app.ActivityThread.access$800(ActivityThread.java:135)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5017)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
            at android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.java:108)
            at android.support.v7.app.ActionBarActivityDelegateICS.onCreate(ActionBarActivityDelegateICS.java:57)
            at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:98)
            at com.mydomain.sunshine.MainActivity.onCreate(MainActivity.java:12)
            at android.app.Activity.performCreate(Activity.java:5231)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
            at android.app.ActivityThread.access$800(ActivityThread.java:135)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5017)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
            at dalvik.system.NativeStart.main(Native Method)
07-28 18:21:46.854    2660-2660/com.mydomain.sunshine I/Process﹕ Sending signal. PID: 2660 SIG: 9

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

只需添加ActionBar Compat您的活动或应用程序应该在AndroidManifest.xml中使用@ style / Theme.AppCompat主题,如下所示:

<activity
    ...
    android:theme="@style/Theme.AppCompat" />

这将在活动中添加操作栏(如果您将此主题添加到应用程序,则添加所有活动)