[Ervaringen] Android SDK

Pagina: 1 2 3 4 5 Laatste
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Balachmar
  • Registratie: Mei 2002
  • Laatst online: 07-05 16:57

Balachmar

The truth is out there

Topicstarter
Mede-auteur:
  • jacobras
  • Registratie: Januari 2005
  • Laatst online: 08-05 15:24

jacobras

Afbeeldingslocatie: http://i47.tinypic.com/xgbif7.png
De Android SDK (Software Development Kit) is een verzameling van software om te programmeren voor het Android platform. De meeste mensen hier zullen Android ondertussen wel kennen, maar weten wellicht nog niet goed hoe ze moeten beginnen. Dit topic is bedoeld om ervaring over de SDK uit te wisselen. Dus hoe ben je begonnen, nuttige informatie, tutorials en dat soort zaken. Programmeervragen moeten worden gesteld in een apart topic.
Vragen over de SDK zelf kunnen ook gewoon in het topic (naast de ervaringen, tips en trucs, voorbeeldcode etc). Zo kan het topic toch een soort van naslagwerk worden terwijl het niet verzand in een shitload aan kleine vraagjes.
 
Afbeeldingslocatie: http://i45.tinypic.com/34dh8hk.png
Programmeren voor Android doe je in de taal Java. Normaal wordt deze uitgevoerd door de Java Virtual Machine, maar deze is niet echt geoptimaliseerd voor mobiele telefoons. Google heeft een eigen Virtual Machine geschreven, de Dalvik Virtual Machine. De code die je voor Android schrijft draait dus niet onder de normale JVM.

Een goed punt om te beginnen is:
http://developer.android.com/guide/index.html
 
Afbeeldingslocatie: http://i49.tinypic.com/2z4cnkh.png
Download en installatie instructies van de SDK: http://developer.android.com/sdk/1.5_r3/index.html
Er is ook een NDK, om native code voor Android te schrijven. Dit is alleen bedoeld voor high performance code! http://developer.android.com/sdk/ndk/1.5_r1/index.html
 
Afbeeldingslocatie: http://i50.tinypic.com/2cfqslv.png
V: Kan ik mijn code direct op mijn Android apparaat laten draaien?
A: Ja, installeer daarvoor eerst de USB driver en zet bij USB-debugging aan (in Android: instellingen - toepassingen - ontwikkeling - USB-foutopsporing). Als je nu verbinding maakt met je computer en een project gaat draaien zal deze meteen op je Android apparaat worden uitgevoerd.
 
Afbeeldingslocatie: http://i49.tinypic.com/23mknef.png
 

[ Voor 27% gewijzigd door jacobras op 22-06-2010 17:11 . Reden: Layout wijzigingen + eerste V&A toegevoegd ]

Systeempje; Ballaida of Avalon in GuildWars


Acties:
  • 0 Henk 'm!

  • spaceboy
  • Registratie: Februari 2001
  • Laatst online: 08-05 17:53

spaceboy

Op grote hoogte

Ik ben nog niet ver gekomen met "eigen werk", maar heb al wel wat Hello World gepiel gemaakt. Waar ik eigenlijk erg benieuwd naar ben: wie heeft er goede debug-tips? Of is de interne debugger van Eclipse afdoende? Als ik aan het playtesten ben krijg ik (tja, ik programmeer niet foutloos, IK kom er rustig voor uit) ;) vaak zo'n "onbekende fout: ik kap ermee" melding.

Beetje a la "object expected" in JavaScript, wie is er niet groot mee geworden? :)

[ Voor 11% gewijzigd door spaceboy op 27-07-2009 19:31 ]

Aan bovenstaande tekst kunnen geen rechten worden ontleend. Aan de tekst hieronder wel.


Acties:
  • 0 Henk 'm!

  • Pkunk
  • Registratie: December 2003
  • Laatst online: 05-05 19:18
Ik heb zelf al een aantal keer try catches moeten gebruiken om te weten waarom ik null pointer Exceptions krijg. Eclipse zegt dan "source not found" waar je niet zoveel aan hebt. De innerexception in je catch geeft vaak wat meer info in zo'n geval. Of hebben mensen al nettere oplossingen gevonden?

Maar leuk dat er hier eindelijk een topic over is :)

Overigens ben ik zelf voornamelijk aan het spelen met google maps en routeplanning. Ik vind het erg lekker werken allemaal en de documentatie is ook prima. Al zijn er op sommige plekken nog wat depricated voorbeelden.

[ Voor 31% gewijzigd door Pkunk op 27-07-2009 19:38 ]

Hallo met Tim


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 19:28

Creepy

Tactical Espionage Splatterer

En omdat er al wat Android topics in Non-Windows Based Mobiles & PDA's staan ook even een alias daar naar toe :)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • falcon4ever
  • Registratie: Oktober 2001
  • Laatst online: 07-04-2021
spaceboy schreef op maandag 27 juli 2009 @ 19:30:
Ik ben nog niet ver gekomen met "eigen werk", maar heb al wel wat Hello World gepiel gemaakt. Waar ik eigenlijk erg benieuwd naar ben: wie heeft er goede debug-tips? Of is de interne debugger van Eclipse afdoende? Als ik aan het playtesten ben krijg ik (tja, ik programmeer niet foutloos, IK kom er rustig voor uit) ;) vaak zo'n "onbekende fout: ik kap ermee" melding.

Beetje a la "object expected" in JavaScript, wie is er niet groot mee geworden? :)
Gewoon eclipse met de android plugin installeren. Vervolgens is er prima te debuggen met logcat (+breakpoints) in de emulator als op de echter hardware.

Acties:
  • 0 Henk 'm!

  • WeeJeWel
  • Registratie: April 2007
  • Laatst online: 27-04 21:07
Ik probeer al een tijdje de HTC Sense rom te draaien, zonder resultaat. Enig idee hoe dit wel gaat werken?

Homey — Critics are those without skills to create.


Acties:
  • 0 Henk 'm!

  • Jeanpaul145
  • Registratie: Juli 2007
  • Laatst online: 24-10-2024
WeeJeWel schreef op maandag 03 augustus 2009 @ 18:52:
Ik probeer al een tijdje de HTC Sense rom te draaien, zonder resultaat. Enig idee hoe dit wel gaat werken?
Niet echt een Android programming vraag IMNSHO.

Ik ben zelf wel al een android programming boek aan t doorwerken, en k moet zeggen dat Android er een apart, maar eigenlijk best logisch conceptueel model op nahoudt:
-Activities: Een gefocust ding dat een user kan doen. Bijvoorbeeld een nummer selecteren om af te spelen.
-Services: Code dat in de achtergrond draait. Bijvoorbeeld het geselecteerde nummer afspelen.
-(Broadcast)Receivers: Hiermee kan je messages van het systeem opvangen en je app er iets mee laten doen.
-Intents: Geeft aan wat je wil doen. Een intent kan je sturen naar een Activity, Receiver of Service, die daar dan op kunnen reageren. Er zijn 2 soorten: impliciet en expliciet. Impliciet zegt "Ik wil dit doen" en Android vogelt daar de meest geschikte ontvanger voor uit. Expliciet zegt "ik wil dat die dit gaat doen". Impliciet is bijna altijd handiger (zorgt voor late binding, en dus code ontkoppeling), het zorgt ook voor nieuwe innovatieve apps in de Google Market.
-IntentFilters: Onderdeel van Activities, Receivers en Services. Geven aan voor welke Intents ze gevoelig zijn.

Er zijn nog veel meer aspecten (zoals persistence), maar met deze dingen heb je al een aardig beeld van de kracht van Android. Intents

:j


Acties:
  • 0 Henk 'm!

  • Pkunk
  • Registratie: December 2003
  • Laatst online: 05-05 19:18
Welk boek als ik het vragen mag? Is het aan te raden?

Hallo met Tim


Acties:
  • 0 Henk 'm!

  • Balachmar
  • Registratie: Mei 2002
  • Laatst online: 07-05 16:57

Balachmar

The truth is out there

Topicstarter
@JeanPaul145:
Ja, het leuke aan die Intents is dus dat je ze public kan maken, waardoor anderen jouw Intent kunnen hergebruiken. Dat is ook wat ik heb kunnen doen met de Pricewatch Scanner app. Ik gebruik gewoon de SCAN Intent van Barcode Scanner (Of een andere barcode scanner die ene Scan Intent heeft).
Zorgt er meteen voor dat je niet 10 keer dezelfde scan library op je telefoon hebt staan.

Systeempje; Ballaida of Avalon in GuildWars


Acties:
  • 0 Henk 'm!

  • WeeJeWel
  • Registratie: April 2007
  • Laatst online: 27-04 21:07
Jeanpaul145 schreef op maandag 03 augustus 2009 @ 19:17:
[...]


Niet echt een Android programming vraag IMNSHO.
Ik bedoel Sense in de emulator! :)

Homey — Critics are those without skills to create.


Acties:
  • 0 Henk 'm!

  • Balachmar
  • Registratie: Mei 2002
  • Laatst online: 07-05 16:57

Balachmar

The truth is out there

Topicstarter
WeeJeWel schreef op dinsdag 04 augustus 2009 @ 10:52:
[...]

Ik bedoel Sense in de emulator! :)
Dan nog heeft dat weinig met de SDK te maken. Lees aub nog eens de startpost door.

Systeempje; Ballaida of Avalon in GuildWars


Acties:
  • 0 Henk 'm!

Anoniem: 69767

Dummie-guide voor het bouwen van een 1e Android App.

[ Voor 25% gewijzigd door Anoniem: 69767 op 06-08-2009 08:31 ]


Acties:
  • 0 Henk 'm!

  • croxz
  • Registratie: Juni 1999
  • Laatst online: 22:46
Beginnersvraagje: heb je een android devevelopers phone nodig om te kunnen ontwikkelen met de SDK? Zo nee, waar is die dev phone dan voor bedoeld?

Acties:
  • 0 Henk 'm!

  • Pkunk
  • Registratie: December 2003
  • Laatst online: 05-05 19:18
croxz schreef op maandag 10 augustus 2009 @ 10:21:
Beginnersvraagje: heb je een android devevelopers phone nodig om te kunnen ontwikkelen met de SDK? Zo nee, waar is die dev phone dan voor bedoeld?
Die heb je op zich niet nodig, maar als je met zaken als gps en de camera aan de slag gaat kom je niet ver met de emulator (ik neem aan dat je de emulator bedoeld?). Daarbij is de emulator traag als dikke -piep-

Hallo met Tim


Acties:
  • 0 Henk 'm!

  • Ichiko
  • Registratie: Augustus 2009
  • Laatst online: 03-10-2024
De Eclipse plugin werkt als een zonnetje.

