[android] Gekoppelde Google Account verkijgen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ObAt
  • Registratie: Januari 2009
  • Laatst online: 06-06 08:09

ObAt

Loading...

Topicstarter
Hallo Tweakers,

Ik ben al een tijdje aan het proberen om het Google Account te krijgen van een Android Tablet, aan de hand van deze account wil ik data nakijken in een database (welke rechten deze user heeft e.d.). Ik heb dit al geprobeerd nadat ik de GET_ACCOUNTS-permission in Android Manifest heb gezet.

Deze code geeft geen output bij mij:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button testButton = (Button)findViewById(R.id.testButton);
        testButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                
                AccountManager manager = (AccountManager) getSystemService(ACCOUNT_SERVICE);
                Account[] list = manager.getAccounts();
                String gmail = null;

                for(Account account: list)
                {
                    if(account.type.equalsIgnoreCase("com.google"))
                    {
                        gmail = account.name;
                        Toast.makeText(getApplication(), gmail, Toast.LENGTH_LONG);
                        break;
                    }
                }
            
            }
    });


De andere codes lopen gewoon vast of krijg ik überhaupt niet werkend :X Misschien wel rekening mee houden dat ik nog een java noob ben :)

Alvast Bedankt!

ObAt

Mijn dagelijkse spamdosis is te lezen op http://twitter.com/#!/ObAtG


Acties:
  • 0 Henk 'm!

Anoniem: 241683

Wat heb je al aan debuggen gedaan?

Ontwikkel je met eclipse? Dan moet je deze webpagina even gaan lezen: http://www.androidacademy...roid-with-eclipse?start=1

Dit gaat je namelijk ontzettend veel helpen bij toekomstige projecten. Je moet het probleem namelijk isoleren. En dit is met breakpoints mooi te doen aangezien je de waarden van alle variabelen op dat moment kunt bekijken.

Ik zou zeggen lees de pagina eens, en kijk waar je script vastloopt en kom dan terug :)

Acties:
  • 0 Henk 'm!

  • ObAt
  • Registratie: Januari 2009
  • Laatst online: 06-06 08:09

ObAt

Loading...

Topicstarter
Bedankt voor de handige tip!

Edit: Het werkt :) Was een foutje met de Toast.

Java:
1
Toast.makeText(getBaseContext(), gmail, Toast.LENGTH_SHORT).show();

[ Voor 116% gewijzigd door ObAt op 25-05-2012 10:26 ]

Mijn dagelijkse spamdosis is te lezen op http://twitter.com/#!/ObAtG


Acties:
  • 0 Henk 'm!

Anoniem: 241683

Ja ik ben ook benieuwd wat getApplication() doet, volgens mij moet je dan nog getApplication().getContext() doen maar ik kan het mishebben.
Daarnaast wil je voor elementen die een context nodig hebben het lieft de eigen class gebruiken. Ik weet niet hoe je activity heet?

Als je activity HelloActivity heet zal je toast code er zo uit moeten zien:
Java:
1
Toast.makeText(HelloActivity.this, gmail, Toast.LENGTH_LONG); 

Acties:
  • 0 Henk 'm!

  • ObAt
  • Registratie: Januari 2009
  • Laatst online: 06-06 08:09

ObAt

Loading...

Topicstarter
Bij die code krijg ik geen Toast te zien, maar ook geen chrash, bij getBaseContext() krijg ik wel een Toast te zien. Ik weet zelf ook niet echt de verschillen.

Mijn dagelijkse spamdosis is te lezen op http://twitter.com/#!/ObAtG


Acties:
  • 0 Henk 'm!

Anoniem: 241683

Je moet een context meegeven aan elementen. Jij geeft de context van de complete applicatie mee terwijl je de context van de activity nodig hebt. http://stackoverflow.com/...-context-class-in-android :)

Acties:
  • 0 Henk 'm!

  • ObAt
  • Registratie: Januari 2009
  • Laatst online: 06-06 08:09

ObAt

Loading...

Topicstarter
Anoniem: 241683 schreef op vrijdag 25 mei 2012 @ 11:00:
Je moet een context meegeven aan elementen. Jij geeft de context van de complete applicatie mee terwijl je de context van de activity nodig hebt. http://stackoverflow.com/...-context-class-in-android :)
Dus het kan in principe niet kwaad om een te grote context mee te geven? Of is dit echt niet goed?

Mijn dagelijkse spamdosis is te lezen op http://twitter.com/#!/ObAtG


Acties:
  • 0 Henk 'm!

Anoniem: 241683

Het kan geen kwaad. Alleen is het meer een conventie. De application context wordt vaak gebruikt bij objecten die niet alleen betrekking hebben op de huidige activity, en dus een grotere scope hebbem.

Acties:
  • 0 Henk 'm!

  • SumBeam
  • Registratie: Maart 2006
  • Laatst online: 15:14
Om de toast te laten zien moet je wel .show() aanroepen. Dat is het verschil tussen jullie twee toasts ;)

Java:
1
Toast.makeText(HelloActivity.this, gmail, Toast.LENGTH_LONG).show();

[ Voor 30% gewijzigd door SumBeam op 26-05-2012 15:27 . Reden: Code erbij ]


Acties:
  • 0 Henk 'm!

  • Stukfruit
  • Registratie: Oktober 2007
  • Niet online
ObAt schreef op vrijdag 25 mei 2012 @ 12:23:
[...]


