dodání ihned! nové
Black Friday je tu! Využij jedinečnou příležitost a získej až 80 % znalostí navíc zdarma! Více zde
BF

Diskuze: Zobrazení jména učtu na zařízení: GET_ACCOUNTS permission v tlačítku

Aktivity
Avatar
david751
Člen
Avatar
david751:8.2.2020 18:45

Zdravím, chtěl bych aby se mi vrámci kódu zobrazilo jméno(jména) účtů na daném zařízení. To se udělá pomocí GET_ACCOUNTS.

Povolení a kontrola GET_ACCOUNTS se mi podařilo udělat. Systém to sice zobrazuje jako povolení ke kontaktům, což může být matoucí ale jede to.

Problém bude však v úseku označeném v komentáři jako get get
Po stisknutí tlačítka by se měly dát do seznamu všechny účty daného zařízení a následně přiřadit k text view.
Vzal jsem to odsud. Je sice 5 let staré, ale nic lepšího jsem nenašel. Ten kód mi šel až na to this. Nevíte někdo jak to upravit?

Díky moc

Na výstupu:

C:\Users\david\AndroidStudioProjects\uzivatele\app\src\main\java\com\example\uzivatele\MainActivity.java:55: error: ')' expected
        };
         ^
C:\Users\david\AndroidStudioProjects\uzivatele\app\src\main\java\com\example\uzivatele\MainActivity.java:55: error: ';' expected
        };
          ^
C:\Users\david\AndroidStudioProjects\uzivatele\app\src\main\java\com\example\uzivatele\MainActivity.java:59: error: illegal start of expression
    public void checkPermission(String permission, int requestCode)
    ^
C:\Users\david\AndroidStudioProjects\uzivatele\app\src\main\java\com\example\uzivatele\MainActivity.java:59: error: ';' expected
    public void checkPermission(String permission, int requestCode)
          ^
C:\Users\david\AndroidStudioProjects\uzivatele\app\src\main\java\com\example\uzivatele\MainActivity.java:59: error: ')' expected
    public void checkPermission(String permission, int requestCode)
                                      ^
C:\Users\david\AndroidStudioProjects\uzivatele\app\src\main\java\com\example\uzivatele\MainActivity.java:59: error: illegal start of expression
    public void checkPermission(String permission, int requestCode)
                                                 ^
C:\Users\david\AndroidStudioProjects\uzivatele\app\src\main\java\com\example\uzivatele\MainActivity.java:59: error: ';' expected
    public void checkPermission(String permission, int requestCode)
                                                  ^
C:\Users\david\AndroidStudioProjects\uzivatele\app\src\main\java\com\example\uzivatele\MainActivity.java:59: error: not a statement
    public void checkPermission(String permission, int requestCode)
                                                       ^
C:\Users\david\AndroidStudioProjects\uzivatele\app\src\main\java\com\example\uzivatele\MainActivity.java:59: error: ';' expected
    public void checkPermission(String permission, int requestCode)
                                                                  ^