Ik kan zeker beamen dat de Android Developer Guide een goed startpunt is, al zullen mensen zonder java kennis wellicht eerst iets in de java principes moeten duiken. (OO, constructor, inheritance,...)

Tegen welke problemen liep ik aan?
De PATH omgevingsvariabele op mijn Mac veranderen. Eerlijk gezegd heb ik het niet helemaal op kunnen lossen. Helaas kan ik vrijwel niet met de Terminal uit de voeten, dus weet ik niet hoe ik een .bash_profile bestand moet aanmaken. (Of kan zien dat ik er al 1 heb 8)7 ).

Vervolgens zou ik ook niet weten hoe ik in dit bestand moet kijken, laat staan het te veranderen. Omdat ik niet wist of er al ergens de PATH variabele geset werd, durfde ik ook niet aan om export PATH=${PATH}:<your_sdk_dir>/tools uit te voeren.

Conclusie: Ik ben te lui geweest om te googelen hoe het wel moet. Ik heb om mijn Android Virtual Device (AVD) aan te maken gewoon het volledige pad in Terminal gebruikt. Dat werkt ook prima. Verder heb ik de PATH variabele nog niet nodig gehad.

Offtopic:
Ik ben nieuw op het forum. In de openingspost zie ik dat programmeer vragen in eigen topic moeten. Is hier een verzameltopic van, of moet ik zelf een nieuw topic aanmaken in Devschuur > Programming?

Acties:
  • 0 Henk 'm!

  • croxz
  • Registratie: Juni 1999
  • Laatst online: 22:46
Pkunk schreef op maandag 10 augustus 2009 @ 11:26:
[...]

Die heb je op zich niet nodig, maar als je met zaken als gps en de camera aan de slag gaat kom je niet ver met de emulator (ik neem aan dat je de emulator bedoeld?). Daarbij is de emulator traag als dikke -piep-
Ik denk misschien te simpel, maar kan je niet een .apk generen en deze op je (normale) G1 installeren om het programma te testen?

Acties:
  • 0 Henk 'm!

Anoniem: 69767

Pkunk schreef op maandag 10 augustus 2009 @ 11:26:
[...]

Die heb je op zich niet nodig, maar als je met zaken als gps en de camera aan de slag gaat kom je niet ver met de emulator (ik neem aan dat je de emulator bedoeld?). Daarbij is de emulator traag als dikke -piep-
En de Dev Phone is ook wel handig als je in Android zelf (het OS) wilt sleutelen. Standaard phones heb je geen root e.d. (is wel te doen, maar met een Dev Phone is alles al geregeld).

Acties:
  • 0 Henk 'm!

  • Balachmar
  • Registratie: Mei 2002
  • Laatst online: 07-05 16:57

Balachmar

The truth is out there

Topicstarter
croxz schreef op maandag 10 augustus 2009 @ 11:42:
[...]

Ik denk misschien te simpel, maar kan je niet een .apk generen en deze op je (normale) G1 installeren om het programma te testen?
Ja, dit kan.
Moet je wel even aanvinken dat je programma's wil kunnen installeren buiten de market om.

Systeempje; Ballaida of Avalon in GuildWars


Acties:
  • 0 Henk 'm!

  • RoD
  • Registratie: September 2004
  • Niet online

RoD

Admin Mobile & FP PowerMod
Anoniem: 69767 schreef op maandag 10 augustus 2009 @ 11:52:
[...]


En de Dev Phone is ook wel handig als je in Android zelf (het OS) wilt sleutelen. Standaard phones heb je geen root e.d. (is wel te doen, maar met een Dev Phone is alles al geregeld).
Tegenwoordig is dat heel makkelijk. Dus kun je met vrijwel alle Android-phones leuk knutselen :)

Acties:
  • 0 Henk 'm!

  • RunaR
  • Registratie: Juni 2001
  • Laatst online: 14-04 09:57
Volgens mij is root toegang helemaal niet nodig. Ik heb zitten debuggen op mijn niet geroote Hero. Je moet wel een vinkje aanzetten onder Toepassingen -> Ontwikkeling -> USB-foutopsporing. Vaag is alleen dat het wel op een pc werk (win xp 64) en niet op de andere (vista 32). Ik heb nog niet uit gezocht waarom, de emulator voldoet vaak ook.

[ Voor 15% gewijzigd door RunaR op 26-08-2009 11:11 ]

ISS Detector en meer voor Android


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 08-05 12:19

Janoz

Moderator Devschuur®

!litemod

Ik ben even bezig met een layout. Hierbij wilde ik styles gaan gebruiken zodat de layout zelf (in xml trouwens) wat clean bleef.

Mijn probleem is echter dat de editor in eclipse die styles compleet negeert.

Simpel voorbeeltje hier:

styles.xml
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="Value">
        <item name="android:layout_width">fill_parent</item> 
        <item name="android:layout_height">wrap_content</item>
        <item name="android:gravity">center</item>
        <item name="android:textStyle">bold</item>
    </style>
    <style name="Label">
        <item name="android:layout_width">fill_parent</item> 
        <item name="android:layout_height">wrap_content</item>
    </style>
</resources>

some_layout.xml
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
    
   
    <TextView
        android:text="@string/some_label"
        style="@style/Label"/>
    <TextView 
        android:text="Some Value"
        style="@style/Value"/>
</LinearLayout>


Als ik vervolgens bij de layout tab kijk blijft het scherm zwart (alsof de layout width en height niet gezet zijn). Wanneer ik de layout open in de emulator werkt het echter wel zoals ik zou verwachten. Het rechstreeks invullen van de attributen werkt daarnaast ook gewoon in eclipse zelf. Andere vreemde dingen die misschien ook met dit probleem te maken kunnen hebben is dat elke xml file op 1 of andere manier een warning icoontje in de kantlijn hebben terwijl daar geen boodschap bij zit. Ook krijg ik bij het opstarten de melding:

Unknown error: SDK is not loaded yet

Hierop kon ik nog wel wat google resultaten vinden, maar mijn targets zijn allemaal geselecteerd en er zijn verder geen updates beschikbaar.

Herkent iemand dit probleem?

-edit-
Ik zie niet http://osdir.com/ml/AndroidDevelopers/2009-06/msg00602.html , daar beweert iemand dat de ADT plugin niks doet met de style property.

[ Voor 3% gewijzigd door Janoz op 31-08-2009 16:13 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Balachmar
  • Registratie: Mei 2002
  • Laatst online: 07-05 16:57

Balachmar

The truth is out there

Topicstarter
@Janoz:
Kun je hem dan niet even proberen op een telefoon? Dan weet je of het aan Eclipse ligt.

Systeempje; Ballaida of Avalon in GuildWars


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 08-05 12:19

Janoz

Moderator Devschuur®

!litemod

Ik weet al zeker dat het aan eclipse ligt aangezien hij in de emulator wel gewoon werkt. Op een telefoon kan ik het niet proberen aangezien ik pas 16-9 een nieuwe kan bestellen en ik het op dit moment dus nog zonder een Android telefoon moet doen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Wiebbe
  • Registratie: Februari 2001
  • Laatst online: 04-05 14:10

Wiebbe

<none />

De ADT plugin werkt sowieso niet lekker. Hij kan Tabs, Viewflippers en nog veel meer widgets gewoon niet aan. Ik gebruik de layout editor ook eigenlijk totaal niet. Gewoon alles bekijken in de emulator en bouwen in XML. Kost inderdaad helaas net wat meer tijd.. Maar het moet maar ;)

Die error van SDK not loaded geeft hij volgens mij altijd in het begin, hij wil dan je projecten gaan proef builden maar kan dan nog niet omdat nog niet alles geladen is. Je ziet onderin ook een balk lopen met wat hij aan het laden is via de ADT plugin.

