• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Android-problem z bazą danych SQL lite

VPS Starter Arubacloud
0 głosów
263 wizyt
pytanie zadane 23 września 2017 w Android, Swift, Symbian przez Howdy Początkujący (360 p.)

Witam

Mój problem z bazą danych jest taki: gdy próbuje zapisać do bazy dane z edit texta który znajduje się w dialogu wyskakuje mi komunikat z crashem. mój kod:

Main:
public class MainActivity extends AppCompatActivity {


    EditText et1;
    final Context context=this;
    DbAdapter dbAdapter;



    @Override
    public void onStart(){
        super.onStart();
        createNotification();
        Toast.makeText(this,"Welcome!!!",Toast.LENGTH_SHORT).show();
    }

    public void author_intent(){
    Intent intent=new Intent(this, Intecja_O_Autorze.class);
        startActivity(intent);
    }
   /* public void insertAddress(){
        et1=(EditText) (findViewById(R.id.ET));
        String address=et1.getText().toString();
        dbAdapter.open();
        Long inserted=dbAdapter.insertAddress(address);
        if(inserted>=0){
            Toast.makeText(context, "added!!!", Toast.LENGTH_SHORT).show();
            et1.setText("");
        } else{
            Toast.makeText(context, "not added :(", Toast.LENGTH_SHORT).show();
        }



    } */

    public void createNotification(){
        NotificationCompat.Builder mBuilder=(NotificationCompat.Builder) new NotificationCompat.Builder(this);
        mBuilder.setSmallIcon(R.drawable.notif);
        mBuilder.setContentTitle("EZopener:");
        mBuilder.setContentText("Click here to enter app");
        NotificationManager notificationManager=(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(0,mBuilder.build());

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        dbAdapter=new DbAdapter(getApplicationContext());
        setSupportActionBar(toolbar);
        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //showDialog(view);
                LayoutInflater li = LayoutInflater.from(context);
                View dialoglayoutView = li.inflate(R.layout.dialoglayout, null);
                AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
                alertDialogBuilder.setView(dialoglayoutView);
                alertDialogBuilder.setCancelable(false);
                alertDialogBuilder.setPositiveButton("Add",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                            //insertAddress();
                                et1=(EditText) (findViewById(R.id.ET));
                                String address=et1.getText().toString();
                                dbAdapter.open();
                                Long inserted=dbAdapter.insertAddress(address);
                                if(inserted>=0){
                                    Toast.makeText(context, "added!!!", Toast.LENGTH_SHORT).show();
                                    et1.setText("");
                                } else{
                                    Toast.makeText(context, "not added :(", Toast.LENGTH_SHORT).show();
                                }
                                dbAdapter.close();

                            }
                        });
                alertDialogBuilder.setNegativeButton("Cancel",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                dialog.cancel();
                            }
                        });
                AlertDialog alertDialog = alertDialogBuilder.create();
                alertDialog.show();

            }
        });


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
            author_intent();

        return super.onOptionsItemSelected(item);
    }
}
Pomocnik:
public class EzOpenerPomocnikBazyDanych extends SQLiteOpenHelper {
    private static final String DB_NAME="zapisaneStrony";
    private static final int DB_VERSION=1;


    public EzOpenerPomocnikBazyDanych(Context context) {
        super(context, DB_NAME, null, DB_VERSION);

    }
//SQLiteDatabase.execSQL(String sql);
    @Override
    public void onCreate(SQLiteDatabase db) {

        db.execSQL("CREATE TABLE STRONY(_id INTEGER PRIMARY KEY AUTOINCREMENT, "
        + "ADRES TEXT);");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }


}

tutaj wzorowałem się na poradniku z jakiegoś zagranicznego bloga:

public class DbAdapter {
    static SQLiteDatabase database;
    EzOpenerPomocnikBazyDanych EzOHelper;
    public DbAdapter(Context context){
        EzOHelper=new EzOpenerPomocnikBazyDanych(context);

    }
    public void open(){
     database=EzOHelper.getWritableDatabase();
    }
    public void close(){
        database.close();
    }
    public static Long insertAddress(String address){

        ContentValues webAddressValues=new ContentValues();
        webAddressValues.put("ADRES", address );
        database.insert("STRONY", null, webAddressValues);
        return null;
    }
    public static void deleteAddress(SQLiteDatabase db, String address){
        db.delete("STRONY",
                "ADRES = ?",
                new String[] {address});
    }

 

komentarz 23 września 2017 przez vector Dyskutant (9,200 p.)

który znajduje się w dialogu wyskakuje mi komunikat z crashem

wrzuć go też, może być pomocny.

komentarz 23 września 2017 przez Howdy Początkujący (360 p.)
EzOpener has stopped

i tyle
komentarz 23 września 2017 przez vector Dyskutant (9,200 p.)
a gdzieś może jakiś stack trace ?
komentarz 23 września 2017 przez Howdy Początkujący (360 p.)
stack trace?

pierwsze słyszę

to?:

                                                                       --------- beginning of crash
09-23 19:03:54.681 2605-2605/com.example.mp.ezopener E/AndroidRuntime: FATAL EXCEPTION: main
                                                                       Process: com.example.mp.ezopener, PID: 2605
                                                                       java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
                                                                           at com.example.mp.ezopener.MainActivity$1$1.onClick(MainActivity.java:104)
                                                                           at android.support.v7.app.AlertController$ButtonHandler.handleMessage(AlertController.java:161)
                                                                           at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                           at android.os.Looper.loop(Looper.java:154)
                                                                           at android.app.ActivityThread.main(ActivityThread.java:6119)
                                                                           at java.lang.reflect.Method.invoke(Native Method)
                                                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
komentarz 23 września 2017 przez vector Dyskutant (9,200 p.)

tak, to jest stack trace.

Teraz przeczytaj to i pomyśl.

java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
                                                                           at com.example.mp.ezopener.MainActivity$1$1.onClick(MainActivity.java:104)

 

komentarz 23 września 2017 przez Howdy Początkujący (360 p.)

czyli  tutaj: String address=et1.getText().toString(); problemem jest et1? mam et1 = (EditText) (findViewById(R.id.ET)); ,a ET jest tutaj: 


<EditText
    android:id="@+id/ET"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

 

komentarz 24 września 2017 przez vector Dyskutant (9,200 p.)
tak ale szukasz tego elementu w kontekście dialogu. Zmień na (EditText) (MainActivity.this.findViewById(R.id.ET))
komentarz 24 września 2017 przez Howdy Początkujący (360 p.)
Nic to nie zmieniło ten sam błąd i w tym samym miejscu :/

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
2 odpowiedzi 565 wizyt
pytanie zadane 10 sierpnia 2018 w Android, Swift, Symbian przez fipooo Bywalec (2,880 p.)
0 głosów
1 odpowiedź 320 wizyt
0 głosów
1 odpowiedź 163 wizyt
pytanie zadane 22 marca 2018 w Android, Swift, Symbian przez Partyjny Obywatel (1,170 p.)

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...