[Android] Basis probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Anoniem: 274837

Topicstarter
Hallo allemaal,

ik probeer voor het eerst in m'n leven een heel klein programma voor Android te maken, om alles even onder de knie te krijgen. Nu loop ik echter al héel snel vast.

Java: HogerLager
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package com.MSinteur.HogerLager;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class HogerLager extends Activity{
    
    TextView txtResult = (TextView) findViewById(R.id.txtResult);
    
    public static Integer curNumber = 5;
    public static Integer newNumber;
    
    private Button btnHoger;
    private Button btnLager;
    
    public void onCreate(Bundle savedInstanceState) {
        
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        this.btnHoger.setOnClickListener(new OnClickListener() {
             @Override
             public void onClick(View v) {
                    curNumber = newNumber;
                    newNumber = randomNumber();
                    if(curNumber <= newNumber){
                        txtResult.setText("Fout geraden");
                    }
                    else{
                        txtResult.setText("Goed geraden");
                    }
                }
        });
        this.btnLager.setOnClickListener(new OnClickListener() {
         @Override
         public void onClick(View v) {
                curNumber = newNumber;
                newNumber = randomNumber();
                if(curNumber >= newNumber){
                    txtResult.setText("Fout geraden");
                }
                else{
                    txtResult.setText("Goed geraden");
                }    
            }
    });
    
    }
    
    public int randomNumber(){
        Integer randomNumber;
        randomNumber = (int) Math.random();
        return randomNumber;
    }

}


Ik heb bovenstaande code alleen als ik het programma opstart crasht ie direct. Dit gebeurt iedere keer als ik het volgende toevoeg:

Java: HogerLager
1
2
3
4
5
6
7
    TextView txtResult = (TextView) findViewById(R.id.txtResult);
    
    public static Integer curNumber = 5;
    public static Integer newNumber;
    
    private Button btnHoger;
    private Button btnLager;


Als ik dit weghaal draait het programma wel maar dan doet het uiteraard niets.

Weet iemand wat het probleem kan zijn of waar ik dan zo gigantisch de fout in ga?

Alvast bedankt voor jullie antwoord.

Met vriendelijke groet,

Marcel Sinteur

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 01-06 18:50

NMe

Quia Ego Sic Dico.

Wat zegt de debugger? Als je Eclipse gebruikt: F11 in plaats van control+F11 gebruiken om te runnen. Wel even debugable op true zetten in je manifest. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Anoniem: 274837

Topicstarter
NMe schreef op dinsdag 05 april 2011 @ 12:36:
Wat zegt de debugger? Als je Eclipse gebruikt: F11 in plaats van control+F11 gebruiken om te runnen. Wel even debugable op true zetten in je manifest. ;)
Als ik 'm debug krijg ik dit:

Java: HogerLager
1
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.MSinteur.HogerLager/com.MSinteur.HogerLager.HogerLager}: java.lang.NullPointerException

Acties:
  • 0 Henk 'm!

  • Arie-
  • Registratie: December 2008
  • Niet online
Mijn Java even oppoetsen, maar als ik je code lees krijg ik de volgende vragen:
- Wanneer krijgt newNumber een waarde?
- Wanneer assign je de waarde van newNumber aan curNumber?

Acties:
  • 0 Henk 'm!

Anoniem: 274837

Topicstarter
Arie- schreef op dinsdag 05 april 2011 @ 12:51:
Mijn Java even oppoetsen, maar als ik je code lees krijg ik de volgende vragen:
- Wanneer krijgt newNumber een waarde?
- Wanneer assign je de waarde van newNumber aan curNumber?
Ehh... newNumber krijgt pas een waarde als op de button geklikt wordt. (Fout neem ik aan? ;-))
En dat laatste doe ik ook als er op de button geklikt wordt.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 01-06 18:50

NMe

Quia Ego Sic Dico.