Oh noes.. No more TreinTijden :(


Acties:
  • 0 Henk 'm!

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 21:48

alienfruit

the alien you never expected

Ja, de designer/viewer is echt waardeloos. Verder is Android erg mooi alleen liep ik wel tegen een paar problemen in Cupcake aan. Bijvoorbeeld als je in een layout #00000000 gebruikt en later in de layout een zwart vlak wil hebben dan werkt dit soms niet. Omdat er een kleurentabel wordt bijgehouden die maar 6-bit is. Je moet dan #000001 gebruiken om het toch zwart te krijgen. Dit koste mij flink wat tijd om op te lossen. Verder vind ik de layout mechanismen erg fijn werken. Ik probeer nu al een tijdje om een activity in te faden bij weergave en uit te faden als het moet verdwijnen. Alleen ik krijg het niet voor elkaar! Volgens mij kan dit niet? Klopt dit?

Acties:
  • 0 Henk 'm!

  • adgjm
  • Registratie: September 2008
  • Laatst online: 22-05-2023
Kben nu een tijdje aan het knutselen met die SDK al loop ik steeds tegen een probleem aan met Tabs waar ik op internet eigenlijk niet duidelijk een antwoord voor vind.

Ik probeer om een programma te maken met drie tabs (een eitje), maar op Tab1 moeten 2 buttons komen die dus niet op de andere tabs zichtbaar mogen zijn. Weet iemand hoe dit mogelijk is?

Acties:
  • 0 Henk 'm!

  • hypnos
  • Registratie: Mei 2000
  • Niet online
Voor elke tab moet je een view toekennen. Je kunt ook (via Intents) Activity's in je tabs plaatsen.
Zie: http://developer.android....iews/hello-tabwidget.html
En voor activity's: http://www.androidguys.com/2008/12/05/tabs-with-intents/

[ Voor 0% gewijzigd door hypnos op 06-09-2009 20:14 . Reden: Woordje vergeten ]


Acties:
  • 0 Henk 'm!

  • adgjm
  • Registratie: September 2008
  • Laatst online: 22-05-2023
Dat van die views wist ik al, maar de tabs-with-intents is nieuw voor me! Hartsikkte bedankt!

Acties:
  • 0 Henk 'm!

  • Balachmar
  • Registratie: Mei 2002
  • Laatst online: 07-05 16:57

Balachmar

The truth is out there

Topicstarter
Een van de dingen waar mensen ook weleens tegenaanlopen bij het gebruik van de SDK is dat de Activity herstart wordt als de orientatie veranderd.
Eigenlijk niet eens herstart, maar een nieuwe instantie wordt aangemaakt.
Dit kan wel eens voor gekke dingen zorgen. Echter je kan informatie doorspelen naar de te maken instantie bij een Orientation Change of iets dergelijks.
Zie: http://android-developers...n-orientation-change.html
Hiermee kun je er dan altijd voor zorgen dat de gebruiker hetzelfde scherm te zien krijgt na de orientatie verandering.

Systeempje; Ballaida of Avalon in GuildWars


Acties:
  • 0 Henk 'm!

  • bartos88
  • Registratie: Oktober 2006
  • Laatst online: 18-04-2024
Ik heb een vraagje over het gebruiken van de SQLiteDatabase in android. Hoe kan ik de database vullen van tevoren? Ik vul hem nu namelijk tijdens het starten van de app, maar dan wordt het elke keer naast de oude data bijgeschreven en wordt de database steeds groter. Ik heb verder geen android of database-ervaring, dus forgive me als het een stomme vraag is :P

Acties:
  • 0 Henk 'm!

  • Wiebbe
  • Registratie: Februari 2001
  • Laatst online: 04-05 14:10

Wiebbe

<none />

Gewoon bij je onCreate van je DatabaseHelper? Je moet ergens de CREATE TABLE zooi uitvoeren, je kan hier ook gewoon meteen je inserts erbij knallen!

Oh noes.. No more TreinTijden :(


Acties:
  • 0 Henk 'm!

  • bartos88
  • Registratie: Oktober 2006
  • Laatst online: 18-04-2024
Ah ok thanks, en die database wordt niet gesaved op de telefoon ofzo? Als ik namelijk bij de on create van de main class (dus niet de databasehelper) inserts doe, dan zie ik dat elke keer dat ik de app run, de database is gegroeid, alsof hij alles onthoudt.

Acties:
  • 0 Henk 'm!

  • Wiebbe
  • Registratie: Februari 2001
  • Laatst online: 04-05 14:10

Wiebbe

<none />

bartos88 schreef op donderdag 01 oktober 2009 @ 21:17:
Ah ok thanks, en die database wordt niet gesaved op de telefoon ofzo? Als ik namelijk bij de on create van de main class (dus niet de databasehelper) inserts doe, dan zie ik dat elke keer dat ik de app run, de database is gegroeid, alsof hij alles onthoudt.
Je moet even kijken hoe SQLiteOpenHelper werkt. Deze class extend je met een aantal methodes zodat hij zelf kijkt of de database al bestaat, zo niet dan create hij hem. Zo ja, dan kan je gewoon beginnen met queries uitvoeren.

http://developer.android....ite/SQLiteOpenHelper.html

Oh noes.. No more TreinTijden :(


Acties:
  • 0 Henk 'm!

  • Maverick
  • Registratie: Oktober 2001
  • Laatst online: 08-05 13:28
Jeanpaul145 schreef op maandag 03 augustus 2009 @ 19:17:
[...]


Niet echt een Android programming vraag IMNSHO.

Ik ben zelf wel al een android programming boek aan t doorwerken....
Welk boek is dat en kun je het aanraden? Ik zou zelf graag voor android willen ontwikkelen namelijk. Klein bijkomend probleem is dat ik 0,0 JAVA ervaring heb. Kan ik dan beter beginnen met een java voor dummies boek, of legt het boek (of een ander android boek als iemand een tip heeft) genoeg basics over java uit om zonder problemen te kunnen devven?
(in wat algemenere vorm is mijn vraag eigenlijk, welk boek over android ontwikkeling kunnen jullie aanraden voor iemand zonder java kennis :) )

[ Voor 10% gewijzigd door Maverick op 02-10-2009 21:32 ]

PSN: DutchTrickle PVoutput


Acties:
  • 0 Henk 'm!

  • DeoDupke
  • Registratie: Maart 2002
  • Laatst online: 26-03-2024
ligt denk ik een beetje aan wat je ervaring is met programmeren. Heb je OOP ervaring? Studie software engineering gedaan? Of wil je gewoon beginnen met programmeren?

No worries m8


Acties:
  • 0 Henk 'm!

  • Wiebbe
  • Registratie: Februari 2001
  • Laatst online: 04-05 14:10

Wiebbe

<none />

Maverick schreef op vrijdag 02 oktober 2009 @ 21:28:
[...]

Welk boek is dat en kun je het aanraden? Ik zou zelf graag voor android willen ontwikkelen namelijk. Klein bijkomend probleem is dat ik 0,0 JAVA ervaring heb. Kan ik dan beter beginnen met een java voor dummies boek, of legt het boek (of een ander android boek als iemand een tip heeft) genoeg basics over java uit om zonder problemen te kunnen devven?
(in wat algemenere vorm is mijn vraag eigenlijk, welk boek over android ontwikkeling kunnen jullie aanraden voor iemand zonder java kennis :) )
Ik ben zo goed als onbekend met Java begonnen met android programming. Ik heb wel een Informatica opleiding achter de rug, maar was voornamelijk bekend met C#. Als je kan programmeren in OOP (zoals de poster boven mij aan geeft) is het heel makkelijk in te stappen. Ik vind java een erg aardige taal om in te werken.

Ik zou zeker de boeken van Mark Murphy aanraden: http://commonsware.com/books.html

Hij heeft ze ook al ebook beschikbaar, voor mij een plus, maar hij weet ook gewoon waar hij het over heeft. Je zal hem ook rete vaak terug zien komen in de android developers groups voor hulp en info!

Als je echt bij programmeren op zich begint zou ik even naar het programming forum gaan, daar hebben ze een FAQ'je over "How to learn programming".

PRG FAQ

Oh noes.. No more TreinTijden :(


Acties:
  • 0 Henk 'm!

  • Maverick
  • Registratie: Oktober 2001
  • Laatst online: 08-05 13:28
Ik heb eerlijk gezegd verdomd weinig programmeer ervaring. Heb wel eens wat in VBA en php gedaan, maar veel verder dan voorbeeld codes knippen plakken kom ik niet.
Die boeken van mark murphy lijken me wel wat, alleen staan ze op amazon alleen 2e hands voor meer dan duizend euro. Iemand die een plek weet waar ik dat ding kan bestellen?

PSN: DutchTrickle PVoutput


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 08-05 12:19

Janoz

Moderator Devschuur®

!litemod

Persoonlijk denk ik niet dat je heel veel aan die boeken gaat hebben. De boeken gaan uit van een beginner op het gebied van mobile development. Als programmeren nog helemaal nieuw voor je is dan is het misschien handiger om daar eerst eens mee te beginnen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Wiebbe
  • Registratie: Februari 2001
  • Laatst online: 04-05 14:10

Wiebbe

<none />

Janoz schreef op zondag 04 oktober 2009 @ 21:02:
Persoonlijk denk ik niet dat je heel veel aan die boeken gaat hebben. De boeken gaan uit van een beginner op het gebied van mobile development. Als programmeren nog helemaal nieuw voor je is dan is het misschien handiger om daar eerst eens mee te beginnen.
Helemaal mee eens, zoals ik aangaf wordt er bij die boeken verwacht dat je aan goede basis van kennis hebt over programmeren en al helemaal op een OO manier. Dus als dat je al niks zegt (en bij PHP en VB is goed OO programmeren erg moeilijk imho ;) ) is het echt erg verstandig eerst te gaan werken aan je programmeer skills zelf!

[edit]
Overgens, als ik op bol.com het ISBN in tik:
http://www.bol.com/nl/p/b...01004006215595/index.html

Zal bij de lokale bruna ook wel kunnen denk ik ;)

[ Voor 13% gewijzigd door Wiebbe op 05-10-2009 08:51 ]

Oh noes.. No more TreinTijden :(


Acties:
  • 0 Henk 'm!

Anoniem: 147846

Ik raad je aan om gewoon lekker in het diepe te springen en het te proberen. Al snap je het basis if-else-while gedoe dan kan je best beginnen met Android applicaties ontwikkelen. Natuurlijk is het moeilijk, maar dan blijf je ten minste bezig met je doel. Als je nu eerst apart gaat leren programmeren snap je de basis pas over een aantal maanden en dan moet je nog eens Android gaan leren.

Kortom, begin met de basis van Android (wat Activities, views, intents etc zijn) en probeer spelenderwijs een simpel programmaatjes te maken, een calculator ofzo.

Acties:
  • 0 Henk 'm!

  • Boy
  • Registratie: November 2001
  • Laatst online: 07-05 16:00

Boy

www.byoscoop.nl

Wiebbe schreef op maandag 05 oktober 2009 @ 08:50:
[...]


Helemaal mee eens, zoals ik aangaf wordt er bij die boeken verwacht dat je aan goede basis van kennis hebt over programmeren en al helemaal op een OO manier. Dus als dat je al niks zegt (en bij PHP en VB is goed OO programmeren erg moeilijk imho ;) ) is het echt erg verstandig eerst te gaan werken aan je programmeer skills zelf!

[edit]
Overgens, als ik op bol.com het ISBN in tik:
http://www.bol.com/nl/p/b...01004006215595/index.html

Zal bij de lokale bruna ook wel kunnen denk ik ;)
Ik wil ook Android gaan programmeren. Is dit boek dan ook goed voor iemand die C++ programmeur is en geen / weinig Java kent?

Naar de bioscoop? => gebruik de app op Byoscoop.nl


Acties:
  • 0 Henk 'm!

  • Wiebbe
  • Registratie: Februari 2001
  • Laatst online: 04-05 14:10

Wiebbe

<none />

Boy schreef op maandag 05 oktober 2009 @ 11:13:
[...]


Ik wil ook Android gaan programmeren. Is dit boek dan ook goed voor iemand die C++ programmeur is en geen / weinig Java kent?
Tja, ik ben altijd van mening dat je als echte programmeur eigenlijk bijna elke taal zomaar kan oppakken zonder echt de taal te hoeven kennen. Als jij dus goed kan programmeren is de instap naar java niet zo heel groot meer.

Syntax leren is zo gedaan en de tips & tricks bij sommige talen leer je dan best snel. Dit boek is echt een intro voor Android en hoe je daar dingen doet. Volgens mij zijn talen als C# en Java alleen maar makkelijker als je C++ gewent bent. Je wordt verwend bij de "nieuwere" talen ;)

