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

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

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

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

Android Studio

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

Q&A

解決済

1回答

1401閲覧

OutOfMemoryError

telin

総合スコア18

Java

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

Android Studio

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

0グッド

0クリップ

投稿2018/12/12 05:26

Android StudioでOCRを使ったアプリを作ろうとしています。
OCRでとってきた文字列の一部分だけ抽出してリストや変数に入れていましたが、突然タイトルのエラーが出てアプリを停止するようになりました。
一応調べましたが、どこを直せばよいかわからず詰まっています。
どなたかご教授お願いします。

java

1private static String convertResponseToString(BatchAnnotateImagesResponse response) { 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 ArrayList<String> goodsList = new ArrayList<>(); 13 14 //日付取得の処理 15 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}日"; 16 Pattern pdate = Pattern.compile(regaxdate); 17 Matcher mdate = pdate.matcher(str); 18 if (mdate.find()) { 19 matchdate = mdate.group(); 20 } 21 22 //値段取得の処理 23 regaxprice = "¥([,0-9]+)"; 24 Pattern pprice = Pattern.compile(regaxprice); 25 Matcher mprice = pprice.matcher(str); 26 while(mprice.find()) { 27 priceList.add(mprice.group()); 28 } 29 30 //品名取得の処理 31// String 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}日"; 32// Pattern pdatenohou = Pattern.compile(regaxdate_); 33// Matcher mdatenohou = pdatenohou.matcher(str); //日付マッチ 34// String regaxkei = ".*小計.*"; 35// Pattern pkei = Pattern.compile(regaxkei); 36// Matcher mkeinohou = pkei.matcher(str); //計マッチ 37// 38// if(mkeinohou.find()) { 39// message.append("ああああああ"); 40// } 41// String matchdatehinmei = mdate.group(); 42// int firstidx = str.indexOf(matchdatehinmei) + matchdatehinmei.length(); 43// String matchkeihinmei = mkeinohou.group(); 44// int lastidx = str.indexOf(matchkeihinmei); 45 46// message.append(str.substring(firstidx, lastidx)); 47 48 if (str != null) { 49 message.append("" + 50 "文字認識できてます。" + "\n"); 51 if(matchdate != null) { 52 message.append(matchdate + "\n"); 53 } else { 54 message.append("日付マッチしませんでした。" + "\n"); 55 } 56 if(priceList!= null) { 57 while (priceList.isEmpty() == false) { 58 for (int i = 0; i < priceList.size() - 1; i++) { 59 message.append(priceList.get(i) + "\n"); 60 } 61 } 62 } else { 63 message.append("価格マッチしませんでした。" + "\n"); 64 } 65 } else { 66 message.append("認識されませんでした。" + "\n"); 67 } 68 return message.toString(); 69 70 } 71}

2018-12-12 14:07:48.096 27699-27934/com.google.sample.cloudvision E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1

Process: com.google.sample.cloudvision, PID: 27699 java.lang.RuntimeException: An error occurred while executing doInBackground() at android.os.AsyncTask$3.done(AsyncTask.java:353) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383) at java.util.concurrent.FutureTask.setException(FutureTask.java:252) at java.util.concurrent.FutureTask.run(FutureTask.java:271) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) at java.lang.Thread.run(Thread.java:764) Caused by: java.lang.OutOfMemoryError: Failed to allocate a 171966472 byte allocation with 25165824 free bytes and 108MB until OOM, max allowed footprint 112880952, growth limit 201326592 at java.util.Arrays.copyOf(Arrays.java:3260) at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:125) at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:451) at java.lang.StringBuilder.append(StringBuilder.java:137) at com.google.sample.cloudvision.MainActivity.convertResponseToString(MainActivity.java:395) at com.google.sample.cloudvision.MainActivity.access$100(MainActivity.java:77) at com.google.sample.cloudvision.MainActivity$LableDetectionTask.doInBackground(MainActivity.java:283) at com.google.sample.cloudvision.MainActivity$LableDetectionTask.doInBackground(MainActivity.java:269) at android.os.AsyncTask$2.call(AsyncTask.java:333) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)  at java.lang.Thread.run(Thread.java:764)  --------- beginning of system

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

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

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

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

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

guest

回答1

0

ベストアンサー

while (priceList.isEmpty() == false) {

while()ではなくif()じゃないですか?
これだと無限ループになってしまっているのではないでしょうか。

投稿2018/12/12 05:34

colt

総合スコア45

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

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

telin

2018/12/12 05:59

簡単なミスでしたすいませんありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問