Oh, er zijn wel meer dingen mis hoor. Je koppelt je buttons nergens aan knoppen op je layoutresource, dus dat zijn lege knoppen die nergens op staan. Er valt dus niks te klikken/tappen. Je gebruikt Integers en ints door elkaar, en je zit maar wat over en weer te typecasten. Niet handig. Sowieso heeft het hier als bijkomend nadeel dat newNumber null is bij je eerste run. En verder: waarom zijn newNumber en curNumber static?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Anoniem: 274837

Topicstarter
NMe schreef op dinsdag 05 april 2011 @ 13:10:
Oh, er zijn wel meer dingen mis hoor. Je koppelt je buttons nergens aan knoppen op je layoutresource, dus dat zijn lege knoppen die nergens op staan. Er valt dus niks te klikken/tappen. Je gebruikt Integers en ints door elkaar, en je zit maar wat over en weer te typecasten. Niet handig. Sowieso heeft het hier als bijkomend nadeel dat newNumber null is bij je eerste run. En verder: waarom zijn newNumber en curNumber static?
Stom stom stom. Gelijk heb je, stomme fouten.

Java: HogerLager
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package com.MSinteur.HogerLager;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class HogerLager extends Activity{
    
    TextView txtResult = (TextView) findViewById(R.id.txtResult);
    
    public int curNumber = 5;
    public int newNumber = 0;
    
    Button btnHoger;
    Button btnLager;
    
    public void onCreate(Bundle savedInstanceState) {
        
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        btnHoger = (Button) findViewById(R.id.btnHoger);
        btnHoger.setOnClickListener(new OnClickListener() {
             @Override
             public void onClick(View v) {
                    curNumber = newNumber;
                    newNumber = randomNumber();
                    if(curNumber <= newNumber){
                        txtResult.setText("Fout geraden");
                    }
                    else{
                        txtResult.setText("Goed geraden");
                    }
                }
        });
        btnLager = (Button) findViewById(R.id.btnLager);
        btnLager.setOnClickListener(new OnClickListener() {
         @Override
         public void onClick(View v) {
                curNumber = newNumber;
                newNumber = randomNumber();
                if(curNumber >= newNumber){
                    txtResult.setText("Fout geraden");
                }
                else{
                    txtResult.setText("Goed geraden");
                }    
            }
    });
    
    }
    
    public int randomNumber(){
        int randomNumber;
        randomNumber = (int) Math.random();
        return randomNumber;
    }

}


Dit is het nu geworden.. nu worden de Buttons in ieder geval gekoppeld aan de Layout. Geen Integer en int meer door elkaar. De ints niet meer static en niet meer null.

Ik krijg echter nog steeds dezelfde fout.

Acties:
  • 0 Henk 'm!

  • Naj_Geetsrev
  • Registratie: Oktober 2002
  • Laatst online: 28-03-2024
Heb je de activity wel geregistreerd in de manifest? :).

Acties:
  • 0 Henk 'm!

Anoniem: 274837

Topicstarter
Naj_Geetsrev schreef op dinsdag 05 april 2011 @ 13:22:
Heb je de activity wel geregistreerd in de manifest? :).
Ik heb

code:
1
<activity android:name=".HogerLager" />


in het Manifest staan. Moet ik er nog meer inzetten? (Excuses voor het 'amateur' gehalte, maar ik heb nooit iets voor Android o.i.d. gemaakt.)

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 01-06 18:50

NMe

Quia Ego Sic Dico.

static double Math.random()
Returns a double value with a positive sign, greater than or equal to 0.0 and less than 1.0.
Voor integers zul je eerst moeten vermenigvuldigen. Hoe dat moet vind je vast wel ergens online, da's standaard Java (en Javascript).

Verder zou ik je class herschrijven zodat hij OnClickListener implementeert, dus public class HogerLager extends Activity implements OnClickListener