Oh noes.. No more TreinTijden :(


Acties:
  • 0 Henk 'm!

  • Boy
  • Registratie: November 2001
  • Laatst online: 07-05 16:00

Boy

www.byoscoop.nl

Wiebbe schreef op maandag 05 oktober 2009 @ 11:53:
[...]


Tja, ik ben altijd van mening dat je als echte programmeur eigenlijk bijna elke taal zomaar kan oppakken zonder echt de taal te hoeven kennen. Als jij dus goed kan programmeren is de instap naar java niet zo heel groot meer.

Syntax leren is zo gedaan en de tips & tricks bij sommige talen leer je dan best snel. Dit boek is echt een intro voor Android en hoe je daar dingen doet. Volgens mij zijn talen als C# en Java alleen maar makkelijker als je C++ gewent bent. Je wordt verwend bij de "nieuwere" talen ;)
Dat 'verwennen' hield ik inderdaad nooit zo van. Ik hou van C++ programmeren, ook wat in Python gedaan, maar op een of andere manier denk ik dan snel dat het wel erg simpel is. Maar ok, dat is dan ook een kracht van zo'n taal om snel iets in elkaar te zetten.

Maar om on topic te blijven: ik vind dat ik C++ aardig goed onder de knie heb en inderdaad, met voorbeelden uitwerken uit dat boek dan en info op internet kom ik natuurlijk een heel end in Java basis leren.

Thanks voor je reactie!

Naar de bioscoop? => gebruik de app op Byoscoop.nl


Acties:
  • 0 Henk 'm!

  • danii1986
  • Registratie: Oktober 2006
  • Laatst online: 13-10-2024
Is er een goed Nederlands boek wat ik kan gebruiken om te beginnen met het maken van een android app? Iemand tips?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 08-05 12:19

Janoz

Moderator Devschuur®

!litemod

Anoniem: 147846 schreef op maandag 05 oktober 2009 @ 10:55:
Ik raad je aan om gewoon lekker in het diepe te springen en het te proberen. Al snap je het basis if-else-while gedoe dan kan je best beginnen met Android applicaties ontwikkelen. Natuurlijk is het moeilijk, maar dan blijf je ten minste bezig met je doel. Als je nu eerst apart gaat leren programmeren snap je de basis pas over een aantal maanden en dan moet je nog eens Android gaan leren.
Niet mee eens. Als je nog nooit geprogrammeerd hebt is Android wel erg diep. Vergeleken met de standaard applicaties (web of desktop applicaties) heb je bij android veel minder zicht op wat er nu eigenlijk gebeurt. Logging is wat minder toegankelijk, de debugger werkt wat trickyer en uberhaupt het hele draaien in een emulator geeft een extra laag van 'ondoorzichtigheid'.
danii1986 schreef op maandag 05 oktober 2009 @ 12:56:
Is er een goed Nederlands boek wat ik kan gebruiken om te beginnen met het maken van een android app? Iemand tips?
Ik denk niet dat je een nederlands boek zult gaan vinden. Sowieso is engels wel de defacto standaard in documentatie.

[ Voor 16% gewijzigd door Janoz op 06-10-2009 10:56 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Anoniem: 147846

Janoz schreef op dinsdag 06 oktober 2009 @ 10:55:
[...]

Niet mee eens. Als je nog nooit geprogrammeerd hebt is Android wel erg diep. Vergeleken met de standaard applicaties (web of desktop applicaties) heb je bij android veel minder zicht op wat er nu eigenlijk gebeurt. Logging is wat minder toegankelijk, de debugger werkt wat trickyer en uberhaupt het hele draaien in een emulator geeft een extra laag van 'ondoorzichtigheid'.
Ja ik zeg daar ook bij dat je de basis (if-else-while etc) moet snappen. Dan is het maken van een android applicatie niet erg ingewikkeld. Er zijn een paar tricky dingen maar dat is ook voor de ervaren programmeur een uurtje googlen.

Zoals ik in mijn andere post al zei, een calculator is echt wel te doen. Je hoeft enkel een textveld te maken voor uitkomst en een paar buttons opvangen.

offtopic:
For those who care, ik heb hier een basis artikeltje staan over debuggen in Android met Eclipse. :)

Acties:
  • 0 Henk 'm!

  • Maverick
  • Registratie: Oktober 2001
  • Laatst online: 08-05 13:28
Hm zat toch te denken aan "The Busy Coder's Guide to Android Development" maar lees hetvolgende bij de reviews.
Furthermore, this is not an instructional on JAVA. You will need a thorough introduction to JAVA to succeed in App development on Android.
Das dus niet de bedoeling. Eigenlijk zou ik gewoon een "android voor dummies" boek willen hebben, maar dat bestaat niet. Wat komt er het dichste bij in de buurt?

PSN: DutchTrickle PVoutput


Acties:
  • 0 Henk 'm!

  • Maverick
  • Registratie: Oktober 2001
  • Laatst online: 08-05 13:28
klein bumpje, daar ik toch hoop dat iemand een leuke tip voor me heeft.

PSN: DutchTrickle PVoutput


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 08-05 12:19

Janoz

Moderator Devschuur®

!litemod

TJa, het is niet voor niks dat je daar nauwelijks een reactie op krijgt. Voor niks gaat de zon op. Met een instelling als 'ik wil niet leren programmeren, ik wil android apps leren maken' kom je er niet. Als er in de reviews staat dat je wel een "introduction to java" gehad moet hebben, waarom doe je die dan niet? Gewoon een paar weken kleine java applicaties in elkaar draaien om het hele concept van programmeren onder de knie te krijgen. Van die tijd heb je ondertussen al een week verspilt.

Ik ben het trouwens niet helemaal eens met die review. Voor android heb je niet specifiek java kennis nodig. Alleen de syntax is genoeg. Wat je wel nodig hebt is een goed begrip van hoe je je probleem goed om kunt zetten in een object geörienteerde oplossing en dat vervolgens in het android concept van activities, intents en services kunt gieten. Iemand met .Net ervaring heeft IMHO geen enkele afstand op een vergelijkbare Javaan, mits de eerste natuurlijk kan wennen aan de kleine letter waarmee een methode naam begint ;).

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Anoniem: 139099

Ok mensen, ik heb een probleem.

Alles hoort te werken nu, maar mijn eclipse blijft me een java nullpointerexception geven, zelfs al bij het starten van een voor de rest leeg android project.

Iemand een idee hoe dit kan?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 08-05 12:19

Janoz

Moderator Devschuur®

!litemod

Je zult toch iets meer info moeten geven. Het enige wat ik er nu van kan zeggen is: Begin eens opnieuw met een kale eclipse in installeer hierin alleen de androidplugin. Gebruik daarvoor deze hwoto : http://developer.android.com/sdk/eclipse-adt.html

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Anoniem: 321548

Heeft er iemand al applicaties gemaakt met de nieuwe API versies 5 / 6?

Na alles geupdate te hebben, en ik mijn applicatie maar build (Eerst een tergend lang proces van omschrijven doorstaan, maar toch), verschijnt doodleuk de nieuwe Emulator (Nadat ik een nieuwe Virtual Device had aangemaakt met 2.0), maar mijn applicatie wordt niet geinstalleerd.

Ik kan ook niet zelf de applicatie naar mijn virtual device / telefoon pushen, omdat deze niet meer in adb tevoorschijn komt.

EDIT: Terwijl ik dit typ, zie ik ook dat 2.0.1 uit is, dus even geupdate, standaard staat de configuratie van de AVD's niet goed, omdat er meer dan 78mb intern geheugen nodig is. Nu dit is opgelost blijft hetzeflde euvel daar:

code:
1
2
3
4
5
6
[2009-12-30 09:41:07 - HyvesApplication]------------------------------
[2009-12-30 09:41:07 - HyvesApplication]Android Launch!
[2009-12-30 09:41:07 - HyvesApplication]adb is running normally.
[2009-12-30 09:41:07 - HyvesApplication]Performing com.hyves.android.application.HyvesLoginActivity activity launch
[2009-12-30 09:41:07 - HyvesApplication]Automatic Target Mode: Preferred AVD 'MainAVD2' is not available. Launching new emulator.
[2009-12-30 09:41:07 - HyvesApplication]Launching a new emulator with Virtual Device 'MainAVD2'


En.. er verschijnt helemaal niets.

met als config.ini voor deze AVD:

code:
1
2
3
4
5
6
hw.lcd.density=160
sdcard.size=1000M
skin.name=HVGA
skin.path=platforms\android-2.0.1\skins\HVGA
image.sysdir.1=platforms\android-2.0.1\images\
disk.systemPartition.size=90MB


Ik snap er niks meer van, iemand een idee?

EDIT2: De laatste update van Android SDK Tools lijkt het opgelost te hebben, nice. Weet nog steeds niet waar het aan lag, maar .. oke

[ Voor 4% gewijzigd door Anoniem: 321548 op 30-12-2009 09:55 ]


Acties:
  • 0 Henk 'm!

Anoniem: 234428

Maverick schreef op dinsdag 06 oktober 2009 @ 20:02:
Hm zat toch te denken aan "The Busy Coder's Guide to Android Development" maar lees hetvolgende bij de reviews.

[...]

Das dus niet de bedoeling. Eigenlijk zou ik gewoon een "android voor dummies" boek willen hebben, maar dat bestaat niet. Wat komt er het dichste bij in de buurt?
Ik ben zelf begonnen met Hello Android van Ed Burnett. Veel voorbeelden, maar ook veel uitleg en tekst! verder is het een relatief klein boek waardoor je er makkelijk doorheen komt!

Acties:
  • 0 Henk 'm!

  • Maverick
  • Registratie: Oktober 2001
  • Laatst online: 08-05 13:28
Anoniem: 234428 schreef op maandag 04 januari 2010 @ 14:22:
[...]


Ik ben zelf begonnen met Hello Android van Ed Burnett. Veel voorbeelden, maar ook veel uitleg en tekst! verder is het een relatief klein boek waardoor je er makkelijk doorheen komt!
hehe, precies dat boek heb ik 2 weken geleden aangeschaft :P Heb echter nog geen tijd gehad om er in te beginnen.

PSN: DutchTrickle PVoutput


Acties:
  • 0 Henk 'm!

  • bartos88
  • Registratie: Oktober 2006
  • Laatst online: 18-04-2024
Hallo allemaal. Ik wil iets maken dat gebruik maakt van de camera, dus ik probeer nu de cameraPreview api demo van de android site te runnen, maar ik krijg de "application stopped unexpectedly" error. Hopelijk zien jullie wat het probleem is.

Volgens de logcat log heeft het met de camera permissions te maken:
code:
1
2
3
4
5
6
01-05 21:13:24.550: WARN/ServiceManager(542): Permission failure: android.permission.CAMERA from uid=10035 pid=867
01-05 21:13:24.561: ERROR/CameraService(542): Permission Denial: can't use the camera pid=867, uid=10035
01-05 21:13:24.580: DEBUG/AndroidRuntime(867): Shutting down VM
01-05 21:13:24.590: WARN/dalvikvm(867): threadid=3: thread exiting with uncaught exception (group=0x4001aa28)
01-05 21:13:24.590: ERROR/AndroidRuntime(867): Uncaught handler: thread main exiting due to uncaught exception
01-05 21:13:24.610: ERROR/AndroidRuntime(867): java.lang.RuntimeException: Fail to connect to camera service


Na wat googlen zie ik dat anderen hetzelfde probleem hebben, en dat de oplossing is om in de manifest de permission te geven met een van deze twee regels:
code:
1
<uses-permission android:name="android.permission.CAMERA" />

of
code:
1
<uses-permission android:name="android.permission.CAMERA"></uses-permission>

Maar beide regels heb ik al geprobeerd, en het werkt met geen van beiden.

De hoofdcode staat hieronder en is direct gekopierd van de android site http://developer.android....aphics/CameraPreview.html (behalve de package nl.example.camerapreview regel)
De manifest is gewoon het standard manifest dat eclipse maakt bij een nieuw project met alleen een permission regel toegevoegd, en de layout file is ook gewoon origineel zoals eclipse hem aanmaakt.

