Почему мое приложение для Android дает сбой?

Итак, я знаю, что это связано с моей строкой кода «startActivity(myIntent)». Вот мой первый файл Activity

public class Commander2 extends Activity {
    /** Called when the activity is first created. */

    private static final String TAG = "AccessCodeEntry";
    private static final String LEVEL_ONE_ACCESS_CODE = "derp";

    @Override
    public void onCreate( Bundle savedInstanceState ) {
        super.onCreate( savedInstanceState );
        setContentView( R.layout.accesscodeentry );
    }

protected void onDestroy() {
    super.onDestroy();
}

public void accessCodeEntered( View v ) {
    EditText loginPassword = (EditText) findViewById( R.id.editText1 );
    if( loginPassword.toString().equals( LEVEL_ONE_ACCESS_CODE ) ) {
        Intent myIntent = new Intent( Commander2.this, LevelOne.class );
        startActivity( myIntent );
    } else {
        Intent myIntent = new Intent( Commander2.this, LevelZero.class );
        startActivity( myIntent );
    }
}
}

Вот XML-файл.

<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:onClick="accessCodeEntered"
        android:text="OK" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/button1"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="19dp"
        android:ems="10"
        android:inputType="textPassword" >

        <requestFocus />
    </EditText>

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/editText1"
        android:layout_alignLeft="@+id/editText1"
        android:text="Enter Access Code, or leave blank for Level 0"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</RelativeLayout>

Мой код просто выходит, как только я ввожу пароль и нажимаю кнопку ОК, независимо от того, какой вывод. Я закомментировал строки startActivity(myIntent), и код завершается без сбоев. Кто-нибудь знает, что я делаю неправильно?

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="my.eti"
  android:versionCode="1"
  android:versionName="1.0">
<uses-sdk android:minSdkVersion="10" />
<application android:icon="@drawable/ic_launcher" android:label="@string/app_name">
    <activity android:name=".Commander2"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
     <activity android:name=".LevelOne"
              android:label="@string/app_name">
        <intent-filter>                
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".LevelZero"
              android:label="@string/app_name">
        <intent-filter>                
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
</manifest>

person JuiCe    schedule 06.06.2012    source источник
comment
Вы добавили активность LevelOne в свой манифест?   -  person Ryan    schedule 06.06.2012


Ответы (4)


EDIT: я обновляю свой ответ

Итак, наконец, я понял, где вы ошибались

  • проверьте ваше условие if
  • в методе accessCodeEntered()
  • активности Commander2.java

 if(loginPassword.toString().equals(LEVEL_ONE_ACCESS_CODE)){}

здесь вы не получаете значение пароля и пытаетесь использовать его, поэтому я добавил метод «getText()», и он работает нормально, как это


if(loginPassword.getText().toString().equals(LEVEL_ONE_ACCESS_CODE)){}

Commander2.java


package my.eti;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class Commander2 extends Activity implements OnClickListener {
    /** Called when the activity is first created. */

    private static final String TAG = "AccessCodeEntry";
    private static final String LEVEL_ONE_ACCESS_CODE = "derp";

    private Button btnOK;
    private EditText passTxt;

    private String strPass;

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

        passTxt = (EditText) findViewById(R.id.editText1);

        btnOK =(Button) findViewById(R.id.button1);
        btnOK.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

        if(v==btnOK){

            /*... here is the problem we havent added getText() to get value from EditText...*/
        if(loginPassword.getText().toString().equals(LEVEL_ONE_ACCESS_CODE)){
            Intent myIntent = new Intent( Commander2.this, LevelOne.class );
            Toast.makeText(getBaseContext(), "if condition is true..", Toast.LENGTH_SHORT).show();
            startActivity( myIntent );
        }
        else{
            Intent myIntent = new Intent( Commander2.this, LevelZero.class );
            Toast.makeText(getBaseContext(), "else condition is true..", Toast.LENGTH_SHORT).show();

            startActivity(myIntent);
        }
        }

    }
}

попробуйте реализовать этот код и где вы ошибаетесь.

