Skocz do zawartości
kacper635

Crash aplikacji - Dyskusja Ogólna

    Rekomendowane odpowiedzi

    Witam. Kiedy chce włączyć na telefonie aktywność to crashuje mi całą aplikacje. Poniżej kod. Jaki może być tego powód?

     

    package com.appnucleus.loginandregisteruser;
    
    import android.app.Activity;
    import android.app.ProgressDialog;
    import android.content.Intent;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.util.Log;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Spinner;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import com.android.volley.Request.Method;
    import com.android.volley.Response;
    import com.android.volley.VolleyError;
    import com.android.volley.toolbox.StringRequest;
    import com.jeremyfeinstein.slidingmenu.lib.MenuInterface;
    import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
    
    import org.json.JSONException;
    import org.json.JSONObject;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import helper.SQLiteHandler;
    import helper.SessionManager;
    import volley.AppController;
    import volley.Config_URL;
    
    
    public class konf extends AppCompatActivity {
        private static final String TAG = konf.class.getSimpleName();
        private Button OnClickZapisz;
        private EditText inputg1;
        private EditText inputd1;
        private EditText inputg2;
        private EditText inputd2;
        private EditText inputg3;
        private EditText inputd3;
        private EditText inputg4;
        private EditText inputd4;
        private EditText inputg5;
        private EditText inputd5;
        private EditText inputg6;
        private EditText inputd6;
        private EditText inputg7;
        private EditText inputd7;
        private TextView inputgrupa;
    
        private ProgressDialog pDialog;
        private SessionManager session;
        private SQLiteHandler db1;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_konf);
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setDisplayShowHomeEnabled(true);
            getSupportActionBar().setDisplayShowTitleEnabled(false);
    
            inputd1 = findViewById(R.id.d1);
            inputg1 = findViewById(R.id.g1);
            inputd2 = findViewById(R.id.d2);
            inputg2 = findViewById(R.id.g2);
            inputd3 = findViewById(R.id.d3);
            inputg3 = findViewById(R.id.g3);
            inputd4 = findViewById(R.id.d4);
            inputg4 = findViewById(R.id.g4);
            inputd5 = findViewById(R.id.d5);
            inputg5 = findViewById(R.id.g5);
            inputd6 = findViewById(R.id.d6);
            inputg6 = findViewById(R.id.g6);
            inputd7 = findViewById(R.id.d7);
            inputg7 = findViewById(R.id.g7);
    
            OnClickZapisz = findViewById(R.id.OnClickZapisz);
    
    
            // Progress dialog
            pDialog = new ProgressDialog(this);
            pDialog.setCancelable(false);
    
            // Session manager
            session = new SessionManager(getApplicationContext());
    
            // SQLite database handler
            db1 = new SQLiteHandler(getApplicationContext());
    
            // Register Button Click event
            OnClickZapisz.setOnClickListener(new View.OnClickListener() {
                public void onClick(View view) {
                    String d1 = inputg1.getText().toString();
                    String g1 = inputd1.getText().toString();
                    String g2 = inputg2.getText().toString();
                    String d2 = inputd2.getText().toString();
                    String g3 = inputg3.getText().toString();
                    String d3 = inputd3.getText().toString();
                    String g4 = inputg4.getText().toString();
                    String d4 = inputd4.getText().toString();
                    String g5 = inputg5.getText().toString();
                    String d5 = inputd5.getText().toString();
                    String g6 = inputg6.getText().toString();
                    String d6 = inputd6.getText().toString();
                    String g7 = inputg7.getText().toString();
                    String d7 = inputd7.getText().toString();
                    String grupa = inputgrupa.getText().toString();
    
                    if (g1.isEmpty() != d1.isEmpty() || g2.isEmpty() != d2.isEmpty()
                            || g3.isEmpty() != d3.isEmpty() || g4.isEmpty() != d4.isEmpty()
                            || g5.isEmpty() != d5.isEmpty() || g6.isEmpty() != d6.isEmpty()
                            || g7.isEmpty() != d7.isEmpty()) {
    
                        // Inserting row in users table
                        // db1.adddzien(dzientygodnia, lekcja, "G", "2018-11-21", "2018-11-21", grupa);
                        godziny("dodajgodziny", g1, d1, g2, d2, g3, d3, g4, d4, g5, d5, g6, d6, g7, d7, grupa);
                    } else
    
                    {
                        Toast.makeText(getApplicationContext(),
                                "Wypełnij wszystkie pola.", Toast.LENGTH_LONG)
                                .show();
                    }
                }
            });
    
    
        }
    
       /* public void onClickZapisz(View v) {
            String g1 = inputg1.getText().toString();
            String d1 = inputd1.getText().toString();
            String g2 = inputg2.getText().toString();
            String d2 = inputd2.getText().toString();
            String g3 = inputg3.getText().toString();
            String d3 = inputd3.getText().toString();
            String g4 = inputg4.getText().toString();
            String d4 = inputd4.getText().toString();
            String g5 = inputg5.getText().toString();
            String d5 = inputd5.getText().toString();
            String g6 = inputg6.getText().toString();
            String d6 = inputd6.getText().toString();
            String g7 = inputg7.getText().toString();
            String d7 = inputd7.getText().toString();
    
    
            if (g1.isEmpty() != d1.isEmpty())
            {
    
                    // Inserting row in users table
                    // db1.adddzien(dzientygodnia, lekcja, "G", "2018-11-21", "2018-11-21", grupa);
                       OnClickZapisz("dodajgodziny", d1, g1,d2, g2,d3, g3,d4, g4,d5, g5, d6, g6, d7, g7);
                } else {
                    Toast.makeText(getApplicationContext(),
                            "Wypełnij wszystkie pola.", Toast.LENGTH_LONG)
                            .show();
                }
        } */
    
    
    
    
    
        /**
         * Function to store user in MySQL database will post params(tag, name,
         * email, password) to register url
         */
        private void godziny(final String akcja,final String d1, final String g1, final String d2,  final String g2,
                             final String d3,  final String g3,
                                  final String d4,  final String g4,final String d5,
                             final String g5,final String d6,
                             final String g6 ,final String d7,  final String g7, final String grupa) {
            // Tag used to cancel the request
            String tag_string_req = "req_register";
    
            pDialog.setMessage("Dodawanie...");
            showDialog();
    
            StringRequest strReq = new StringRequest(Method.POST,
                    Config_URL.URL_GODZINY, new Response.Listener<String>() {
    
                @Override
                public void onResponse(String response) {
                    Log.d(TAG, "Register Response: " + response);
                    hideDialog();
    
                    try {
                        JSONObject jObj = new JSONObject(response);
                        boolean error = jObj.getBoolean("error");
                        if (!error) {
                            // User successfully stored in MySQL
                            // Now store the user in sqlite
                            String uid = jObj.getString("uid");
                            JSONObject godziny = jObj.getJSONObject("plan");
                            String d1 = godziny.getString("od1");
                            String g1 = godziny.getString("do1");
                            String d2 = godziny.getString("od2");
                            String g2 = godziny.getString("do2");
                            String d3 = godziny.getString("od3");
                            String g3 = godziny.getString("do3");
                            String d4 = godziny.getString("od4");
                            String g4 = godziny.getString("do4");
                            String d5 = godziny.getString("od5");
                            String g5 = godziny.getString("do5");
                            String d6 = godziny.getString("od6");
                            String g6 = godziny.getString("do6");
                            String d7 = godziny.getString("od7");
                            String g7 = godziny.getString("do7");
                            String ggrupa = godziny.getString("grupa");
                            String created_at = godziny
                                    .getString("created_at");
                            String updated_at = godziny
                                    .getString("updated_at");
    
                            // Inserting row in users table
                            db1.addgodziny(d1, g1,d2, g2,d3, g3,d4, g4,d5, g5, d6, g6, d7, g7, uid, created_at, updated_at,ggrupa);
    
                            // Launch login activity
                            Intent intent = new Intent(
                                    konf.this,
                                    Activity_Login.class);
                            startActivity(intent);
                            finish();
                        } else {
    
                            // Error occurred in registration. Get the error
                            // message
                            String errorMsg = jObj.getString("error_msg");
                            Toast.makeText(getApplicationContext(),
                                    errorMsg, Toast.LENGTH_LONG).show();
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
    
                }
            }, new Response.ErrorListener() {
    
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.e(TAG, "Registration Error: " + error.getMessage());
                    Toast.makeText(getApplicationContext(),
                            error.getMessage(), Toast.LENGTH_LONG).show();
                    hideDialog();
                }
            }) {
    
                @Override
                protected Map<String, String> getParams() {
                    // Posting params to register url
                    Map<String, String> params = new HashMap<String, String>();
                   
    params.put("tag", "dodajgodziny");
    params.put("g1od",inputd1.getText().toString());
    params.put("d1do",inputg1.getText().toString());
    params.put("g2od",inputd2.getText().toString());
    params.put("d2do",inputg2.getText().toString());
    params.put("g3od",inputd3.getText().toString());
    params.put("d3do",inputg3.getText().toString());
    params.put("g4od",inputd4.getText().toString());
    params.put("d4do",inputg4.getText().toString());
    params.put("g5od",inputd5.getText().toString());
    params.put("d5do",inputg5.getText().toString());
    params.put("g6od",inputd6.getText().toString());
    params.put("d6do",inputg6.getText().toString());
    params.put("g7od",inputd7.getText().toString());
    params.put("d7do",inputg7.getText().toString());
    
                    return params;
                }
    
            };
    
            // Adding request to request queue
            AppController.getInstance().addToRequestQueue(strReq, tag_string_req);
        }
    
        private void showDialog() {
            if (!pDialog.isShowing())
                pDialog.show();
        }
    
        private void hideDialog() {
            if (pDialog.isShowing())
                pDialog.dismiss();
        }
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            if(item.getItemId()==android.R.id.home)
                finish();
            return super.onOptionsItemSelected(item);
        }
    }
    
    
    Edytowane przez mmaciejow
    poprawa tematu

    Udostępnij tę odpowiedź


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

    @kacper635 podaj log błędów, bedzie łatwiej znaleźć problem. Proponuje również rozdzielenie kodu na kilka klas. Nie powinno się trzymać wszystkiego w jednej aktywności. 

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    @mmaciejow @Coders Lab
    E/AndroidRuntime: FATAL EXCEPTION: main
        Process: com.appnucleus.loginandregisteruser, PID: 4006
        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.appnucleus.loginandregisteruser/com.appnucleus.loginandregisteruser.Activity_Main}: android.database.sqlite.SQLiteException: Can't downgrade database from version 3 to 2
            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: android.database.sqlite.SQLiteException: Can't downgrade database from version 3 to 2
            at android.database.sqlite.SQLiteOpenHelper.onDowngrade(SQLiteOpenHelper.java:360)
            at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:254)
            at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:187)
            at helper.SQLiteHandler.getUserDetails(SQLiteHandler.java:220)
            at com.appnucleus.loginandregisteruser.Activity_Main.onCreate(Activity_Main.java:67)
            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) 


    Dodam że już po odpaleniu emulatora jest crash aplikacji. Aczkolwiek kompiluje sie i wchodzi na tapete emulatora gdzie jest już błąd.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    1 minutę temu, kacper635 napisał:

    Can't downgrade database from version 3 to 2

    Gdzieś masz zadeklarowaną bazę danych. Jakiś DatabaseHelper? Tam trzeba podbić jej wersję.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    @Coders Lab Właśnie też to zauważyłem.
    Mam ją zadeklarowaną w SQHandler. Miałem wersje ustawioną na 2, zmiana na 1 nie pomogła nic.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    2 minuty temu, kacper635 napisał:

    Mam ją zadeklarowaną w SQHandler. Miałem wersje ustawioną na 2, zmiana na 1 nie pomogła nic.

    Spróbuj zmienić na 3 :D

    Komunikat błędu wskazuje że miałeś wcześniej bazę w wersji 3, a teraz masz w wersji 2. Taka zmiana jest zabroniona. Chyba że napiszesz własną implementacje metody:
     

    public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        throw new SQLiteException("Can't downgrade database from version " +
                oldVersion + " to " + newVersion);
    }

     

    Edytowane przez Coders Lab
    doprecyzowanie

    Udostępnij tę odpowiedź


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

    @kacper635  w logach pisze:

    android.database.sqlite.SQLiteException: Can't downgrade database from version 3 to 2

    Popraw klasę z SQL

     

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    E/AndroidRuntime: FATAL EXCEPTION: main
        Process: com.appnucleus.loginandregisteruser, PID: 4407
        java.lang.IllegalStateException: Could not execute method for android:onClick
            at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:389)
            at android.view.View.performClick(View.java:5610)
            at android.view.View$PerformClick.run(View.java:22265)
            at android.os.Handler.handleCallback(Handler.java:751)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            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.reflect.InvocationTargetException
            at java.lang.reflect.Method.invoke(Native Method)
            at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:384)
            at android.view.View.performClick(View.java:5610) 
            at android.view.View$PerformClick.run(View.java:22265) 
            at android.os.Handler.handleCallback(Handler.java:751) 
            at android.os.Handler.dispatchMessage(Handler.java:95) 
            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: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.appnucleus.loginandregisteruser/com.appnucleus.loginandregisteruser.konf}; have you declared this activity in your AndroidManifest.xml?
            at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1805)
            at android.app.Instrumentation.execStartActivity(Instrumentation.java:1523)
            at android.app.Activity.startActivityForResult(Activity.java:4224)
            at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54)
            at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:68)
            at android.app.Activity.startActivityForResult(Activity.java:4183)
            at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:751)
            at android.app.Activity.startActivity(Activity.java:4507)
            at android.app.Activity.startActivity(Activity.java:4475)
            at com.appnucleus.loginandregisteruser.Activity_Main.click(Activity_Main.java:121)
            at java.lang.reflect.Method.invoke(Native Method) 
            at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:384) 
            at android.view.View.performClick(View.java:5610) 
            at android.view.View$PerformClick.run(View.java:22265) 
            at android.os.Handler.handleCallback(Handler.java:751) 
            at android.os.Handler.dispatchMessage(Handler.java:95) 
            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)

     @mmaciejow
    @Coders Lab Zmieniłem wersje na 3, włączyło się główne menu, ale po odpaleniu tej aktywności znów mam crasha. Niżej logi

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    3 minuty temu, kacper635 napisał:

     Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.appnucleus.loginandregisteruser/com.appnucleus.loginandregisteruser.konf}; have you declared this activity in your AndroidManifest.xml?

    Dodaj activity: konf do AndroidManifest.xml.

     

    W jaki sposób prawidłowo dodać nowe Activity opisałem tutaj:

     

    Edytowane przez Coders Lab

    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