code:
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package nl.example.camerapreview;

import android.app.Activity;
import android.content.Context;
import android.hardware.Camera;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.Window;
import java.io.IOException;

// ----------------------------------------------------------------------

public class CameraPreview extends Activity {    
    private Preview mPreview;

    @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        System.out.println("hoera");
        // Hide the window title.
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        // Create our Preview view and set it as the content of our activity.
        try{
            mPreview = new Preview(this);
            setContentView(mPreview);
            System.out.println("hoera");
            }
        catch(RuntimeException e){
            System.out.println(e.getMessage());
        }
    }

}

// ----------------------------------------------------------------------

class Preview extends SurfaceView implements SurfaceHolder.Callback {
    SurfaceHolder mHolder;
    Camera mCamera;

    Preview(Context context) {
        super(context);

        // Install a SurfaceHolder.Callback so we get notified when the
        // underlying surface is created and destroyed.
        mHolder = getHolder();
        mHolder.addCallback(this);
        mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }

    public void surfaceCreated(SurfaceHolder holder) {
        // The Surface has been created, acquire the camera and tell it where
        // to draw.
        mCamera = Camera.open();
        try {
           mCamera.setPreviewDisplay(holder);
        } catch (IOException exception) {
            mCamera.release();
            mCamera = null;
            // TODO: add more exception handling logic here
        }
    }

    public void surfaceDestroyed(SurfaceHolder holder) {
        // Surface will be destroyed when we return, so stop the preview.
        // Because the CameraDevice object is not a shared resource, it's very
        // important to release it when the activity is paused.
        mCamera.stopPreview();
        mCamera.release();
        mCamera = null;
    }

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
        // Now that the size is known, set up the camera parameters and begin
        // the preview.
        Camera.Parameters parameters = mCamera.getParameters();
        parameters.setPreviewSize(w, h);
        mCamera.setParameters(parameters);
        mCamera.startPreview();
    }

}


Ziet iemand een fout in de code? of ben ik iets vergeten misschien? |:(

edit: Ik heb de emulator trouwens ingesteld op android 1.5

Acties:
  • 0 Henk 'm!

Anoniem: 321548

Nou ja. Ik heb hem even getest (Op Android SDK 2.0.1, maar met minSdkVersion 4, wat overeenkomt met 1.6)

Op je Emulator kan je hem sowieso niet testen, dus heb mijn telefoon er even aan gehangen, en daar werkt hij perfect. Kan je eens een pastebin geven van je hele AndroidManifest.xml?

Ik weet niet of je verwacht dat je code automatisch weer naar je telefoon gebuild wordt (Want dat gebeurt niet), je moet hem wel eerst opnieuw uitvoeren.

[ Voor 24% gewijzigd door Anoniem: 321548 op 06-01-2010 12:36 ]


Acties:
  • 0 Henk 'm!

  • bartos88
  • Registratie: Oktober 2006
  • Laatst online: 18-04-2024
Het probleem is opgelost!

Het zat hem idd in de AndroidManifest.xml. In een tutorial stond dat ik de permission line binnen de <application> </application> moest doen, maar het blijkt erbuiten te moeten. Nu werkt hij :)
Bedankt voor de reactie. Nu moet ik maar eens gaan kijken hoe ik knoppen maak en daadwerkelijk een foto maak :P

[ Voor 14% gewijzigd door bartos88 op 06-01-2010 12:51 ]


Acties:
  • 0 Henk 'm!

Anoniem: 321548

bartos88 schreef op woensdag 06 januari 2010 @ 12:50:
Het probleem is opgelost!

Het zat hem idd in de AndroidManifest.xml. In een tutorial stond dat ik de permission line binnen de <application> </application> moest doen, maar het blijkt erbuiten te moeten. Nu werkt hij :)
Bedankt voor de reactie. Nu moet ik maar eens gaan kijken hoe ik knoppen maak en daadwerkelijk een foto maak :P
Pfsh. Wat een tutorial dan ;) Ik ben verbaasd dat hij trouwens wel compiled, aangezien het geen valide instructie is als je CTRL+SPACE invoert in je eclipse scherm.

Voor die knoppen ga je trouwens hopelijk wel die leuke XML layouts gebruiken :p (Die het trouwens niet goed vindt als je onzin in de tags neerzet).

Acties:
  • 0 Henk 'm!

  • bartos88
  • Registratie: Oktober 2006
  • Laatst online: 18-04-2024
Ja, zodra ik heb uitgezocht hoe dat precies werkt :)

Misschien weet je dit ook. Ik wil nu een foto maken wanneer iemand op het beeld drukt, dus ik heb nu een listener in de Preview class toegevoegd:
code:
1
2
3
4
5
6
 this.setOnTouchListener(new View.OnTouchListener() {
            public boolean onTouch(View v, MotionEvent e) {
                System.out.println("You touched me");               
                mCamera.takePicture(null, null, null);
                return false;               
            }


Dat lijkt te werken want hij output de prints als ik het scherm aanraak, maar de takePicture functie returnt void. Hoe krijg ik daar de foto uit? Ook, als ik de takePicture functie aanroep zoals hierboven dan raakt het scherm in de simulator helemaal verstoord :S

Acties:
  • 0 Henk 'm!

Anoniem: 321548

bartos88 schreef op woensdag 06 januari 2010 @ 14:22:
Ja, zodra ik heb uitgezocht hoe dat precies werkt :)

Misschien weet je dit ook. Ik wil nu een foto maken wanneer iemand op het beeld drukt, dus ik heb nu een listener in de Preview class toegevoegd:
code:
1
2
3
4
5
6
 this.setOnTouchListener(new View.OnTouchListener() {
            public boolean onTouch(View v, MotionEvent e) {
                System.out.println("You touched me");               
                mCamera.takePicture(null, null, null);
                return false;               
            }


Dat lijkt te werken want hij output de prints als ik het scherm aanraak, maar de takePicture functie returnt void. Hoe krijg ik daar de foto uit? Ook, als ik de takePicture functie aanroep zoals hierboven dan raakt het scherm in de simulator helemaal verstoord :S
Ik wil eigenlijk de plezier van het uitzoeken hoe dit werkt niet verspillen, maar je hebt drie argumenten in mCamera.takePicture (Je hebt ook een versie van 4 argumenten trouwens) met de volgende types (In deze volgorde). Dit staat allemaal heel uitgebreid in de API Reference.

Camera.ShutterCallback gebeurt als de foto is genomen, waardoor je leuke dingen op het scherm kan laten tonen dat de afbeelding echt is genomen (hier niet heel relevant)
Camera.PictureCallback krijg je als de byte[] data van de foto is verwerkt, dit is nog niet gecompressed oid.
Camera.PictureCallback wordt gevuld als de JPEG compressed stream van de foto er is. Je kan of deze, of de vorige gebruiken om je foto te pakken.

Doe dat dan in de vorm van:
code:
1
2
3
4
5
Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {
       public void onPictureTaken(byte[] data, Camera c) {
                   //Wat je ook wil doen met de imageData
       }
};


De rest van de argumenten van takePicture kan je als null vullen als je de keuze hebt gemaakt.

code:
1
2
mCamera.takePicture(null,mPictureCallBack,null) of:
mCamera.takePicture(null,null,mPictureCallback)

En, het emuleren van de camera is niet te doen in de emulator. Je kan het beste je telefoon als device gebruiken voor het ontwikkelen, dan.

[ Voor 4% gewijzigd door Anoniem: 321548 op 06-01-2010 14:35 ]


Acties:
  • 0 Henk 'm!

  • bartos88
  • Registratie: Oktober 2006
  • Laatst online: 18-04-2024
Thanks! dat werkt als ik de compressed image gebruik en de eerste 2 argumenten op null zet. Maar als ik mPictureCallBack als 2e argument zet en de andere 2 null, dan is de byte array "data" null in de onPictureTaken method.

Acties:
  • 0 Henk 'm!

Anoniem: 321548

Het antwoord daarop staat beschreven in de SDK reference over het camera object:

http://developer.android.com/reference/android/hardware/Camera.html#takePicture(android.hardware.Camera.ShutterCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback)

Dus ja, de derde is meestal wel de beste optie ;)

[ Voor 24% gewijzigd door Anoniem: 321548 op 06-01-2010 15:13 ]


Acties:
  • 0 Henk 'm!

  • bartos88
  • Registratie: Oktober 2006
  • Laatst online: 18-04-2024
ah ok. Had wat verder moeten lezen :P thanks!
Het camerabeeld is wel helemaal distorted :S, maar in principe werkt ie :)

Acties:
  • 0 Henk 'm!

  • Enfer
  • Registratie: Februari 2004
  • Laatst online: 05-05 13:59
Momenteel ben ik ook bezig voor een klant ontwikkelen in Android, ik moet zeggen dat het best wel mooi werkt. Leuk met xml je layouts defineieren, multilanguage zit ook behoorlijk netjes geintegreerd. Laatst een aantal schermen gemaakt welke een internetactie uitvoeren en ik moet zeggen dat ze het leuk bedacht hebben met callbacks om je UI te updaten enzovoorts.

Wat wel jammer is, is dat de emulator behoorlijk zwaar is en dat het bv op een c2d 1.8 ghz (E2610 volgensmij) behoorlijk bagger draait, maarja dan maar iets langer wachten tijdens het runnen en minder fouten maken tijdens het programmeren :+

Acties:
  • 0 Henk 'm!

Anoniem: 321548

Ja, dat is wel waar. De Emulator is redelijk traag. Daarom ontwikkel ik ook het liefst op een echt apparaat, zo kan je sowieso beter de 'look and feel' van de applicatie testen. Ik vind het vooral mooi hoe je niet alleen multi-language dingen kan veranderen, maar je kan iedere values.xml ook veranderen per screen grootte, en nog wel 10 andere dingen, dus het werkt heel mooi.

Ja, de callbacks zijn heel netjes geregeld, ik ben echt ontzettend blij met Android <3

Acties:
  • 0 Henk 'm!

  • bartos88
  • Registratie: Oktober 2006
  • Laatst online: 18-04-2024
Hallo allemaal, ik heb weer een probleem met mn cameracode en hoop dat iemand de oorzaak ziet :)
Ik probeer een bitmap te maken nadat de camera een foto heeft genomen en deze returnt als een byte[]. Hieronder staat het deel van mn code waar het fout gaat. Met de 2 regels uitgecommentarierd zoals hieronder werkt het programma in principe goed en kan ik zovaak een foto maken als ik wil. Maar zodra ik de ByteArrayInputStream probeer om te zetten naar een Bitmap, of naar een BitmapDrawable dan krijg ik problemen. Het programma werkt dan wel voor de eerste 3x dat ik een foto maak, maar de 4e keer crasht hij (application stopped unexpectedly).

