海外でもアプリをインストールしてもらう為

英語対応しました。

具体的には英語版では画像を差し替え、テキストを英語に

まずvalues-jaファイルを作ります。

35

 



そこにstrings.xmlをコピー

画像差し替えは
values↓

  <string name="topimage">@drawable/titleus</string>

values-ja↓

 <string name="topimage">@drawable/top</string>

あとはxmlで

 android:src="@string/topimage"

 
@string/でvaluesに記載した名前を書く事で自動で切り替えてくれます。

文字も同様。

で、javaで@stringを呼ぶときは

getString(R.string.th15)

これでOK!

この getString() がないと正しく表示されません


 

 

 



今、webから画像をbitmapに読み込むアプリを作ってます。

色々な画像を読み込むのですが、ファイルサイズが大きい時『out of memory』で

アプリが強制終了します。

↓ここで。

bitmap= BitmapFactory.decodeStream(istream);



try catchでoutofmemoryをキャッチできるようなので

 catch(OutOfMemoryError e){

System.gc();

Log.e("error","outof"+e);

try {

Thread.sleep(2000);

} catch (InterruptedException e) {

// TODO 自動生成された catch ブロック

e.printStackTrace();

}

}

 

これで強制終了はなくなり、画像を読み込むようになりました。
 
かわりに他のアプリがkillされていくのでスマホに悪影響を与えていると思われます。

なんとか別の方法で解決したいです。 

基本的にでたエラーと対処をメインに書いていきます。

その1

logcat

05-02 15:52:23.967: E/AndroidRuntime(4344): FATAL EXCEPTION: main
05-02 15:52:23.967: E/AndroidRuntime(4344): java.lang.IndexOutOfBoundsException: Invalid index 20, size is 20
05-02 15:52:23.967: E/AndroidRuntime(4344): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
05-02 15:52:23.967: E/AndroidRuntime(4344): at java.util.ArrayList.get(ArrayList.java:304)
05-02 15:52:23.967: E/AndroidRuntime(4344): at madm958.eggg.Point.onClick(Point.java:133)
05-02 15:52:23.967: E/AndroidRuntime(4344): at android.view.View.performClick(View.java:3574)
05-02 15:52:23.967: E/AndroidRuntime(4344): at android.view.View$PerformClick.run(View.java:14293)
05-02 15:52:23.967: E/AndroidRuntime(4344): at android.os.Handler.handleCallback(Handler.java:605)
05-02 15:52:23.967: E/AndroidRuntime(4344): at android.os.Handler.dispatchMessage(Handler.java:92)
05-02 15:52:23.967: E/AndroidRuntime(4344): at android.os.Looper.loop(Looper.java:137)
05-02 15:52:23.967: E/AndroidRuntime(4344): at android.app.ActivityThread.main(ActivityThread.java:4441)
05-02 15:52:23.967: E/AndroidRuntime(4344): at java.lang.reflect.Method.invokeNative(Native Method)
05-02 15:52:23.967: E/AndroidRuntime(4344): at java.lang.reflect.Method.invoke(Method.java:511)
05-02 15:52:23.967: E/AndroidRuntime(4344): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823)
05-02 15:52:23.967: E/AndroidRuntime(4344): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590)
05-02 15:52:23.967: E/AndroidRuntime(4344): at dalvik.system.NativeStart.main(Native Method)


エラーに関わっていた箇所 

Random rr = new Random();

int n = r.nextInt(10)+1;

int nn = rr.nextInt(20)+1;

text.setText(aALQ.get(nn));


aALQ(arraylist)に20個数字をadd
0〜19

 nnに代入される数字は
1〜20

はい、.IndexOutOfBoundsException!

ArrayListにアクセスする際に、インデックスナンバーが要素数より大きい場合やマイナスの場合に投げられる

修正

int nn = rr.nextInt(20)+1;

int nn = rr.nextInt(20);
に。

解決!

↑このページのトップヘ