C:\Users\david\AndroidStudioProjects\uzivatele\app\src\main\java\com\example\uzivatele\MainActivity.java:77: error: illegal start of expression
    public void onRequestPermissionsResult(int requestCode,
    ^
C:\Users\david\AndroidStudioProjects\uzivatele\app\src\main\java\com\example\uzivatele\MainActivity.java:77: error: illegal start of expression
    public void onRequestPermissionsResult(int requestCode,
           ^
C:\Users\david\AndroidStudioProjects\uzivatele\app\src\main\java\com\example\uzivatele\MainActivity.java:77: error: ';' expected
    public void onRequestPermissionsResult(int requestCode,
                                          ^
C:\Users\david\AndroidStudioProjects\uzivatele\app\src\main\java\com\example\uzivatele\MainActivity.java:78: error: ';' expected
                                           String[] permissions,
                                                   ^
C:\Users\david\AndroidStudioProjects\uzivatele\app\src\main\java\com\example\uzivatele\MainActivity.java:78: error: not a statement
                                           String[] permissions,
                                                    ^
C:\Users\david\AndroidStudioProjects\uzivatele\app\src\main\java\com\example\uzivatele\MainActivity.java:78: error: ';' expected
                                           String[] permissions,
                                                               ^
C:\Users\david\AndroidStudioProjects\uzivatele\app\src\main\java\com\example\uzivatele\MainActivity.java:79: error: ';' expected
                                           int[] grantResults)
                                                             ^
C:\Users\david\AndroidStudioProjects\uzivatele\app\src\main\java\com\example\uzivatele\MainActivity.java:103: error: reached end of file while parsing
}
 ^
17 errors

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 0s

Zkusil jsem: Můj javový kód:

package com.example.uzivatele;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import android.Manifest;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import java.util.LinkedList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private Button button_contacts ;

    private static final int ACCOUNT_PERMISSION_CODE = 100;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        checkPermission(
                Manifest.permission.GET_ACCOUNTS,
                ACCOUNT_PERMISSION_CODE);


        // get get
        button_contacts = findViewById(R.id.button_get_names);
        /// kód
        button_contacts.setOnClickListener((new View.OnClickListener(){

            @Override
            public void onClick(View v){
                AccountManager manager = AccountManager.get(this);
                Account[] accounts = manager.getAccountsByType("com.google");
                List<String> username = new LinkedList<>();

                for (Account account : accounts) {
                    username.add(account.name);
                }
                TextView myoutput = findViewById(R.id.output_text);
                myoutput.setText((CharSequence) username);
            }
        // get get

        };

    }

    public void checkPermission(String permission, int requestCode)
    {
        if (ContextCompat.checkSelfPermission(MainActivity.this, permission)
                == PackageManager.PERMISSION_DENIED) {

            // Requesting the permission
            ActivityCompat.requestPermissions(MainActivity.this,
                    new String[] { permission },
                    requestCode);
        }
        else {
            Toast.makeText(MainActivity.this,
                    "Permission already granted",
                    Toast.LENGTH_SHORT)
                    .show();
        }
    }

    public void onRequestPermissionsResult(int requestCode,
                                           String[] permissions,
                                           int[] grantResults)
    {
        super.onRequestPermissionsResult(requestCode,
                        permissions,
                        grantResults);

        if (requestCode == ACCOUNT_PERMISSION_CODE) {
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(MainActivity.this,
                        "Accounts Permission Granted",
                        Toast.LENGTH_SHORT)
                        .show();
            }
            else {
                Toast.makeText(MainActivity.this,
                        "Accounts Permission Denied",
                        Toast.LENGTH_SHORT)
                        .show();
            }
        }
    }


}
 
Odpovědět
8.2.2020 18:45
Avatar
Milan Suchomel:10.2.2020 18:28

Myslíš tadyto this?

AccountManager.get(this)

Jestli ano tak to nahraď

AccountManager.get(MainActivity.this)

... bere to ten listener a nejspíš to potřebuje context :)

 
Nahoru Odpovědět
10.2.2020 18:28
Avatar
david751
Člen
Avatar
Odpovídá na Milan Suchomel
david751:10.2.2020 20:14

Myslím to this co je v tom screenshotu hned nad tvým příspěvkem. Tedy ano

Editováno 10.2.2020 20:15
 
Nahoru Odpovědět
10.2.2020 20:14
Avatar
david751
Člen
Avatar
david751:10.2.2020 20:20

To mi tedy vzalo. Teď tam je ali další chyba, kterou vůbec nechápu -->screenshot.
Na konec té funkce by měl být středník ale je to podtrženo, když bych ho oddělal je to samozřejmě také špatně. Co můžou znamenat ty errory?

 
Nahoru Odpovědět
10.2.2020 20:20
Avatar
david751
Člen
Avatar
david751:10.2.2020 20:20

Celý výstup:

 
Nahoru Odpovědět
10.2.2020 20:20
Avatar
Odpovídá na david751
Matúš Olejník:10.2.2020 22:22

Neviem aké máš skúsenosti s programovaním, ale ak len začínaš možno si si vybral trochu zložitejší cieľ :)

Ak sa pozrieš, ktorá začiatočná zátvorka ti svieti k tej koncovej na ktorej si s kurzom, zistíš že patrí k tomu View.OnClickLis­tener, takže za tú koncovú ešte treba doplnit dve koncové zátvorky k tým dvom, ktoré ti ostávajú naľavo od toho new View.OnClickLis­tener.

Editováno 10.2.2020 22:22
Nahoru Odpovědět
10.2.2020 22:22
/* I am not sure why this works but it fixes the problem */
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
david751
Člen
Avatar
Odpovídá na Matúš Olejník
david751:11.2.2020 15:17

