Skocz do zawartości
kacper635

Crash aplikacji - Dyskusja Ogólna

    Rekomendowane odpowiedzi

    mmaciejow

    @marcino936 po prawej masz więcej szczegółów gdzie jest problem. Na zdjęciu tego nie widać bo wyciąłeś log.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Napisano (edytowane)
    W dniu 19.11.2019 o 08:56, Coders Lab napisał:

    Hmm dziwna sprawa. Spróbuj przy podłączonym telefonie  do komputera usunąć aplikację za pomocą tasku gradlowego. Po prawej stronie interfejsu Android Studio znajdź zakładkę gradle. Po kliknięciu na nią uruchomi Ci się okno tasków które można wykonać. Przejdź do gradle -> Tasks -> Install -> UninstallAll i kliknij 2 razy na  UninstallAll  

     

    Cześć, znowu miałem problem z pobraniem aplikacji taki sam ja wcześniej i kliknąłem uninstalAll i gdy próbuję odpalić aplikację wyskakuje mi komunikat że aplikacja wciąż przestaje działać, w android studio pokazuje że zakończył instalację powodzeniem a na telefonie mam taki błąd jak na zdjęciu poniżej. Proszę o jak najszybszą pomoc. 

    image.png

    dodana zawartość

    I taki błąd w logach

     

    image.thumb.png.3f7322ceed7bcb843cff784e12eec15e.png

    Edytowane przez marcino936

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    mmaciejow

    @marcino936 tak jak w logach pisze, błąd w pliku xml linia 43.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Witam, posiadam taki problem:

    Napisał aplikację gdzie po kliknięciu na liczniku liczba zwiększa się o 1 i do tego napisałem losowość i miało pokazywać +1 w losowych miejscach i pokazuje co ileś tam kliknięć na mili sekundę że ledwo jest to widoczne.

    Gdy klikam szybciej to w zakładce Run wyskakuje mi takie powiadomienie : E/WindowManager: BadTokenException or InvalidDisplayException, clean up.

    Jak to naprawić?

    image.thumb.png.5fb1b29aec9b8d9bac946b97b95ea0e1.png

     

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Piszę aplikację do przeglądu wiadomości. Otóż, w momencie próby wejścia w szczegóły artykułu aplikacja przestaje działać.

    import androidx.appcompat.app.AppCompatActivity;
    import androidx.appcompat.widget.Toolbar;
    
    import android.annotation.SuppressLint;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;
    import android.widget.FrameLayout;
    import android.widget.ImageView;
    import android.widget.LinearLayout;
    import android.widget.TextView;
    
    import com.bumptech.glide.Glide;
    import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
    import com.bumptech.glide.request.RequestOptions;
    import com.google.android.material.appbar.AppBarLayout;
    import com.google.android.material.appbar.AppBarLayout.OnOffsetChangedListener;
    import com.google.android.material.appbar.CollapsingToolbarLayout;
    
    public class NewsDetailActivity extends AppCompatActivity implements OnOffsetChangedListener{
    
        private ImageView imageView;
        private TextView appbar_title;
        private TextView appbar_subtitle;
        private TextView date;
        private TextView time;
        private TextView title;
        private boolean isHideToolbarView = false;
        private FrameLayout date_behavior;
        private LinearLayout titleAppbar;
        private AppBarLayout appBarLayout;
        private Toolbar toolbar;
        private String mUrl;
        private String mImg;
        private String mTitle;
        private String mDate;
        private String mSource;
        private String mAuthor;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_news_detail);
    
            setSupportActionBar(toolbar);
            getSupportActionBar().setTitle("");
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    
            final CollapsingToolbarLayout collapsingToolbarLayout = findViewById(R.id.collapsing_toolbar);
            collapsingToolbarLayout.setTitle("");
    
            appBarLayout = findViewById(R.id.appbar);
            appBarLayout.addOnOffsetChangedListener(this);
            date_behavior = findViewById(R.id.date_behavior);
            titleAppbar = findViewById(R.id.title_appbar);
            imageView = findViewById(R.id.backdrop);
            appbar_title = findViewById(R.id.title_on_appbar);
            appbar_subtitle = findViewById(R.id.subtitle_on_appbar);
            date = findViewById(R.id.date);
            time = findViewById(R.id.time);
            title = findViewById(R.id.title);
    
            Intent intent = getIntent();
            mUrl = intent.getStringExtra("url");
            mImg = intent.getStringExtra("img");
            mTitle = intent.getStringExtra("title");
            mDate = intent.getStringExtra("date");
            mSource = intent.getStringExtra("source");
            mAuthor = intent.getStringExtra("author");
    
            RequestOptions requestOptions = new RequestOptions();
            requestOptions.error(Utils.getRandomDrawbleColor());
    
            Glide.with(this).load(mImg)
                    .apply(requestOptions)
                    .transition(DrawableTransitionOptions.withCrossFade())
                    .into(imageView);
    
            appbar_title.setText(mSource);
            appbar_subtitle.setText(mUrl);
            date.setText(Utils.DateFormat(mDate));
            title.setText(mTitle);
    
            String author = "";
            if (mAuthor != null || mAuthor != ""){
                mAuthor = " \u2022 " + mAuthor;
            }
    
            time.setText(mSource + author + " \u2022 " + Utils.DateToTimeFormat(mDate));
    
            initWebView(mUrl);
    
        }
    
        @SuppressLint("SetJavaScriptEnabled")
        private void initWebView(String url){
            WebView webView = findViewById(R.id.webView);
            webView.getSettings().setLoadsImagesAutomatically(true);
            webView.getSettings().setJavaScriptEnabled(true);
            webView.getSettings().setDomStorageEnabled(true);
            webView.getSettings().setSupportZoom(true);
            webView.getSettings().setBuiltInZoomControls(true);
            webView.getSettings().setDisplayZoomControls(false);
            webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
            webView.setWebViewClient(new WebViewClient());
            webView.loadUrl(url);
        }
    
        @Override
        public void onBackPressed() {
            super.onBackPressed();
            supportFinishAfterTransition();
        }
    
        @Override
        public boolean onSupportNavigateUp() {
            onBackPressed();
            return true;
        }
    
        @Override
        public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
    
            int maxScroll = appBarLayout.getTotalScrollRange();
            float percentage = (float) Math.abs(verticalOffset) / (float) maxScroll;
    
            if (percentage == 1f && isHideToolbarView){
                date_behavior.setVisibility(View.GONE);
                titleAppbar.setVisibility(View.VISIBLE);
                isHideToolbarView = !isHideToolbarView;
            }else if (percentage < 1f && isHideToolbarView){
                date_behavior.setVisibility(View.VISIBLE);
                titleAppbar.setVisibility(View.GONE);
                isHideToolbarView = !isHideToolbarView;
            }
    
        }
    }

     

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    mmaciejow

    @maxin2134 a jakie masz informacje w logach?

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Napisałem kod wyskakującego okna sugerując się tutorialem z yt zrobiłem wszystko tak samo i po kliknięciu przycisku, aplikacja się wyłącza. Cały kod i błąd jest na dole posta.
    Sugerowałem się tym tutorialem: https://www.youtube.com/watch?v=fn5OlqQuOCk

    Co jest nie tak i jak to naprawaić?

    Główne okno:

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getSupportActionBar().hide();
    goToUstawienia = findViewById(R.id.ustawienia);
        goToUstawienia.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                Intent intent = new Intent(MainActivity.this, OknoUstawien.class);
                startActivity(intent);
            }
        });
    }

    Okno po otwarciu:

    package com.example.strikeclicker;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.DisplayMetrics;
    
    import androidx.annotation.Nullable;
    
    class OknoUstawien extends Activity {
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            setContentView(R.layout.ustawienia_activity);
    
            DisplayMetrics dm = new DisplayMetrics();
            getWindowManager().getDefaultDisplay().getMetrics(dm);
    
            int width = dm.widthPixels;
            int height = dm.heightPixels;
    
            getWindow().setLayout ((int) (width*.8),(int) (height*.6));
        }
    }

    Android Manifest 

    <activity android:name="com.example.strikeclicker.OknoUstawien"
        android:theme="@style/AppTheme.CustomTheme"/>

    Style xml

     

    <style name="AppTheme.CustomTheme" >
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowCloseOnTouchOutside">true</item>
    </style>

     

    Wyskakujący błąd:

    E/AndroidRuntime: FATAL EXCEPTION: main
        Process: com.example.strikeclicker, PID: 9777
        java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.strikeclicker/com.example.strikeclicker.OknoUstawien}: java.lang.IllegalAccessException: java.lang.Class<com.example.strikeclicker.OknoUstawien> is not accessible from java.lang.Class<android.app.AppComponentFactory>
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2876)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3081)
            at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
            at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
            at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831)
            at android.os.Handler.dispatchMessage(Handler.java:106)
            at android.os.Looper.loop(Looper.java:201)
            at android.app.ActivityThread.main(ActivityThread.java:6810)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
         Caused by: java.lang.IllegalAccessException: java.lang.Class<com.example.strikeclicker.OknoUstawien> is not accessible from java.lang.Class<android.app.AppComponentFactory>
            at java.lang.Class.newInstance(Native Method)
            at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:69)
            at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:43)
            at android.app.Instrumentation.newActivity(Instrumentation.java:1216)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2864)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3081) 
            at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 
            at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 
            at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831) 
            at android.os.Handler.dispatchMessage(Handler.java:106) 
            at android.os.Looper.loop(Looper.java:201) 
            at android.app.ActivityThread.main(ActivityThread.java:6810) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873) 

     

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Hej,

     

    Błąd wynika z domyślnego modyfikatora dostępu dla klasy. 

    Zmień:

    class OknoUstawien extends Activity

    na :

     

    public class OknoUstawien extends Activity

     

    Bez słowa 'public' android kod wykonywany przez androida nie ma dostępu do Twojej klasy (ponieważ jest w innym pakiecie).

    Pzdr

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Godzinę temu, Filip Heryan napisał:

    ponieważ jest w innym pakiecie

    Nie dlastego, tylko dlatego, że domyślnym modyfikatorem dostępu w Android Studio jest private. Czyli klasa zdefiniowana tak 

    class OknoUstawien extends Activity

    oznacza nie mniej nie więcej niż

    private class OknoUstawien extends Activity

     

    • Lubię to! 1

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Modyfikatory dostępu są częścią języka java i nie zależą od użytego IDE. 

    Pomiędzy modyfikatorem domyślnym a private jest różnica - do definicji klas z modyfikatorem domyślnym jest dostęp z innych klas w tym samym pakiecie. Do klasy z modyfikatorem private ma dostęp tylko klasa wewnątrz której jest zdefiniowana druga klasa. Z tego powodu modyfikator private może być użyty tylko dla klasy wewnętrznej.

    private class C{ //tu android studio rzuca błąd
        
    }
    class B{
       private class C{  // to jest OK
       }
    }

    https://www.javatpoint.com/access-modifiers

    • Lubię to! 1

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

    Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

    Zarejestruj nowe konto

    Załóż nowe konto. To bardzo proste!

    Zarejestruj się

    Zaloguj się

    Posiadasz już konto? Zaloguj się poniżej.

    Zaloguj się

    • Ostatnio przeglądający   0 użytkowników

      Brak zarejestrowanych użytkowników przeglądających tę stronę.

    x