Naar content
Trending apps
  • Inbox by Gmail

  • Maps: Navigatie en OV

  • WhatsApp Messenger

  • Messenger

  • Facebook

Trending games
  • Minecraft Earth

  • Dr. Mario World

  • Harry Potter: Wizards Unite

  • Breaking Bad: Criminal Elements

  • The Elder Scrolls: Blades

Trending smartphones
  • Moto G8 Plus

  • Microsoft Surface Duo

  • OnePlus 7T Pro

  • Nokia 7.2

  • Xiaomi Mi 9T Pro

Nieuwste tablets
  • Samsung Galaxy Tab S6

  • Samsung Galaxy Tab A 10.5

  • Samsung Galaxy Tab S4

  • Samsung Galaxy Tab S3 9.7

  • Asus Zenpad 3S 10

Timelord

Timelord

  • Lid sinds 05 juni 2010
  • Berichten 2336
  • Reputatie 20
  • #1
  • 8 juli 2015
  • 19:51

Ivm de overzichtelijkheid, wil ik een aanroep van de database in een aparte class doen.
Ik krijg echter een nullpointexception

Copieer kopieer = new Copieer(buttonidnummer); kopieer.copieerhet()
en dan Copieer.class

import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.widget.Toast;

/**
* Created by Studio on 8-7-2015.
*/
public class Copieer extends Activity {
private String buttonid;
SQLiteDatabase db;
Cursor cursor;


public Copieer(String button)
{ buttonid=button; }

public String copieerhet() {
db = openOrCreateDatabase("adressenboek", Context.MODE_PRIVATE, null);
cursor = db.rawQuery("SELECT * FROM adressenboek WHERE buttonidnaam='" + buttonid + "'ORDER BY voornaam ASC ", null);
if (cursor.getCount() == 0) {
Toast.makeText(Copieer.this, "Dit adressenboek is nog leeg.", Toast.LENGTH_SHORT).show();
} else
{ Toast.makeText(Copieer.this, "buttonid: "+buttonid, Toast.LENGTH_SHORT).show();}

java.lang.NullPointerException
at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:222)

Bewerkt (8 juli 2015 19:52)

Oukitel K5000 7.0 (nog) ongeroot
Samsung Note geroot 4.2.1 Spirit Rom (op sterven na dood)
HTC Desire geroot Slim Rom 4.4.4
HTC one X + geroot 4.2.2 ViperX+ 2.1.1
One plus one geroot 6.01
LG P990 geroot 2.3
Samsung A8 ongeroot (werk)
Umidigi a5 Pro ongeroot (nog wel).

redbulletnl

redbulletnl

  • Lid sinds 02 september 2011
  • Berichten 2991
  • Reputatie 60
  • #2
  • 9 juli 2015
  • 09:20

Je Copieer class extends een activity?

package androidworld.is.awesome; import android.content.Context; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; public class DBAdapter { public static String DATABASE_NAME = "dbblablabla.s3db"; public static int DATABASE_VERSION = 1; private final Context context; static String TAG = "DBAdapter"; private DatabaseHelper DBHelper; public static SQLiteDatabase db; public DBAdapter(Context ctx) { this.context = ctx; DBHelper = new DatabaseHelper(context); } private static class DatabaseHelper extends SQLiteOpenHelper { DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } } //—opens the database— public DBAdapter open() throws SQLException { db = DBHelper.getWritableDatabase(); Log.i(TAG, "database openen"); return this; } //—closes the database— public void close() { DBHelper.close(); } }
Deze gebruik ik dus.
In mijn activities gebruik ik
DBAdatper dbA = new DBAdapter(this|; dbA.open(); Cursor c = DBAdapter.db.rawQuery("select * from tabel", null); for(c.moveToFirst();!c.isAfterLast();c.moveToNext()){ //getData } c.close(); dbA.close();
Als je vaak het zelfde opvraagt kun je in de DBAdapter een functie schrijven ervoor.

Timelord

Timelord

  • Lid sinds 05 juni 2010
  • Berichten 2336
  • Reputatie 20
  • #3
  • 9 juli 2015
  • 13:29

Soms na lang trial en error lukt het me om iets aan het werk te krijgen.
Dingen die logisch lijken, blijken dat toch niet helemaal te zijn.

Als ik dan iets heb wat niet werkt, dan probeer ik datgene aan het werk te krijgen, omdat ik wat ik er zelf neerzet bijna helemaal snap.

Ik zal vanavond naar jouw oplossing kijken, maar ik weet niet of ik ga snappen wat jij als voorbeeld geeft.
Als ik er vragen over heb, dan hoor je het. :-)

Oukitel K5000 7.0 (nog) ongeroot
Samsung Note geroot 4.2.1 Spirit Rom (op sterven na dood)
HTC Desire geroot Slim Rom 4.4.4
HTC one X + geroot 4.2.2 ViperX+ 2.1.1
One plus one geroot 6.01
LG P990 geroot 2.3
Samsung A8 ongeroot (werk)
Umidigi a5 Pro ongeroot (nog wel).

Timelord

Timelord

  • Lid sinds 05 juni 2010
  • Berichten 2336
  • Reputatie 20
  • #4
  • 9 juli 2015
  • 13:34

Goed. Toch even snel gekeken.
Ik zie dat je je handelingen in de Main Class doet en de afvragen in de subClass. (hopelijk is het zo goed omschreven)
Ik wilde juist alles in de subClass doen, maar ik krijg het idee dat dat niet mogelijk is ?

Oukitel K5000 7.0 (nog) ongeroot
Samsung Note geroot 4.2.1 Spirit Rom (op sterven na dood)
HTC Desire geroot Slim Rom 4.4.4
HTC one X + geroot 4.2.2 ViperX+ 2.1.1
One plus one geroot 6.01
LG P990 geroot 2.3
Samsung A8 ongeroot (werk)
Umidigi a5 Pro ongeroot (nog wel).

redbulletnl

redbulletnl

  • Lid sinds 02 september 2011
  • Berichten 2991
  • Reputatie 60
  • #5
  • 9 juli 2015
  • 14:10

Ik heb 100+ activities, doordat ik veel dingen herhaaldelijk gebruik moet ik of a) alles meerdere keren typen of b) ik maak er een aparte class van zodat ik alles kan hergebruiken.