Dus het kan in principe niet kwaad om een te grote context mee te geven? Of is dit echt niet goed?
Het kan kwaad omdat je er geheugen mee kan lekken. Een Application blijft gedurende de hele draaitijd van een app aanwezig in het geheugen, zelfs wanneer er geen Activity's in beeld zijn of services worden gebruikt. Alle data die daarmee op een manier verbonden wordt blijft ook in het geheugen.

Nu zal het met een Toast misschien niet zo erg zijn, maar het is bijna altijd een slecht idee om Application te gebruiken wanneer je een Context nodig hebt omdat er ook altijd wel een Activity of service aanwezig is (zo niet, dan is het ontwerp van je app slecht of heb je te maken met een uitzonderlijk geval).

Dat zit wel Schnorr.


Acties:
  • 0 Henk 'm!

  • ObAt
  • Registratie: Januari 2009
  • Laatst online: 06-06 08:09

ObAt

Loading...

Topicstarter
Bedankt voor de tips! Ik ben weer een heel stuk wijzer :)

Mijn dagelijkse spamdosis is te lezen op http://twitter.com/#!/ObAtG


Acties:
  • 0 Henk 'm!

  • Stukfruit
  • Registratie: Oktober 2007
  • Niet online
Als je dit soort gegevens gebruikt moet je van Google (en de wet, AFAIK) wel een privacy policy aan je app meegeven waarin je aangeeft dat gebruik wordt gemaakt van privedata, hoe of waarom en wat ermee wordt gedaan.

Dat zit wel Schnorr.


Acties:
  • 0 Henk 'm!

  • ObAt
  • Registratie: Januari 2009
  • Laatst online: 06-06 08:09

ObAt

Loading...

Topicstarter
Stukfruit schreef op zondag 27 mei 2012 @ 14:34:
Als je dit soort gegevens gebruikt moet je van Google (en de wet, AFAIK) wel een privacy policy aan je app meegeven waarin je aangeeft dat gebruik wordt gemaakt van privedata, hoe of waarom en wat ermee wordt gedaan.
De Market geeft standaard ook aan dat de App gebruikt maak van de Accounts, is dit onvoldoende?

Mijn dagelijkse spamdosis is te lezen op http://twitter.com/#!/ObAtG


Acties:
  • 0 Henk 'm!

  • Stukfruit
  • Registratie: Oktober 2007
  • Niet online
Dat is idd onvoldoende :Y

http://www.android.com/us...stribution-agreement.html

Zie sectie 4.3.

* Stukfruit heeft er ook eens een virtuele tik voor gehad..

Dat zit wel Schnorr.


Acties:
  • 0 Henk 'm!

  • ObAt
  • Registratie: Januari 2009
  • Laatst online: 06-06 08:09

ObAt

Loading...

Topicstarter
Stukfruit schreef op zondag 27 mei 2012 @ 15:28:
Dat is idd onvoldoende :Y

http://www.android.com/us...stribution-agreement.html

Zie sectie 4.3.

* Stukfruit heeft er ook eens een virtuele tik voor gehad..
Das een goede tip :)

Maar ik heb een nieuwe class aangemaakt voor een HttpRequest, maar de code chrasht steeds op de Toast, ik snap niet waarom.

Java:
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
class RequestTask extends AsyncTask<String, String, String>{

    @Override
    protected String doInBackground(String... uri) {
        HttpClient httpclient = new DefaultHttpClient();
        HttpResponse response;
        String responseString = null;
        try {
            response = httpclient.execute(new HttpGet(uri[0]));
            StatusLine statusLine = response.getStatusLine();
            if(statusLine.getStatusCode() == HttpStatus.SC_OK){
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                response.getEntity().writeTo(out);
                out.close();
                responseString = out.toString();
            } else{
                //Closes the connection.
                response.getEntity().getContent().close();
                throw new IOException(statusLine.getReasonPhrase());
            }
        } catch (ClientProtocolException e) {
            //TODO Handle problems..
        } catch (IOException e) {
            //TODO Handle problems..
        }
        CheckUser(responseString);
        return responseString;
    }

    void CheckUser(String Email){
        Toast.makeText(null, Email, Toast.LENGTH_LONG).show();
        //Toast.makeText(MijnActivity.this, gmail, Toast.LENGTH_LONG).show();
       //Toast.makeText(getBaseContext(), gmail, Toast.LENGTH_SHORT).show();
    }


Geen een regel wil werken :(

Mijn dagelijkse spamdosis is te lezen op http://twitter.com/#!/ObAtG


Acties:
  • 0 Henk 'm!

  • Stukfruit
  • Registratie: Oktober 2007
  • Niet online
Je geeft null door ipv een Context (Activity kan je eventueel ook meegeven als argument aan AsyncTask en daar tijdelijk als member opslaan, hoewel dat hier niet nodig is.. maar het zorgt wel voor schonere code).

Daarnaast probeer je een interfacebewerking te doen in een andere thread (die waarin je de request doet). in doInBackground mag je niets op de UI-thread doen. Dat mag alleen in onPreExecute, onProgressUpdate en onPostExecute. Dat staat trouwens ook allemaal in de documentatie ;)

[ Voor 25% gewijzigd door Stukfruit op 27-05-2012 16:57 ]

Dat zit wel Schnorr.


Acties:
  • 0 Henk 'm!

  • ObAt
  • Registratie: Januari 2009
  • Laatst online: 06-06 08:09

ObAt

Loading...

Topicstarter
Bedankt! Ik zal dit is gaan bestuderen :)

Mijn dagelijkse spamdosis is te lezen op http://twitter.com/#!/ObAtG

Pagina: 1