質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

1609閲覧

AccountManagerでのAuthトークン取得

nata4101

総合スコア13

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2018/12/18 05:35

前提・実現したいこと

AndroidStudioでAccountManagerを用いてGmailのためのAuthトークンを取得しようとしています。

発生している問題・エラーメッセージ

下のソースコードで実行したらgetAuthTokenメソッドで java.lang.ArrayIndexOutOfBoundsException
のエラーが出てしまいましたが、なぜ変数型が違うのかわかりません。

エラーメッセージ

 12-18 14:25:21.329 9121-9121/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.takayanagi.acmtest, PID: 9121
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.takayanagi.acmtest/com.takayanagi.acmtest.MainActivity}: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
at com.takayanagi.acmtest.MainActivity.onCreate(MainActivity.java:30)
at android.app.Activity.performCreate(Activity.java:6251)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
at android.app.ActivityThread.-wrap11(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5417) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

該当のソースコード

java

1ソースコード 2```MainActivity.java 3 4package com.takayanagi.acmtest; 5 6import android.accounts.Account; 7import android.accounts.AccountManager; 8import android.accounts.AccountManagerFuture; 9import android.accounts.AuthenticatorException; 10import android.accounts.OperationCanceledException; 11import android.support.v7.app.AppCompatActivity; 12import android.os.Bundle; 13import android.util.Log; 14 15import java.io.IOException; 16 17public class MainActivity extends AppCompatActivity { 18 19 @Override 20 protected void onCreate(Bundle savedInstanceState) { 21 super.onCreate(savedInstanceState); 22 setContentView(R.layout.activity_main); 23 AccountManager mAccountManager = AccountManager.get(this); 24 25 26 // アカウントリストを取得 27 Account[] accounts = mAccountManager.getAccountsByType("com.google"); 28 29 Log.d("AuthToken", "account"); 30 31 32 33 AccountManagerFuture<Bundle> accountManagerFuture = mAccountManager.getAuthToken( 34 accounts[0], 35 "mail", 36 null, 37 this, 38 null, 39 null); 40 Log.d("AuthToken", "go"); 41 Bundle authTokenBundle; 42 String authToken = null; 43 try { 44 45 // Bundleを取得 46 authTokenBundle = accountManagerFuture.getResult(); 47 48 // トークンを取得 49 authToken = authTokenBundle.get(AccountManager.KEY_AUTHTOKEN).toString(); 50 } catch (OperationCanceledException e) { 51 e.printStackTrace(); 52 } catch (AuthenticatorException e) { 53 e.printStackTrace(); 54 } catch (IOException e) { 55 e.printStackTrace(); 56 } 57 if(authToken != null){ 58 Log.d("AuthToken", authToken); 59 } 60 61 62 } 63} 64 65### 試したこと 66webでjava.lang.ArrayIndexOutOfBoundsExceptionがどういうエラーなのか調べましたが 67なぜ変数型が違うのかわかりません 68 69### 補足情報(FW/ツールのバージョンなど) 70 71Android Studio3.1.1 72Android SDK Tools 26.1.1 73Android Platform Version API 28 revision 6 74 75ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

なんか言っていることが少し謎なのですが。

なぜ ArrayIndexOutOfBoundsException が変数の型が違うになるのでしょうか。
このエラーは、配列の値がオーバーしている、というエラーです。

java

1int[] arg = { 1, 2, 3 }; 2 3arg[ 3 ] = 2; // ここでエラーになる

それに、変数の方が違えばコンパイル時エラーになるか、どんなにやってもClassCastExceptionです。

これをもとというか理由にして、java.lang.RuntimeExceptionが発生しています。
多分、この後のメッセージ名や仕様ライブラリ等で検索すれば出ると思います。

投稿2018/12/18 10:10

yukkuri

総合スコア624

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nata4101

2018/12/21 06:07

回答ありがとうございます。 getAccountByType でアカウントリストが取得できていないためAccount[]配列に値が入っていないようでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問