Vervolgens hoef je geen aparte listeners meer te maken voor beide buttons en kun je deze methode toevoegen aan je eigen class:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public void onClick(View v) {
    boolean guessedRight = false;
    curNumber = newNumber;
    newNumber = randomNumber(); 

    switch(v.getId()) {
        case R.id.btnHoger: 
            guessedRight = newNumber >= curNumber;
            break;
        case R.id.btnLager:
            guessedRight = newNumber <= curNumber;
            break;
        default:
            return;
    }
    if (guessedRight) {
        txtResult.setText("Goed geraden");
    }
    else {
        txtResult.setText("Fout geraden");
    } 
    finish();
}

Dit alles lost je probleem trouwens waarschijnlijk niet op, maar ik denk ook niet dat wij dat hier zomaar kunnen. Het handigste is als je zelf even door je code heen stept (in Eclipse: F5/F6/F7 in debugmodus voor step into/over/out) en kijkt op welke regel het nu eigenlijk mis gaat. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Anoniem: 241683

Ik denk dat het probleem hier zit:
TextView txtResult = (TextView) findViewById(R.id.txtResult);
Verander dit eens naar: TextView txtResult;

En onder je
setContentView(R.layout.main);
txtResult = (TextView) findViewById(R.id.txtResult);

Volgens mij probeer jij nu al een textview object te krijgen terwijl je xml niet ge-inflate is...

Acties:
  • 0 Henk 'm!

Anoniem: 274837

Topicstarter
Anoniem: 241683 schreef op dinsdag 05 april 2011 @ 13:52:
Ik denk dat het probleem hier zit:

[...]


Verander dit eens naar: TextView txtResult;

En onder je

[...]

txtResult = (TextView) findViewById(R.id.txtResult);

Volgens mij probeer jij nu al een textview object te krijgen terwijl je xml niet ge-inflate is...
Je hebt helemaal gelijk! Het was niet alleen de TextView.. hetzelfde geld natuurlijk voor de Buttons!

Dankjewel, het probleem is opgelost. :D

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 01-06 18:50

NMe

Quia Ego Sic Dico.

Anoniem: 274837 schreef op dinsdag 05 april 2011 @ 13:55:
[...]

Je hebt helemaal gelijk! Het was niet alleen de TextView.. hetzelfde geld natuurlijk voor de Buttons!

Dankjewel, het probleem is opgelost. :D
De buttons had je toch al op de goeie plek staan?

Verder raad ik je wel aan om naar mijn vorige reply te kijken ondanks dat je probleem is opgelost, in de eerste plaats omdat je random-code gewoon niet goed is en ten tweede omdat code replication (twee keer nagenoeg dezelfde functie schrijven) bijna altijd voor problemen zorgt. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Anoniem: 274837

Topicstarter
NMe schreef op dinsdag 05 april 2011 @ 13:58:
[...]

De buttons had je toch al op de goeie plek staan?

Verder raad ik je wel aan om naar mijn vorige reply te kijken ondanks dat je probleem is opgelost, in de eerste plaats omdat je random-code gewoon niet goed is en ten tweede omdat code replication (twee keer nagenoeg dezelfde functie schrijven) bijna altijd voor problemen zorgt. :)
Blijkbaar toch niet :$

Ik heb inderdaad gekeken naar wat je schreef en alles aangepast zoals jij zei. Ziet er ook een stuk netter uit moet ik zeggen! Dankjewel voor de tips. :)

Acties:
  • 0 Henk 'm!

Anoniem: 347253

Anoniem: 274837 schreef op dinsdag 05 april 2011 @ 12:47:
[...]

Als ik 'm debug krijg ik dit:

Java: HogerLager
1
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.MSinteur.HogerLager/com.MSinteur.HogerLager.HogerLager}: java.lang.NullPointerException
Ik weet dat het probleem al is opgelost, maar in Logcat/DDMS staat een paar regels lager onder RuntimeException een regel:

Caused by: error hier inclusief regelnummer.

Misschien een tip voor de volgende keer
Pagina: 1