все еще у вас есть какие-либо проблемы, поделитесь со мной. Спасибо.

person swiftBoy    schedule 06.06.2012
comment
к сожалению, он все еще падает, я изменил файл манифеста на то, что у вас было, изменив версию SDK на 10. - person JuiCe; 06.06.2012
comment
убедитесь, что вы также изменили в файле default.properties эту строку target=android-8 на 10. - person swiftBoy; 06.06.2012
comment
Хорошо, я этого не делал. Я меняю его сейчас, и все, что он продолжает говорить, не может разрешить цель «андроид-10». Могу ли я изменить используемый SDK после первоначального создания проекта? Я загрузил только самую последнюю версию SDK на свой компьютер, но пытаюсь написать код для версии 2.3. Так что в моем файле на самом деле написано android-15. - person JuiCe; 06.06.2012
comment
да, вы можете изменить его, теперь только я изменил API своего приложения с 10 на 8, ну, я видел ваш опубликованный манифест, и мне интересно, почему у вас нет этой ‹category android:name=android.intent.category.LAUNCHER /› на ваша деятельность - person swiftBoy; 06.06.2012
comment
Хорошо, я обновил манифест, опубликованный выше, до того, что у меня есть сейчас. Программа запускается, но все равно падает, как только я нажимаю кнопку ОК в действии Commander2, независимо от того, что находится в текстовом поле. Кроме того, он по-прежнему выдает мне ошибку «Невозможно разрешить цель« Android-10 »» всякий раз, когда я меняю ее с andoid-15. - person JuiCe; 06.06.2012
comment
после изменения всех этих вещей обязательно очистите свой проект таким образом [выберите проект --> перейдите в меню «Проект» --> нажмите «Очистить» --> затем снова запустите приложение] - person swiftBoy; 06.06.2012
comment
Я сделал, к сожалению, он все еще вылетает. В моем файле свойств по-прежнему указана версия 15, но я думаю, что это должно быть проблемой. - person JuiCe; 06.06.2012
comment
Я попытался ввести ваш код, и программа просто вылетает, не успев открыться. Я думаю, что это должно быть как-то связано с версией, которую я использую. Я сделал совершенно новый проект, скопировал и вставил весь ваш код отсюда, но все равно не повезло. Кроме того, я не могу открыть файл project.properties в новом проекте, я не знаю, что делать. Спасибо большое за вашу помощь, хотя - person JuiCe; 07.06.2012
comment
я отправил вам обновленный исходный код, проверьте почту, я получил, что вы ошиблись в условии if ›› в методе accessCodeEntered() ›› действия Commander2.java .... добавьте метод getText() перед toString в loginPassword .. . ты получил ? - person swiftBoy; 07.06.2012
comment
Я понял, все работает, спасибо, вы очень выручили - person JuiCe; 07.06.2012

Пожалуйста, опубликуйте свои ошибки logcat, но я предполагаю, что LevelOne и LevelZero находятся в вашем файле манифеста. Кроме того, это может помочь изменить это:

loginPassword.toString().equals( LEVEL_ONE_ACCESS_CODE )

to:

loginPassword.getText().toString().equals( LEVEL_ONE_ACCESS_CODE )
person Sam    schedule 06.06.2012

вы должны зарегистрировать LevelOne и LevelZero в файле манифеста

person MAC    schedule 06.06.2012

Вот ссылка на аналогичный вопрос SO, который показывает, как добавить действия в ваш манифест.

Добавить новую активность в AndroidManifest?

person Ryan    schedule 06.06.2012
comment
Что ж, у меня его не было в моем манифесте, так что спасибо, но теперь он выдает мне другую ошибку: активность запуска не найдена! Запуск только синхронизирует пакет приложения на устройстве! Это мой файл манифеста: - person JuiCe; 06.06.2012
comment
Вы все еще получаете эту ошибку? (Похоже, вы не должны этого делать, глядя на свой манифест) Или вы просто получаете «невозможно разрешить цель»? Если последнее, перейдите в свойства проекта и измените цель сборки. - person Ryan; 07.06.2012