BitmapFactory.decodeStream returnt null wanneer bytes null is, of wanneer bytes niet omgezet kan worden naar een Bitmap. Dus ik denk dat het een lege of null byte[] niet het probleem kan zijn.
Ik zie ook niet hoe het een out of memory probleem is omdat het bij de eerste 3x dat ik een foto maak wel gewoon werkt :S

Verder is het probleem alleen aanwezig wanneer ik het run in mijn echte telefoon. In de emulator krijg ik geen error.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {
        public void onPictureTaken(byte[] imageData, Camera c) {
            System.out.println(imageData);
            try{
                ByteArrayInputStream bytes = new ByteArrayInputStream(imageData);
//              Bitmap bm = BitmapFactory.decodeStream(bytes); #Methode 1
//              BitmapDrawable bmd = new BitmapDrawable(bytes);  #Methode 2
                bytes.close();
            }catch(IOException e) {
                e.printStackTrace();
            }
        }   
    };


Ziet iemand wat ik fout doe?

Acties:
  • 0 Henk 'm!

Anoniem: 321548

Om te beginnen, bij applicatiecrashes is het handig om je Logcat van dat moment even te pastebinnen, zodat je meteen kan zien wat er aan de hand is. Dat zou ik hier ook aanraden:

Dus, open Logcat, kopieer de log, pastebin, en reply hier. Ik denk dat ik het probleem al wel weet hoor ;)

Acties:
  • 0 Henk 'm!

  • bartos88
  • Registratie: Oktober 2006
  • Laatst online: 18-04-2024
Het probleem doet zich alleen voor in mn echte telefoon, kan ik het dan ook ergens uitlezen?
edit: Ik zie dat ik log files kan maken, maar dan kan ik niet zeggen dat ik de logcat weggeschreven wil hebben toch?

[ Voor 39% gewijzigd door bartos88 op 10-01-2010 20:34 ]


Acties:
  • 0 Henk 'm!

  • RunaR
  • Registratie: Juni 2001
  • Laatst online: 14-04 09:57
bartos88 schreef op zondag 10 januari 2010 @ 19:28:
Het probleem doet zich alleen voor in mn echte telefoon, kan ik het dan ook ergens uitlezen?
edit: Ik zie dat ik log files kan maken, maar dan kan ik niet zeggen dat ik de logcat weggeschreven wil hebben toch?
Logcat is uit te lezen via ddms of gewoon in het eclipse debug scherm als je daar in werkt.

ISS Detector en meer voor Android


Acties:
  • 0 Henk 'm!

  • bartos88
  • Registratie: Oktober 2006
  • Laatst online: 18-04-2024
Ja, maar ik zit dus niet in eclipse, want ik run het in mn echte telefoon. Niet in de emulator, want daar doet de fout zich niet voor.

Acties:
  • 0 Henk 'm!

  • Enfer
  • Registratie: Februari 2004
  • Laatst online: 05-05 13:59
Dan kun je toch zelf een exceptionhandler maken die vervolgens de stacktraces post naar een database online / whatever? Die foutmelding dan er even bijpakken en kijken wat deze te melden heeft ;)

Acties:
  • 0 Henk 'm!

  • bartos88
  • Registratie: Oktober 2006
  • Laatst online: 18-04-2024
Enfer schreef op maandag 11 januari 2010 @ 11:48:
Dan kun je toch zelf een exceptionhandler maken die vervolgens de stacktraces post naar een database online / whatever? Die foutmelding dan er even bijpakken en kijken wat deze te melden heeft ;)
Hmm, ik kijk wel of ik iets kan maken dat het naar een bestandje schrijft. Naar een database posten is op dit moment een beetje te moeilijk voor me :P

Acties:
  • 0 Henk 'm!

  • 3ssen
  • Registratie: Augustus 2005
  • Laatst online: 08-05 12:39
bartos88 schreef op zondag 10 januari 2010 @ 23:10:
Ja, maar ik zit dus niet in eclipse, want ik run het in mn echte telefoon. Niet in de emulator, want daar doet de fout zich niet voor.
Als ik het lees zoals het hier staat, kan je gewoon debuggen op je telefoon en krijg je je logcat meldingen in eclipse te zien.

Acties:
  • 0 Henk 'm!

  • bartos88
  • Registratie: Oktober 2006
  • Laatst online: 18-04-2024
3ssen schreef op maandag 11 januari 2010 @ 12:42:
[...]


Als ik het lees zoals het hier staat, kan je gewoon debuggen op je telefoon en krijg je je logcat meldingen in eclipse te zien.
Thanks! Die had ik nog niet gezien. Als ik thuis ben maar eens proberen.

Acties:
  • 0 Henk 'm!

  • bartos88
  • Registratie: Oktober 2006
  • Laatst online: 18-04-2024
Dit is de error die ik krijg. Maar ik begrijp niet hoe hij bij de eerste paar foto's niet out of memory raakt. Elke keer dat ik een foto maak moet de bitmap toch even groot zijn?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
01-11 17:54:21.600: ERROR/AndroidRuntime(3510): Uncaught handler: thread main exiting due to uncaught exception
01-11 17:54:21.600: ERROR/AndroidRuntime(3510): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
01-11 17:54:21.600: ERROR/AndroidRuntime(3510):     at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
01-11 17:54:21.600: ERROR/AndroidRuntime(3510):     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:375)
01-11 17:54:21.600: ERROR/AndroidRuntime(3510):     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:394)
01-11 17:54:21.600: ERROR/AndroidRuntime(3510):     at nl.uva.CameraCode.CameraCode$2.onPictureTaken(CameraCode.java:164)
01-11 17:54:21.600: ERROR/AndroidRuntime(3510):     at android.hardware.Camera$EventHandler.handleMessage(Camera.java:246)
01-11 17:54:21.600: ERROR/AndroidRuntime(3510):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-11 17:54:21.600: ERROR/AndroidRuntime(3510):     at android.os.Looper.loop(Looper.java:123)
01-11 17:54:21.600: ERROR/AndroidRuntime(3510):     at android.app.ActivityThread.main(ActivityThread.java:3948)
01-11 17:54:21.600: ERROR/AndroidRuntime(3510):     at java.lang.reflect.Method.invokeNative(Native Method)
01-11 17:54:21.600: ERROR/AndroidRuntime(3510):     at java.lang.reflect.Method.invoke(Method.java:521)
01-11 17:54:21.600: ERROR/AndroidRuntime(3510):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
01-11 17:54:21.600: ERROR/AndroidRuntime(3510):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
01-11 17:54:21.600: ERROR/AndroidRuntime(3510):     at dalvik.system.NativeStart.main(Native Method)

[ Voor 5% gewijzigd door bartos88 op 11-01-2010 19:15 ]


Acties:
  • 0 Henk 'm!

  • 3ssen
  • Registratie: Augustus 2005
  • Laatst online: 08-05 12:39
bartos88 schreef op maandag 11 januari 2010 @ 19:14:
Dit is de error die ik krijg. Maar ik begrijp niet hoe hij bij de eerste paar foto's niet out of memory raakt. Elke keer dat ik een foto maak moet de bitmap toch even groot zijn?
code:
1
errorlog
Volgens mij worden je foto's in Bitmap en BitmapDrawable van het programma niet gedisposed. Dus elke keer als je een foto maakt wordt het geheugengebruik van het programma groter.

[ Voor 1% gewijzigd door 3ssen op 11-01-2010 19:33 . Reden: typo ]


Acties:
  • 0 Henk 'm!

Anoniem: 321548

Het lijkt mij dat je je bitmaps moet gaan recyclen om dit op te lossen. Dus, als je je hele code even zou kunnen posten, dan helpt dat een hoop (Omdat ik dan kan zien hoe de bitmaps in het geheugen worden gegooid)

Acties:
  • 0 Henk 'm!

  • bartos88
  • Registratie: Oktober 2006
  • Laatst online: 18-04-2024
Ok. Hier is mijn volledige CameraCode.java bestand:
code:
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
package nl.uva.CameraCode;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.PixelFormat;
import android.graphics.drawable.BitmapDrawable;
import android.hardware.Camera;
import android.hardware.Camera.AutoFocusCallback;
import android.os.Bundle;
import android.os.Environment;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
//import android.view.View.OnTouchListener;
import android.widget.Toast;

public class CameraCode extends Activity implements SurfaceHolder.Callback { 
    Camera mCamera;
    SurfaceView mSurfaceView;
    SurfaceHolder mSurfaceHolder;
    Boolean mPreviewRunning = false;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);        
        getWindow().setFormat(PixelFormat.TRANSLUCENT);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
        WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.camera_surface);
        mSurfaceView = (SurfaceView) findViewById(R.id.surface_camera);
        mSurfaceHolder = mSurfaceView.getHolder();
        mSurfaceHolder.addCallback(this);
        mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

        mSurfaceView.setOnTouchListener(new View.OnTouchListener() {
            public boolean onTouch(View v, MotionEvent e) {
                System.out.println("You touched me");
                
                mCamera.autoFocus(cb);          
                return false;

            }
        });   
}

public void surfaceCreated(SurfaceHolder holder) {
    mCamera = Camera.open();
}

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
    if (mPreviewRunning) {
        mCamera.stopPreview();
    }

        Camera.Parameters p = mCamera.getParameters();
        p.setPreviewSize(w, h);
        mCamera.setParameters(p);

        try {
            mCamera.setPreviewDisplay(holder);
        } catch (IOException e) {
            e.printStackTrace();
        }

        mCamera.startPreview();
        mPreviewRunning = true;
    }

public void surfaceDestroyed(SurfaceHolder holder) {
        mCamera.stopPreview();
        mPreviewRunning = false;
        mCamera.release();
    }
    
    AutoFocusCallback cb = new AutoFocusCallback() {
        public void onAutoFocus(boolean succes, Camera c) {
            System.out.println(succes);
            mCamera.takePicture(null, null, mPictureCallback);
        }   
    };
    
    Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {
        public void onPictureTaken(byte[] imageData, Camera c) {
            System.out.println(imageData);
            try{    
                ByteArrayInputStream bytes = new ByteArrayInputStream(imageData);
                Bitmap bm = BitmapFactory.decodeStream(bytes);
                
                
                System.out.println("heigth: " + bm.getHeight());
                System.out.println("width: " + bm.getWidth());
                bytes.close();
            

                File root = Environment.getExternalStorageDirectory();
                if (root.canWrite()){                                                           
                    File f = new File(root, "testImage.jpg");
                    FileOutputStream out = new FileOutputStream(f);
                    bm.compress(Bitmap.CompressFormat.JPEG, 100, out);
                    out.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            mCamera.startPreview();
        }   
    };
}

Acties:
  • 0 Henk 'm!

  • 3ssen
  • Registratie: Augustus 2005
  • Laatst online: 08-05 12:39
probeer eens om na regel 112 (out.close();) een bm.recycle() aan te roepen.

Acties:
  • 0 Henk 'm!

  • bartos88
  • Registratie: Oktober 2006
  • Laatst online: 18-04-2024
3ssen schreef op maandag 11 januari 2010 @ 21:00:
probeer eens om na regel 112 (out.close();) een bm.recycle() aan te roepen.
Het lijkt te werken, heb tot nu toe geen crashes meer gehad :)
Tnx!

