Две одинаковые стартовые функции () в коммутаторе, работает только одна - PullRequest
0 голосов
/ 12 января 2019

Я новичок в кодировании.

Итак, у меня есть переключатель, в котором приложение может выбрать следующий файл, используя строку nextActivityExtra. Intent.putExtra необходимы для других действий, и никакие действия не имеют проблем с их получением. Так что в основном код работает, но только в первом случае. Когда приложение возвращается к этому «переключению активности», оно должно перейти ко второму случаю, и здесь оно не может загрузить MainActivity (оно загружает черный экран и внезапно возвращается к «переключению активности»).

Если я переключу ExplicaioActivity для MainActivity или для любого другого актива, он будет работать нормально, если это не во втором случае. Я действительно не могу понять, что здесь происходит, я также попробовал тот же код с If с похожими результатами.

public class EntreActivities extends AppCompatActivity {

ImageView iconView;
int count;
String levelExtra;
Intent intent;
String nextActivityExtra;
String rutaLevelNumber;
boolean isTaskCompleted;
Class myClass;


public void Rotate(View view) {
    RotateAnimation rotateAnimation = new RotateAnimation(0, 30,
            RotateAnimation.RELATIVE_TO_SELF, 0.5f,
            RotateAnimation.RELATIVE_TO_SELF, 1f);
    rotateAnimation.setDuration(3000);
    rotateAnimation.setRepeatMode(Animation.REVERSE);
    rotateAnimation.setRepeatCount(Animation.INFINITE);
    rotateAnimation.setFillAfter(true);
    rotateAnimation.setStartOffset(1000);
    iconView.setAnimation(rotateAnimation);

}

public void startAct() {
    if (getIntent().getBooleanExtra("inTraining", false)) {
        Intent intent = new Intent(getApplicationContext(), MainActivity.class);
        Toast.makeText(this, "TTTTtrain", Toast.LENGTH_SHORT).show();


    } else {


        switch (nextActivityExtra) {
            case "ExplicaioActivity":
                myClass = ExplicaioActivity.class;
                Toast.makeText(EntreActivities.this, "here", Toast.LENGTH_SHORT).show();
                intent = new Intent(getApplicationContext(), ExplicaioActivity.class);
                intent.putExtra("Level", rutaLevelNumber);
                intent.putExtra("inTraining", false);
                startActivity(intent);
                overridePendingTransition(R.anim.slide_in_up, R.anim.slide_out_up);

                break;
            case "MainActivity":
                myClass = MainActivity.class;
                Toast.makeText(EntreActivities.this, "here", Toast.LENGTH_SHORT).show();

                intent.putExtra("Level", rutaLevelNumber);
                intent.putExtra("inTraining", false);
                intent = new Intent(getApplicationContext(), MainActivity.class);

                startActivity(intent);
                overridePendingTransition(R.anim.slide_in_up, R.anim.slide_out_up);
                break;
        }


    }
}


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_entre_activities);
    iconView = findViewById(R.id.iconView);
    iconView.setRotation(-15);
    Intent intent = getIntent();
    levelExtra = intent.getStringExtra("Level");
    nextActivityExtra = intent.getStringExtra("NextActivity");
    rutaLevelNumber = intent.getStringExtra("Level");


    Rotate(iconView);


    startAct();


}
}

Это журнал ошибок, который я могу взять от AS:

2019-01-12 01:08:12.383 4282-4282/com.example.root.exercicis E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.root.exercicis, PID: 4282
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.root.exercicis/com.example.root.exercicis.EntreActivities}: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.hashCode()' on a null object reference
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
    at android.app.ActivityThread.-wrap12(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6077)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.hashCode()' on a null object reference
    at com.example.root.exercicis.EntreActivities.startAct(EntreActivities.java:53)
    at com.example.root.exercicis.EntreActivities.onCreate(EntreActivities.java:100)
    at android.app.Activity.performCreate(Activity.java:6662)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
    at android.app.ActivityThread.-wrap12(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.app.ActivityThread.main(ActivityThread.java:6077) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756) 

Ответы [ 2 ]

0 голосов
/ 12 января 2019

Причина этого в том, что вы создаете новое намерение, которое не имеет дополнительной строки "NextActivity".

Позвольте мне рассказать вам, что происходит:

  1. Активность запущена и запущена onCreate ().
  2. Intent intent = getIntent() выполняется, и теперь намерение содержит все данные из намерения, отправленные в это действие.
  3. nextActivityExtra = intent.getStringExtra("NextActivity") запущен и теперь nextActivityExtra теперь сохраняется с «ExplicaioActivity» или «MainActivity» .
  4. startAct() запущено.
  5. Оператор Switch выполняется правильно, потому что nextActivityExtra имеет правильное значение. Давайте представим, что это ExplicaioActivity.
  6. intent = new Intent(getApplicationContext(), ExplicaioActivity.class); выполняется и создает NEW намерение.
  7. Вы используете intent.putExtra("Level") и intent.putExtra("inTraining"), но забыли поставить `intent.putExtra (" NextActivity ");
  8. Новое действие запущено и onCreate() запущено.
  9. Intent intent = getIntent() выполняется, и намерение теперь содержит все данные из намерения, которые были отправлены в это действие. Но имейте в виду, что в этом Намерении из предыдущего Действия отсутствует дополнительная «Следующая активность»
  10. nextActivityExtra = intent.getStringExtra("NextActivity") запускается, но, поскольку для этого нет ничего лишнего, поэтому null хранится в этой переменной.
  11. Случай переключения происходит, но Switch не поддерживает null , поэтому черный экран фактически является аварийным завершением для Activity.

Таким образом, чтобы это исправить, вам просто нужно добавить intent.putExtra("NextActivity", NEW_VALUE); внутри case "ExplicaioActivity" с NEW_VALUE, являющимся новым значением, которое вы хотите добавить в качестве дополнительного значения. `

Однако для дела "MainActivity" , помимо того, что я уже говорил, вам также нужно изменить строку кода.

Переключите это:

intent.putExtra("Level", rutaLevelNumber);
intent.putExtra("inTraining", false);
intent = new Intent(getApplicationContext(), MainActivity.class);

на это:

intent = new Intent(getApplicationContext(), MainActivity.class);
intent.putExtra("Level", rutaLevelNumber);
intent.putExtra("inTraining", false);
0 голосов
/ 12 января 2019

вы пытаетесь добавить дополнительно перед инициализацией Intent внутри MainActivity кейса.

Инициализировать намерение перед добавлением, как показано ниже

intent = new Intent(getApplicationContext(), MainActivity.class);
intent.putExtra("Level", rutaLevelNumber);
intent.putExtra("inTraining", false);
...