Myslím že jen jednu, nechci přece uzavřít celou Main activity. Mám tam totiž ještě ty další funkce. Tu jednu za ní tam mám.
Teď to vypadá takto a stále je to podtržené:

package com.example.uzivatele;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import android.Manifest;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import java.util.LinkedList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private Button button_contacts ;

    private static final int ACCOUNT_PERMISSION_CODE = 100;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        checkPermission(
                Manifest.permission.GET_ACCOUNTS,
                ACCOUNT_PERMISSION_CODE);


        ////


        button_contacts = findViewById(R.id.button_get_names);
        /// kód

            button_contacts.setOnClickListener((new View.OnClickListener(){

                @Override
                public void onClick(View v){
                    AccountManager manager = AccountManager.get(MainActivity.this);
                    Account[] accounts = manager.getAccountsByType("com.google");
                    List<String> username = new LinkedList<>();

                    for (Account account : accounts) {
                        username.add(account.name);
                    }
                    TextView myoutput = findViewById(R.id.output_text);
                    myoutput.setText((CharSequence) username);

            ///

                };
            };
    }



    public void checkPermission(String permission, int requestCode)
    {
        if (ContextCompat.checkSelfPermission(MainActivity.this, permission)
                == PackageManager.PERMISSION_DENIED) {

            // Requesting the permission
            ActivityCompat.requestPermissions(MainActivity.this,
                    new String[] { permission },
                    requestCode);
        }
        else {
            Toast.makeText(MainActivity.this,
                    "Permission already granted",
                    Toast.LENGTH_SHORT)
                    .show();
        }
    }

    public void onRequestPermissionsResult(int requestCode,
                                           String[] permissions,
                                           int[] grantResults)
    {
        super.onRequestPermissionsResult(requestCode,
                        permissions,
                        grantResults);

        if (requestCode == ACCOUNT_PERMISSION_CODE) {
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(MainActivity.this,
                        "Accounts Permission Granted",
                        Toast.LENGTH_SHORT)
                        .show();
            }
            else {
                Toast.makeText(MainActivity.this,
                        "Accounts Permission Denied",
                        Toast.LENGTH_SHORT)
                        .show();
            }
        }
    }


}
 
Nahoru Odpovědět
11.2.2020 15:17
Avatar
Milan Suchomel:11.2.2020 15:39

Měl na mysli 2x klasickou závorku "))", jelikož máš před

new View.OnClickListener....

dvě závorky jedna je tam zbytečná.

 
Nahoru Odpovědět
11.2.2020 15:39
Avatar
Nahoru Odpovědět
11.2.2020 16:11
/* I am not sure why this works but it fixes the problem */
Avatar
david751
Člen
Avatar
david751:11.2.2020 16:15

Dobře, opraveno. I tak ale ta samá chyba. Jinak jsem si všiml, že hned tu první závorku:
(new View.OnClickLis­tener() nemám ukončenou ale ani nikde ukončit nemůžu.
Co bych tedy ještě měl změnit? 8-|

button_contacts.setOnClickListener(new View.OnClickListener(){

                @Override
                public void onClick(View v){
                    AccountManager manager = AccountManager.get(MainActivity.this);
                    Account[] accounts = manager.getAccountsByType("com.google");
                    List<String> username = new LinkedList<>();

                    for (Account account : accounts) {
                        username.add(account.name);
                    }
                    TextView myoutput = findViewById(R.id.output_text);
                    myoutput.setText((CharSequence) username));


            ///

                };
            };
 
Nahoru Odpovědět
11.2.2020 16:15
Avatar
Milan Suchomel:11.2.2020 17:08

Nemáš to opraveno

button_contacts.setOnClickListener(new View.OnClickListener(){

    @Override
    public void onClick(View v){
        AccountManager manager = AccountManager.get(MainActivity.this);
        Account[] accounts = manager.getAccountsByType("com.google");
        List<String> username = new LinkedList<>();

        for (Account account : accounts) {
            username.add(account.name);
        }
        TextView myoutput = findViewById(R.id.output_text);
        myoutput.setText((CharSequence) username));
    };
});

PS: Jak už bylo řečeno chybí ti základy, zkus něco lehčího.

 
Nahoru Odpovědět
11.2.2020 17:08
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.