Bekomme immer NullPointer, vielleicht Android Bug?

keinbrain

keinbrain

Erfahrenes Mitglied
21
Hi, ich versuche seit geraumer Zeit die "supportedpicutreformats" auszulesen, jedoch bekomme ich IMMER NullPointer.

Code:
List<Integer> supportedPictureFormats = params.getSupportedPictureFormats();

Was davor oder danach steht spielt keine Rolle, ich hab alles bis auf diese Zeile auskommentiert und der NullPointer bleibt. Muss ich vielleicht vorher irgendwas initialisieren? Was hab ich vergessen ? ODer ist es vielleicht sogar ein 2.3 Bug?

Hoffe ihr könnt mir helfen, ich verzweifle hier grade total dran.
 
Was soll uns die Zeile sagen?! Wenn du sagst, dass der Rest davor egal ist, dann ist params null. Schau notfalls in die Implementierung der Getter Methode.
 
genau, so steht es bei mir in code auch weiter oben (das war natürlich nicht auskommentiert^^ ) trotzdem gibt mir genau diese zuordnung bzw. das eintragen der unterstützten Formate einen Nullpointer. Egal, wie ich diese Zeile umschreibe, etc. ich hab echt alles versucht, doch es kommt immer dieser blöde Fehler.
 
Du hast doch dein Debugfenster mit den Variablen drin udn welche Werte die haben. Schau doch mal, was da bei Params steht. Evtl. vorher auf die Zeile nen Breakpoint setzen.

Ansonsten würde ich vorschlagen: Kopier die Klasse, die ich oben verlinkt hab, und versuche es mit der. Dann kannst du nach und nach die nicht relevanten Codeteile streichen und mit etwas Glück findest du am Ende sogar raus, wo du den Fehler gemacht hast.
 
ok hier ist nochmal der gesamte Code :

Code:
Camera nCamera = Camera.open();
      Camera.Parameters params = nCamera.getParameters();

      int bli = 0 ;
        
          List<Integer> supportedPictureFormats = new ArrayList<Integer>();
                  
                  supportedPictureFormats.addAll(params.getSupportedPictureFormats());
        

        if (supportedPictureFormats.contains(PixelFormat.JPEG)){
            
             bli = 12 ;
        
        }


        String nap6 = (new Integer(bli)).toString();

        TextView tv3 = (TextView) findViewById(R.id.tv3);
        tv3.setText(nap6);    
   
    }
}

Andere Dinge wie "getPictureForamt, getPreviewFormat,getSupportedPicutreSizes" , etc , funktionert einwandfrei. aber diese eine Zeile lässt das Programm immer abstürzen
 
Code:
List<Integer> supportedPictureFormats = new ArrayList<Integer>();
Warum ArrayList und nicht "List"?

Ich arbeite jetzt zwar nicht schon so lange mit Java, aber ich glaube auch, du kannst keiner List/ArrayList aus Integern keine Liste (Rückgabe von "getSupportedPictureFormats()") zuweisen. Müsste da dann nicht "List<List>" stehen?
Weil dein Konstruckt passt irgendwie nicht ganz in mein Logikvertsändnis rein.

Aber lassen wir das mal.
Würde das so nicht viel besser passen?
Code:
List<Integer> supportedPictureFormats = params.getSupportedPictureFormats();
 
achso ja das mit "list" also GENAU so wie du es oben beschreiben hast hatte ich auch die ganze zeit, aber ich wollte man ausprobieren ob es vielleicht daran leigt das es keine arraylist ist. aber wie gesagt, dass problem existiertt auch exakt bei deinem codebeispiel. es wäre nett wenn du mal versuchen könntest das in eine testapp zu kopieren und zu starten.
 
Funktioniert!

Hab das in einer bereits bestehen App getestet.

Folgende 3 Zeilen von weiter oben hab ich direkt beim onCreate meiner Start-Activity eingetrahen, direkt anch dem "setContentView()". Ich erhalte keine NullPointerException.
Code:
Camera camera = Camera.open();
Camera.Parameters params = camera.getParameters();
List<Integer> supportedPictureFormats = params.getSupportedPictureFormats();
Das ist mein Import:
Code:
import java.util.List;
import android.hardware.Camera;
Und das hab ich noch in meinem Manifest, vielleicht fehlt das:
Code:
<uses-feature android:name="android.hardware.camera" />
<uses-permission android:name="android.permission.CAMERA" />
Ich muss jetzt leider noch einen Termin wahrnehmen.
Wenn es nicht funktionieren sollte, hilft vielleicht jemand anders weiter, ansonsten schau ich morgen nochmal danach.
 