Acties:
  • 0 Henk 'm!

  • RoD
  • Registratie: September 2004
  • Niet online

RoD

Admin Mobile & FP PowerMod
De 2.1-SDK is beschikbaar gemaakt door Google: Klik.

Acties:
  • 0 Henk 'm!

Anoniem: 321548

Bleh, Ik had meer gehoopt van een nieuwe API versie, er zijn amper verbeteringen. Animated Wallpapers zijn een leuke toevoeging, en de WebKit implementaties zijn ook leuk, maar niet echt een nieuwe API versie waard.

Jammer :(

Acties:
  • 0 Henk 'm!

  • SlaadjeBla
  • Registratie: September 2002
  • Laatst online: 00:08
3ssen schreef op maandag 11 januari 2010 @ 21:00:
probeer eens om na regel 112 (out.close();) een bm.recycle() aan te roepen.
lekenvraag: Waarom is dit nodig? De variabele bm raakt toch even later uit de scope zonder dat er nog referenties naar zijn? Dan zou deze toch automatisch door de garbage collector moeten worden opgeruimd? Of moet je het hier expliciet doen omdat je niet kunt wachten tot de garbage collector het voor je doet omdat je maar zo weinig geheugen tot je beschikking hebt?

Acties:
  • 0 Henk 'm!

Anoniem: 321548

De variabele BM raakt niet uit de scope omdat hij in een callback zit. Hier is jammer genoeg heel weinig over gedocumenteerd, maar Drawable objecten (Zoals Bitmaps dus) die in een callback zitten, dienen altijd handmatig gerecycled te worden. Het is niet zozeer wachten op de GC, de GC ruimt het niet op omdat er nog rerferenties naar zijn.

Acties:
  • 0 Henk 'm!

  • SlaadjeBla
  • Registratie: September 2002
  • Laatst online: 00:08
Anoniem: 321548 schreef op zaterdag 16 januari 2010 @ 18:51:
De variabele BM raakt niet uit de scope omdat hij in een callback zit.

<knip>

Het is niet zozeer wachten op de GC, de GC ruimt het niet op omdat er nog rerferenties naar zijn.
Is dat iets van Android of van Java? Waarom worden er referenties vastgehouden naar de bitmap (of zoals je zegt alle Drawable types) als de callback ten einde is? Is de scope van de variabele dan niet die van de callback?

Ik ben erg geïnteresseerd in het waarom, want ik denk dat ik iets over het hoofd zie.

[ Voor 3% gewijzigd door SlaadjeBla op 17-01-2010 11:56 ]


Acties:
  • 0 Henk 'm!

  • zezke
  • Registratie: September 2006
  • Laatst online: 20:02
Ik ben momenteel net wat aan het prutsen gegaan met de android sdk. Ik ben nu aan het proberen gebruik te maken van de gps. Ik heb de volgende code:

code:
1
2
3
4
5
6
7
8
9
10
11
public class HelloAndroid extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        TextView bestProvView = (TextView) findViewById(R.id.bestProvider);
        bestProvView.setText(bestProvView.getText() + " " + lm.getBestProvider(new Criteria(), true));
    }
}


De teruggegeven provider is echter steeds null. Ligt dit aan de SDK? Ik dacht dat er een gps-provider meegeleverd was?

EDIT:

Never mind, ik was het blijkbaar te ingewikkeld aan het maken, de volgende code volstond:

code:
1
2
3
4
5
6
7
8
9
10
public class HelloAndroid extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 100, 1, new GpsListener());
    }
}

[ Voor 25% gewijzigd door zezke op 17-01-2010 20:44 . Reden: Oplossing gevonden ]


Acties:
  • 0 Henk 'm!

  • bartos88
  • Registratie: Oktober 2006
  • Laatst online: 18-04-2024
Hallo allemaal. Ik heb weer een probleempje. Dit keer een heel vaag probleem, die meer met mn telefoon te maken lijkt te hebben. Hopelijk weten jullie een oplossing, anders moet ik denk ik mijn hero naar de fabrieksinstellingen terugbrengen. Ik wil een bestand (+- 500kb) naar een server sturen met een httppost actie, waarna ik een bestand terugkrijg. Het vreemde is dat mn code het eerst deed met mijn 3G verbinding, maar nu opeens niet meer. Hij doet het nog wel als ik op mijn telefoon wifi aanzet en ook via de emulator. Het lijkt mij dat het dus niet aan de server kan liggen. Ik zie ook niet hoe het aan de code kan liggen, want dan zou hij het via wifi ook niet moeten doen toch? :S

Dit is misschien een beetje een vage beschrijving, maar ik hoop dat iemand het herkent. Ik heb geen idee wat het kan zijn, maar zat te denken aan een instelling in mijn telefoon die is veranderd waardoor het met 3G opeens niet meer werkt. Of misschien een foute cookie oid (als dat uberhaupt voor dit soort problemen kan zorgen).

Verder zag ik dat als ik uit het programma ga en naar het 3G logootje kijk, dat de pijltjes naar boven en onder wit zijn, dus dat lijkt erop alsof hij bezig is met ontvangen en verzenden. 3G werkt wel gewoon goed voor mn andere programma's, ik kan gewoon browsen enzo. De logcat lijkt niet echt iets hulpvols te zeggen, hij stopt gewoon bij het stukje code dat een response moet receiven (regel 55) en geeft geen errors oid:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
01-22 21:10:56.590: INFO/System.out(4641): ----------------------------------setup
01-22 21:10:56.600: INFO/System.out(4641): ----------------------------------properties
01-22 21:10:56.610: INFO/System.out(4641): ----------------------------------connect
01-22 21:10:57.966: DEBUG/LocationMasfClient(63): getNetworkLocation(): Returning cache location with accuracy 544.0
01-22 21:10:58.066: DEBUG/InetAddress(4641): djura.crabdance.com: 145.116.17.93 (family 2, proto 6)
01-22 21:10:58.684: INFO/System.out(4641): ----------------------------------compress
01-22 21:10:58.684: INFO/System.out(4641): ----------------------------------after compress
01-22 21:10:58.690: INFO/global(4641): Default buffer size used in BufferedOutputStream constructor. It would be better to be explicit if an 8k buffer is required.
01-22 21:10:58.690: INFO/System.out(4641): ---------------------------------prepared zipstream
01-22 21:10:58.990: DEBUG/dalvikvm(4641): GC freed 390 objects / 108560 bytes in 138ms
01-22 21:10:59.300: DEBUG/dalvikvm(4641): GC freed 171 objects / 122248 bytes in 81ms
01-22 21:10:59.320: INFO/dalvikvm-heap(4641): Grow heap (frag case) to 4.621MB for 507920-byte allocation
01-22 21:10:59.430: DEBUG/dalvikvm(4641): GC freed 0 objects / 0 bytes in 102ms
01-22 21:10:59.780: DEBUG/dalvikvm(4641): GC freed 3 objects / 245832 bytes in 99ms
01-22 21:10:59.830: INFO/dalvikvm-heap(4641): Grow heap (frag case) to 5.372MB for 1032208-byte allocation
01-22 21:10:59.940: DEBUG/dalvikvm(4641): GC freed 0 objects / 0 bytes in 107ms
01-22 21:11:00.220: VERBOSE/HistActivity(4641): checksum: 2351594448
01-22 21:11:00.220: INFO/System.out(4641): ----------------------------------receiving response
01-22 21:11:00.310: DEBUG/dalvikvm(4641): GC freed 59 objects / 520680 bytes in 81ms
01-22 21:11:08.980: DEBUG/LocationMasfClient(63): getNetworkLocation(): Returning cache location with accuracy 542.0
01-22 21:11:09.100: DEBUG/dalvikvm(2803): GC freed 11118 objects / 600176 bytes in 141ms
01-22 21:11:44.210: DEBUG/dalvikvm(2803): GC freed 13242 objects / 760032 bytes in 146ms


Hier is het stukje code waar het fout gaat. Maar dus alleen als ik 3G gebruik en niet met bijv wifi :S dus ik denk dat het niet aan de code ligt.

code:
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
        URL url = new URL(myApp.getServerURL());
        HttpURLConnection connection = (HttpURLConnection)url.openConnection();
        
        //connection properties
        System.out.println("----------------------------------properties");
        connection.setRequestMethod("POST");
        connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        connection.setRequestProperty("Connection","Keep-Alive"); 
        connection.setUseCaches (false);
        connection.setDoInput(true);
        connection.setDoOutput(true);
        System.out.println("----------------------------------connect");
        connection.connect();

        //Compress and send request
        System.out.println("----------------------------------compress");
        DataOutputStream dataStream = new DataOutputStream (connection.getOutputStream());
        System.out.println("----------------------------------after compress");
        try {

            //prepare zip stream
            CheckedOutputStream checksum = new CheckedOutputStream(dataStream, new Adler32());
            ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(checksum));
            System.out.println("---------------------------------prepared zipstream");

            for (int i=0; i<files.length; i++) {

                BufferedInputStream origin = null;
                ByteArrayInputStream fi = new ByteArrayInputStream(files[i]);
                origin = new  BufferedInputStream(fi, BUFFER);
                ZipEntry entry = new ZipEntry(filenames[i]);
                out.putNextEntry(entry);

                byte data[] = new byte[BUFFER];
                int count;

                while((count = origin.read(data, 0, BUFFER)) != -1) {
                    out.write(data, 0, count);
                }

                origin.close();
            } 

            out.close();
            Log.v(TAG, "checksum: "+ checksum.getChecksum().getValue());

        } catch(Exception e) {
            e.printStackTrace();
            System.out.println("----------------------------------exception");
        }



        //Receive response
        System.out.println("----------------------------------receiving response");
        InputStream inputStream = connection.getInputStream(); 
        System.out.println("----------------------------------receiving response2");


ps: Ik weet niet of het helpt, maar ik heb mobiel internet van Vodafone.

Acties:
  • 0 Henk 'm!

  • Enfer
  • Registratie: Februari 2004
  • Laatst online: 05-05 13:59
Misschien eerst eens een paar printjes in je verstuurd-while-loop om eens te kijken hoever je komt. Als het altijd stopt op een bepaald moment kan het zijn dat vodafone je capt / stopt inderdaad, anders eens verder kijken.