Het database gedeelte gebruik je normaal gesproken bij meerdere activities (bijvoorbleed bij 1 voer je gegevens in en bij een andere bekijk je het). Als je in iedere activity de gehele database class uit typt ben je lang en dubbel bezig.

Dus bijv activitie1 roep je de DBclass aan, bij activitie2 kun je die ook aanroepen.
Als je activetie99 hebt roep je gewoon de zelfde database class aan. Veranderd er iets met de databaseclass hoef je het ook op maar 1 plek aan te passen

Timelord

Timelord

  • Lid sinds 05 juni 2010
  • Berichten 2336
  • Reputatie 20
  • #6
  • 9 juli 2015
  • 15:11

Ja, tot zover snapte ik het.

Ik wil dan ook een routine die de naam van een button doorgeeft en dan de inhoud van die button laat zien.
De naam van de button komt uit Main, het laten zien van de inhoud van de button wil ik in een subclass doen.

Vergeet niet dat ik behoorlijk aan het begin sta terwijl jij denk ik al best wel veel verder gevorderd bent. ;-)
Ooit wordt het voor mij ook gesneden koek, maar nu nog even niet. ;-)

Oukitel K5000 7.0 (nog) ongeroot
Samsung Note geroot 4.2.1 Spirit Rom (op sterven na dood)
HTC Desire geroot Slim Rom 4.4.4
HTC one X + geroot 4.2.2 ViperX+ 2.1.1
One plus one geroot 6.01
LG P990 geroot 2.3
Samsung A8 ongeroot (werk)
Umidigi a5 Pro ongeroot (nog wel).

redbulletnl

redbulletnl

  • Lid sinds 02 september 2011
  • Berichten 2991
  • Reputatie 60
  • #7
  • 9 juli 2015
  • 15:57

Als het het goed begrijp ga je van je MainActivity naar een 2e?
Dat doe je waarschijnlijk dan zo ongeveer:
startActivity(new Intent(Activity2.class));
Je kan een intent ook iets extras meegeven.
Intent i = new Intent(); i.putExtra("buttontekst", "button1"); i.putExtra("buttonid", "tekstVanButton"); startActivity(i);
In de onCreate of bij een zelfgemaakte functie bij je 2e activity
Intent i = getIntent(); String buttonTekst = i.getStringExtra("buttontekst"); String id = i.getStringExtra("buttonid");

Timelord

Timelord

  • Lid sinds 05 juni 2010
  • Berichten 2336
  • Reputatie 20
  • #8
  • 9 juli 2015
  • 17:04

Nee niet via een intent. In mijn eerste posting staat dat ik een Class aanroep.
Ik wil juist van dat intent af. Niet omdat het slecht is, maar ik wil nieuwe dingen leren.

Oukitel K5000 7.0 (nog) ongeroot
Samsung Note geroot 4.2.1 Spirit Rom (op sterven na dood)
HTC Desire geroot Slim Rom 4.4.4
HTC one X + geroot 4.2.2 ViperX+ 2.1.1
One plus one geroot 6.01
LG P990 geroot 2.3
Samsung A8 ongeroot (werk)
Umidigi a5 Pro ongeroot (nog wel).

Reageer

Om te reageren, dien je te zijn ingelogd. Druk op de onderstaande knop om in te loggen of maak een nieuwe account aan.

Inloggen Registreren