ok ich komm nicht weiter. vielleicht is mein eclipse zu doof, vielleicht der emulator, vielleicht ich. ich hab zwar genau das gleiche wie du , permissions auch, aber es fuktioniert nicht. egal, ich versuchs weiter mit 'an den pc treten' und kopf-gege-die-wand-hauen . trotzdem danke
 
So, für den Post hab ich doch noch Zeit...

Da haben wir doch das Problem. Dein Emulator ist schuld.
Seit ich bei meiner ersten App, die die Kamera benutzt hat es nicht geschafft hab die Kamera zu aktivieren, benutze ich immer mein Handy oder Tablet zum debuggen (Samsung Galaxy S1 / Galaxy Tab 10.1).
Ich weiß jetzt nicht, wie es der Großteil der anderen Entwickler macht, aber das ist für mich auf jeden Fall die bessere Alternative.
Ich würde Dir raten, nimm dein USB-Kabel, stell dein Handy auf USB-Debugging um und versuch dort dein Glück.

Im Notfall erstell einfach eine neue App und füge nur diese 3 Zeilen ein und setze die Berechtigungen.
 
  • Danke
Reaktionen: keinbrain
ok dann is der emulator schuld, nur ein problem hab ich dann trotzdem. Hab kein android-Handy (ja ich weiß, developer , aber hat keinen droiden , absurd ^^) . mich wundert es nur das die ganzen anderen vorher beschriebenen werte abgefragt werden können, also supportedpicturesize, etc. naja vielleicht lass ich diese einr zeile dann einfach bei meiner app weg, wird schon keinen stören
 
Du wirst selbst wissen müssen, ob du die Daten, die die Funktion zurückliefert brauchst oder nicht. Wenn nicht spricht natürlich nichts dagegen diese wegzulassen.
Ich hatte wie gesagt schon Probleme damit überhaupt ein Bild der Webcam oder ein anderes Bild da rein zu bekommen. Da war immer nur ein Schachbrettmuster zu sehen. Geschafft hab ich es nie.

Zum Debuggen reicht das übrigens schon aus, auch wenn das Display etwas klein ist. Aber ich hab die Erfahung gemacht, was auf nem kleinem Display gut aussieht, wird auf einem großen nicht schlechter. ;)
Huawei Ideos X3 Handy 3,2 Zoll schwarz: Amazon.de: Elektronik


Zu deinem Problem:
Du kannst ja mal deine App kompilieren und mir per Mail zukommen lassen, die schick ich Dir dann per PN wenn du willst, dann schau ich mal, ob es bei mir funktioniert. Alternativ geht auch eine kurze "Hello World"-App mit nur den 3 oben genannten Zeilen. Dann hättest du zumindest gewissheit, dass es an deinem Emulator liegt.


Die Funktion gibt es auch erst seit API-Level 5. Hast du das auch so eingestellt? Es gibt/gab in Eclipse/ADT einen Bug, so dass er bei einem Projekt nicht meckert, wenn Methoden verwendet werden, die gar nicht dem API-Level entsprechen. Erst seit dem neusten Update bekomme ich entsprechende Hinweise. Ich hab aktuell sogar noch eine App im Market bei der das so ist und die ich sogar kompilieren konnte. Bin gerade dabei alles anzupassen. Musste dadurch das API-Level von 3 auf 8 erhöhen.


Also das kannst du ja noch checken und dich dann wieder melden, wenn du mit der gefunden Lösung noch nicht zufrieden bist.
 
  • Danke
Reaktionen: keinbrain
Also danke für das rausgesuchte Handy, aber zurzeit kann ich das echt nicht kaufen ^^ Ich wollte aber unbedingt das Nexus 7 kaufen, sobald es in Europa erhältlich ist, ich denke das reicht dann erstmal zum testen :D

Das du diese 3 Zeilen nochmal testest ist echt nicht nötig, ich will keine Zeile im Programmcode haben, die ich vor jedem Emulatortest auskommentieren muss, daher werde ich sie einfach weglassen, wie gesagt, es ist eigentlich auch kein wesentlicher Bestandteil meiner App.

Und das Api-Level ist auf 10 , die ganzen Cameraparameter liegen bei 5, daher denke ich nicht dass das das Problem ist (wow 3 das(s) xD )

Also danke für deine Mühe :)
 

Ähnliche Themen

M
Antworten
4
Aufrufe
1.168
swa00
swa00
5
Antworten
0
Aufrufe
1.140
586920
5
B
Antworten
4
Aufrufe
469
bb321
B
Zurück
Oben Unten