Acties:
  • 0 Henk 'm!

  • bartos88
  • Registratie: Oktober 2006
  • Laatst online: 18-04-2024
Je bedoelt de while loop in regel 37? Ik heb er even wat prints in gestopt en het blijkt dat hij met wifi (dus wanneer hij wel gewoon werkt) minder vaak door de while loop gaat dan met 3G (478 vs 784 keer). Zou dat ermee te maken kunnen hebben?
Enfer schreef op vrijdag 22 januari 2010 @ 22:51:
Misschien eerst eens een paar printjes in je verstuurd-while-loop om eens te kijken hoever je komt. Als het altijd stopt op een bepaald moment kan het zijn dat vodafone je capt / stopt inderdaad, anders eens verder kijken.

Acties:
  • 0 Henk 'm!

  • Enfer
  • Registratie: Februari 2004
  • Laatst online: 05-05 13:59
Waarschijnlijk zijn de pakketjes vanuit je WIFI gewoon groter dan die verstuurd vanaf 3G oid. Interresant is om te weten wanneer hij bij 3G stopt met versturen (hoeveel (kilo)bytes).

Acties:
  • 0 Henk 'm!

Anoniem: 178587

Zijn er nog mensen met dit probleem:

http://code.google.com/p/android/issues/detail?id=2739

Er is een update beschikbaar:

https://review.source.android.com/#change,10725

Maar kan iemand mij helpen hoe ik deze update toepas??

Acties:
  • 0 Henk 'm!

  • Enfer
  • Registratie: Februari 2004
  • Laatst online: 05-05 13:59
Anoniem: 178587 schreef op zaterdag 23 januari 2010 @ 09:32:
Zijn er nog mensen met dit probleem:

http://code.google.com/p/android/issues/detail?id=2739

Er is een update beschikbaar:

https://review.source.android.com/#change,10725

Maar kan iemand mij helpen hoe ik deze update toepas??
Dat kun je beter Android Software & Discussie - Deel 3 vragen, of een nieuw topic aanmaken. Dit topic is meer bedoeld voor programmeren aan Android zelf ;)

Acties:
  • 0 Henk 'm!

Anoniem: 49627

SlaadjeBla schreef op vrijdag 15 januari 2010 @ 23:50:
lekenvraag: Waarom is dit nodig? De variabele bm raakt toch even later uit de scope zonder dat er nog referenties naar zijn? Dan zou deze toch automatisch door de garbage collector moeten worden opgeruimd? Of moet je het hier expliciet doen omdat je niet kunt wachten tot de garbage collector het voor je doet omdat je maar zo weinig geheugen tot je beschikking hebt?
Het heeft te maken me de implementatie van Bitmap. De variabele bm raakt inderdaad out-of-scope en wordt gewoon opgeruimd ongeacht dat deze in een callback zit. Echter is de Bitmap class grotendeels 'native' geimplementeerd, vergelijkbaar met bijvoorbeeld inputstreams en outputstreams. Deze 'native' resources vallen niet onder de garbage collector en zul je dus zelf expliciet op moeten ruimen. Bij een stream doe je dat met "close()", bij een bitmap doe je dat met "recycle()".

Het is dus verstandig om een bitmap net als een stream in een try-catch-finally block te gebruiken zodat je altijd 'recycled' in het finally-block.

En ja de documentatie van Android is op dit punt dus gewoon compleet fout.

Acties:
  • 0 Henk 'm!

  • SlaadjeBla
  • Registratie: September 2002
  • Laatst online: 00:08
Anoniem: 49627 schreef op zaterdag 23 januari 2010 @ 11:02:
[...]

Echter is de Bitmap class grotendeels 'native' geimplementeerd, vergelijkbaar met bijvoorbeeld inputstreams en outputstreams. Deze 'native' resources vallen niet onder de garbage collector en zul je dus zelf expliciet op moeten ruimen. Bij een stream doe je dat met "close()", bij een bitmap doe je dat met "recycle()".
Ik kom uit een andere managed omgeving (.net) en daar is het goed gebruik zelf je unmanaged resources op te ruimen in de Dispose() functie of destructor. Dan kan een ontwikkelaar die gebruik maakt van jouw classes niet de fout maken resources te laten "lekken". Dit klinkt mij dus heel erg in de oren als een bug in de Bitmap class.

Ik kan mij voorstellen dat je een Recycle() of Close() functie hebt om vroegtijdig resources vrij te geven, geheugen is immers schaars. Maar waarom is er niet een fallback mechanisme dat dit ook automatisch doet? Is daar een reden voor?

[ Voor 5% gewijzigd door SlaadjeBla op 23-01-2010 13:30 ]


Acties:
  • 0 Henk 'm!

  • bartos88
  • Registratie: Oktober 2006
  • Laatst online: 18-04-2024
Enfer schreef op vrijdag 22 januari 2010 @ 23:45:
Waarschijnlijk zijn de pakketjes vanuit je WIFI gewoon groter dan die verstuurd vanaf 3G oid. Interresant is om te weten wanneer hij bij 3G stopt met versturen (hoeveel (kilo)bytes).
Volgens mij versturen ze beiden evenveel. Eerder zei ik dat er een verschil was tssen wifi en 3g, maar dat bleek te komen omdat ik de image die door de camera gecaptured wordt, verstuur naar de server, en die image is niet elke keer evenveel kb. Nu load ik gewoon een image van de sd card en hij gaat voor 3G en wifi even vaak door de while loop met een buffer van 2048.

Nu is het andere vreemde, dat hij blijft steken bij regel 56. Op dat moment heeft hij als het goed is de image al verstuurd naar de server en gaat hij zich nu klaar maken om de returndata te ontvangen. De server stuurt gewoon altijd een vaste image terug, onafhankelijk van wat er naartoe gestuurd is. Dus het lijkt mij dat wat er gebeurt in regel 56 onafhankelijk moet zijn van het plaatje dat ik naar de server stuur, maar dat blijkt niet zo te zijn. Wanneer ik een heel klein plaatje van 3kb naar de server stuur, dan komt hij wel voorbij regel 56 :S

Acties:
  • 0 Henk 'm!

Anoniem: 49627

SlaadjeBla schreef op zaterdag 23 januari 2010 @ 13:28:
Ik kom uit een andere managed omgeving (.net) en daar is het goed gebruik zelf je unmanaged resources op te ruimen in de Dispose() functie of destructor. Dan kan een ontwikkelaar die gebruik maakt van jouw classes niet de fout maken resources te laten "lekken". Dit klinkt mij dus heel erg in de oren als een bug in de Bitmap class.
In principe is die Dispose() functie er ook en die heet in dit geval recycle(). Wat mij betreft is het geen bug in de bitmap implementatie maar wel in de documentatie. Daar staat namelijk dat je de hele recycle() niet hoeft aan te roepen en het over kan laten aan de GC.
SlaadjeBla schreef op zaterdag 23 januari 2010 @ 13:28:
Ik kan mij voorstellen dat je een Recycle() of Close() functie hebt om vroegtijdig resources vrij te geven, geheugen is immers schaars. Maar waarom is er niet een fallback mechanisme dat dit ook automatisch doet? Is daar een reden voor?
Het fallback mechanisme bestaat wel degelijk en faalt in dit geval. In Java heeft elk object en finalyze() methode en deze is in de Bitmap class geimplementeerd. Wanneer deze methode wordt aangeroepen wordt de instance keurig opgeruimd. Echter, het is aan de VM om te bepalen wanneer (en of) deze methode wordt aangeroepen. Wanneer een instance out-of-scope raakt hoeft de GC niet meteen op te ruimen. Waarschijnlijk ruimt de GC in dit geval het bitmap object niet op omdat het nog niet nodig lijkt, de VM heeft namelijk geen weet van het gealoceerde geheugen in de native implementatie. Voor de VM is er dus geheugenruimte te kust en te keur. Ik vermoed dat .Net exact hetzelfde probleem zou ondervinden.

Het zou de Android API te goede komen wanneer alle classes die leunen op native unmanaged resources een generieke "interface Disposable{ void dispose();}" te laten implementeren.

Acties:
  • 0 Henk 'm!

  • SlaadjeBla
  • Registratie: September 2002
  • Laatst online: 00:08
Anoniem: 49627 schreef op zaterdag 23 januari 2010 @ 14:58:
[...]
Het fallback mechanisme bestaat wel degelijk en faalt in dit geval. In Java heeft elk object en finalyze() methode en deze is in de Bitmap class geimplementeerd. Wanneer deze methode wordt aangeroepen wordt de instance keurig opgeruimd. Echter, het is aan de VM om te bepalen wanneer (en of) deze methode wordt aangeroepen. Wanneer een instance out-of-scope raakt hoeft de GC niet meteen op te ruimen. Waarschijnlijk ruimt de GC in dit geval het bitmap object niet op omdat het nog niet nodig lijkt, de VM heeft namelijk geen weet van het gealoceerde geheugen in de native implementatie. Voor de VM is er dus geheugenruimte te kust en te keur. Ik vermoed dat .Net exact hetzelfde probleem zou ondervinden.
Ik denk dat je gelijk hebt. Bedankt.

Acties:
  • 0 Henk 'm!

  • bartos88
  • Registratie: Oktober 2006
  • Laatst online: 18-04-2024
Ik zie nu dat mn code wel werkt, maar er gewoon heeeeel lang over doet. Als ik wifi gebruik dan doet hij er al ongeveer 20 seconden over om een image van +-500kb naar de server te sturen en een image van +-300kb terug te ontvangen. Maar het lijkt me dat dat wel heel erg langzaam is. Zien jullie iets aan de code die ik eerder postte dat heel inefficient is ofzo?

UPDATE: het blijkt dat het ligt aan mn vodafone verbinding. Die is opeens belachelijk traag :S

[ Voor 11% gewijzigd door bartos88 op 13-02-2010 12:51 ]


Acties:
  • 0 Henk 'm!

  • Simon Verhoeven
  • Registratie: Juni 2008
  • Laatst online: 30-08-2018

Simon Verhoeven

The trial never ends.

edit: al opgelost.
Gewoon intellij android functionaliteit die nog niet 100% in orde is.

[ Voor 91% gewijzigd door Simon Verhoeven op 07-02-2010 09:57 ]


Acties:
  • 0 Henk 'm!

  • bartos88
  • Registratie: Oktober 2006
  • Laatst online: 18-04-2024
Hoi, ik heb een vraagje over het lezen van de audio van de microfoon. Ik wil een app maken dat
reageert op de hoogte van de stem van de gebruiker, maar ik kan niet vinden hoe ik dat zou moeten
uitlezen. Ik neem aan dat er niet een standaard functie voor is? Weet iemand hoe ik dat het beste zou kunnen aanpakken?
Pagina: 1 2 3 4 5 Laatste