更改活动时应用程序崩溃(Android)

时间:2016-02-18 14:16:23

标签: java android android-layout android-activity android-manifest

我正在编写我的第二个应用并实施了第二个活动,通过单击第一个活动上的按钮激活。我已经在android清单中声明了第二个活动,希望我做得对。我一直在寻找几个小时,并尝试了几十个答案,但没有一个帮助。我希望有人能帮助我。

清单:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="de.cont.bloodscript.mueckenfang">
        <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            <activity android:name=".GameActivity" />
            </activity>
        </application>
    </manifest>

第1次活动:

    public class MainActivity extends Activity implements View.OnClickListener {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Button sB = (Button) findViewById(R.id.startButton);
            sB.setOnClickListener(this);
        }

        public void onClick(View v){
            if(v.getId()==R.id.startButton){
                startActivity(new Intent(MainActivity.this, GameActivity.class));
            }
        }
     }

第二项活动:

    public class GameActivity extends Activity implements View.OnClickListener,Runnable {

        public static final int HOECHSTALTER_MS = 2000;
        private boolean spielLaeuft;
        private int punkte;
        private int runde;
        private int muecken;
        private int gefangeneMuecken;
        private short zeit;
        private float massstab;
        private Random zufallsGenerator = new Random();
        private ViewGroup spielBereich;
        private Handler handler = new Handler();

        @Override
        public void run(){
            zeitHerunterzaehlen();
        }
        @Override
        protected void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_game);
            massstab = getResources().getDisplayMetrics().density;
            spielBereich =(ViewGroup) findViewById(R.id.spielbereich);
            spielStarten();
        }

        public void onClick(View muecke){
            gefangeneMuecken++;
            punkte+=100;
            bildschirmAktualisieren();
            spielBereich.removeView(muecke);
        }

        public void spielStarten() {
            spielLaeuft = true;
            runde = 0;
            punkte = 0;
            starteRunde();
        }

        private void starteRunde() {
            runde+=1;
            muecken=runde*10;
            gefangeneMuecken=0;
            zeit=60;
            bildschirmAktualisieren();
            handler.postDelayed(this,1000);
        }

        private void bildschirmAktualisieren() {
            TextView tvPunkte = (TextView) findViewById(R.id.points);
            tvPunkte.setText(Integer.toString(punkte));
            TextView tvRunde = (TextView) findViewById(R.id.rounds);
            tvRunde.setText(Integer.toString(runde));
            FrameLayout flTreffer = (FrameLayout) findViewById(R.id.hitbar);
            FrameLayout flZeit = (FrameLayout) findViewById(R.id.timebar);
            ViewGroup.LayoutParams lpTreffer = flTreffer.getLayoutParams();
            lpTreffer.width = Math.round(massstab*300*Math.min(gefangeneMuecken,muecken)/muecken);
            ViewGroup.LayoutParams lpZeit = flZeit.getLayoutParams();
            lpZeit.width = Math.round(massstab*zeit*300/60);
        }

        private void zeitHerunterzaehlen(){
            zeit-=1;
            float zufallsZahl=zufallsGenerator.nextFloat();
            double wahrscheinlichkeit=muecken*1.5;
            if(wahrscheinlichkeit>1){
                eineMueckeAnzeigen();
                if(zufallsZahl<wahrscheinlichkeit-1){
                    eineMueckeAnzeigen();
                }
            }else{
                if(zufallsZahl<wahrscheinlichkeit){
                    eineMueckeAnzeigen();
                }
            }
            mueckenVerschwinden();
            bildschirmAktualisieren();
            if(!pruefeSpielEnde()){
                if(!pruefeRundenEnde()){
                 handler.postDelayed(this,1000);
                }
            }
        }

        private boolean pruefeSpielEnde(){
            if(zeit==0&&gefangeneMuecken<muecken){
                gameOver();
                return true;
            }
            return false;
        }

        private boolean pruefeRundenEnde(){
            if(gefangeneMuecken>=muecken){
                starteRunde();
                return true;
            }
            return false;
        }

        private void eineMueckeAnzeigen(){
            int breite = spielBereich.getWidth();
            int hoehe = spielBereich.getHeight();
            int mueckeBreite = (int) Math.round(massstab*50);
            int mueckeHoehe = (int) Math.round(massstab*50);
            int oben = zufallsGenerator.nextInt(hoehe-mueckeHoehe);
            int links = zufallsGenerator.nextInt(breite-mueckeBreite);
            ImageView muecke = new ImageView(this);
            muecke.setImageResource(R.drawable.diptera);
            muecke.setOnClickListener(this);
            FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(mueckeBreite,mueckeHoehe);
            params.leftMargin = links;
            params.topMargin = oben;
            params.gravity = Gravity.TOP + Gravity.LEFT;
            spielBereich.addView(muecke,params);
            muecke.setTag(R.id.geburtsdatum, new Date());
        }

        private void mueckenVerschwinden(){
            int nummer = 0;
            while(nummer<spielBereich.getChildCount()){
                ImageView muecke = (ImageView) spielBereich.getChildAt(nummer);
                Date geburtsdatum = (Date) muecke.getTag(R.id.geburtsdatum);
                long alter = (new Date().getTime()-geburtsdatum.getTime());
                if(alter> HOECHSTALTER_MS){
                    spielBereich.removeView(muecke);
                }else{
                    nummer++;
                }
            }
        }

        private void gameOver(){
            Dialog dialog = new Dialog(this, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
            dialog.setContentView(R.layout.gameover);
            dialog.show();
            spielLaeuft = false;
        }
    }

1 个答案:

答案 0 :(得分:8)

清单文件中的嵌套错误。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="de.cont.bloodscript.mueckenfang">

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

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".GameActivity" />
    </application>
</manifest>