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

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

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

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

2回答

4812閲覧

java.lang.IllegalStateException: System services not available to Activities before onCreate()

telin

総合スコア18

Java

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

1グッド

0クリップ

投稿2018/12/19 05:55

編集2018/12/20 00:38

AndroidstudioでOCRを使ったアプリを作っていますが、タイトルのエラーが解消できません。
エラー文をみてonCreate()の前でgoodsListの宣言をすればいいのかと思い、試してみましたが、そうなるとconvertResponseToStringのgoodsListが使えなくなります。
私の知識では八方塞がりです。
詳しい方ご教授願います。

java

1public static String convertResponseToString(BatchAnnotateImagesResponse response, List gooosList) { 2 StringBuilder message = new StringBuilder("I found these things:\n\n"); 3 4 TextAnnotation label = response.getResponses().get(0).getFullTextAnnotation(); 5 String str = null; 6 str = label.getText(); 7 8 String matchdate = null; 9 String regaxdate = null; 10 String regaxprice = null; 11 ArrayList<String> priceList = new ArrayList<>(); 12 goodsList = null; 13 14 int firstidx = 0; 15 int lastidx = 0; 16 17 //日付取得の処理 18 regaxdate = "\d{4}-\d{1,2}-\d{1,2}|\d{4}/\d{1,2}/\d{1,2}|\d{4}年\d{1,2}月\d{1,2}日"; 19 Pattern pdate = Pattern.compile(regaxdate); 20 Matcher mdate = pdate.matcher(str); 21 if (mdate.find()) { 22 matchdate = mdate.group(); 23 } 24 25 //値段取得の処理 26 regaxprice = "¥([,0-9]+)"; 27 Pattern pprice = Pattern.compile(regaxprice); 28 Matcher mprice = pprice.matcher(str); 29 while(mprice.find()) { 30 priceList.add(mprice.group()); 31 } 32 33 //品名取得の処理 34 String regaxkei = ".*計.*"; 35 Pattern pkei = Pattern.compile(regaxkei); 36 Matcher mkeinohou = pkei.matcher(str); //計マッチ 37 38 39 if(mkeinohou.find()) { 40 String matchdatehinmei = mdate.group(); 41 firstidx = str.indexOf(matchdatehinmei) + matchdatehinmei.length(); 42 String matchkeihinmei = mkeinohou.group(); 43 lastidx = str.indexOf(matchkeihinmei); 44 String datekarakei = str.substring(firstidx, lastidx); 45 datekarakei.replaceAll("[,0-9]+", ""); 46 datekarakei.replaceAll("\\", ""); 47 goodsList = Arrays.asList(datekarakei.split("\n")); 48 message.append(goodsList); 49 50 handler.post(new Runnable() { 51 @Override 52 public void run() { 53 ResitoActivity RA = new ResitoActivity(); 54 ArrayAdapter arrayAdapter = new ArrayAdapter(RA, R.layout.resitolayout, goodsList); 55 ListView listView = null; 56 listView.findViewById(R.id.resitolist); 57 listView.setAdapter(arrayAdapter); 58 } 59 }); 60 } else { 61 message.append("'計'がマッチしませんでした。"); 62 }

エラー文

java.lang.IllegalStateException: System services not available to Activities before onCreate()
at android.app.Activity.getSystemService(Activity.java:5883)
at android.view.LayoutInflater.from(LayoutInflater.java:229)
at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:210)
at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:204)
at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:190)
at com.example.tamayamaryo.recipebook_sotuken.ResitoActivity$7.run(ResitoActivity.java:433)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:251)
at android.app.ActivityThread.main(ActivityThread.java:6572)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

bochan2👍を押しています

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

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

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

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

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

azuapricot

2018/12/19 06:33

質問タイトルにある例外文だけでは大抵エラーの判断は難しいです。 エラー文はなるべく全部貼るようにしてください
guest

回答2

0

本筋の回答はすでに出ていますが、表題にされたエラーメッセージの意味の解説として。

AndroidではOSの制約によって「onCreate()が呼ばれる以前に行ってはいけない処理」というものが存在します。それを破ったときに、表題のようなエラーメッセージが出ます。「エラー文をみてonCreate()の前でgoodsListの宣言をすればいいのかと思った」とされていますが、発想としては逆方向、むしろ悪くなる方向に考えておられます。

投稿2018/12/20 01:52

編集2018/12/20 01:52
keicha_hrs

総合スコア6768

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

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

telin

2018/12/20 02:05

なるほど。OSの制約のあれこれはほとんど知らなかったので勉強になります。 ありがとうございます。
guest

0

java

1 handler.post(new Runnable() { 2 @Override 3 public void run() { 4 ResitoActivity RA = new ResitoActivity(); // ここ 5 ArrayAdapter arrayAdapter = new ArrayAdapter(RA, R.layout.resitolayout, goodsList); 6 ListView listView = null; 7 listView.findViewById(R.id.resitolist); 8 listView.setAdapter(arrayAdapter); 9 } 10 });

**Activityは自分でnewしてはいけません。**本来システム側でonCreateなどの必要な初期化などが行われるところが、これでは行われません。その状態のActivityをArrayAdapterの引数に渡したため、このエラーが出ています。
これが何らかのActivityの中のメソッドであるなら、ArrayAdapterの1個目の引数はthisとかになるのではないでしょうか。

投稿2018/12/20 01:10

swordone

総合スコア20651

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

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

telin

2018/12/20 01:33

Activityはnewしてはいけないんですね。勉強になりました。 最初はthisでやろうとしていたんですが、 Cannot resolve constructor 'ArrayAdapter(anonymous java.lang.Runnable, int, java.util.List<java.lang.String>) というエラーが出てコンパイルが通らず、こうしていました。 どうすればよいでしょうか?
swordone

2018/12/20 01:46

この記述をしているのがRunnableの匿名クラス内なので、 (このActivity名).this とするといいのではないでしょうか。
telin

2018/12/20 02:12

そのように書いてみると、 'com.example.//省略//.ResitoActivity.this' cannot be referenced from a static context というエラーになります。 どういう意味でしょうか?
swordone

2018/12/20 02:46

このメソッドがstaticだからです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問