- 投稿日:2020-10-06T22:51:09+09:00
【Java】データ型・文字列のクラスのチートシート
個人用メモにJavaのデータ型をメモりました。
とりあえず最初は
- String(文字列)
- int(整数)
- double(小数点を含む数)
この三つは確実に抑える。
データ型・文字列のクラス
種類 型名 扱える範囲 整数型 int -2147483648 ~ 2147483647 までの整数 文字列クラス String "Java"、"自分"、"Mac" などの複数の文字 浮動小数点型 double ± 1.8 × 10308 ~ ± 3.4 × 10 - 324 さらに細かい数字 論理型 boolean true ( 真 ) or false ( 偽 ) 真偽知 文字型 char "あ" 、 "虹" などの一文字の文字列 整数型 short -32768 ~ 32767 までの整数 整数型 long -92223372036854775808 ~ 9223372036854775807 までの整数 整数型 byte -128 ~ 127 までの整数 浮動小数点型 float ± 3.4 × 1039 ~ ± 1.4 × 10 - 45 細かい数字
- 投稿日:2020-10-06T15:12:51+09:00
Microsoft Azure SDK For SQL API of Azure Cosmos DB Service 4.6 を使ってみる
Azure CosmosDB Java SDK version 4.x が2020年に公開されております。
以下ドキュメントに使い方が公開されているのですが、最低限のHello Worldコードとしてはどうなるのかを作ってみました。
https://docs.microsoft.com/en-us/azure/cosmos-db/sql-api-sdk-java-v4pom.xml
<!-- https://mvnrepository.com/artifact/com.azure/azure-cosmos --> <dependency> <groupId>com.azure</groupId> <artifactId>azure-cosmos</artifactId> <version>4.6.0</version> </dependency>接続に必要な情報はAzure Portalで取得できます。
package hello.cosmosdb; import java.util.Iterator; import com.azure.cosmos.CosmosClient; import com.azure.cosmos.CosmosClientBuilder; import com.azure.cosmos.CosmosContainer; import com.azure.cosmos.CosmosDatabase; import com.azure.cosmos.models.CosmosQueryRequestOptions; import com.azure.cosmos.util.CosmosPagedIterable; import com.fasterxml.jackson.databind.JsonNode; /** * * https://docs.microsoft.com/en-us/azure/cosmos-db/sql-api-sdk-java-v4 * https://docs.microsoft.com/en-us/java/api/overview/azure/cosmos-readme?view=azure-java-stable * https://github.com/Azure-Samples/azure-cosmos-java-sql-api-samples/blob/367c796257feb37d2f8003a86fe51b0658fcf6ff/src/main/java/com/azure/cosmos/examples/queries/sync/QueriesQuickstart.java#L119 * * @author Hiroki Oya * */ public class HelloCosmosDbJavaSDK_V4 { private CosmosDatabase database; private CosmosContainer container; public void query() throws Exception { // [Azure Portal] - [your_cosmosdb] - [Keys] - [URI] String serviceEndpoint = "https://your_cosmosdb.documents.azure.com:443/"; // [Azure Portal] - [your_cosmosdb] - [Keys] - [PRIMARY KEY | SECONDARY KEY] String key = "your_key_here"; // [Azure Portal] - [your_cosmosdb] - [Data Explorer] String databaseId = "TEST"; // [Azure Portal] - [your_cosmosdb] - [Data Explorer] String containerId = "container_for_test"; String query = "SELECT * from c"; CosmosClient client = new CosmosClientBuilder() // .endpoint(serviceEndpoint) // .key(key) // .buildClient(); database = client.getDatabase(databaseId); container = database.getContainer(containerId); CosmosQueryRequestOptions options = new CosmosQueryRequestOptions(); CosmosPagedIterable<JsonNode> page = container.queryItems(query, options, JsonNode.class); Iterator<JsonNode> it = page.iterator(); while (it.hasNext()) { System.err.println(it.next()); } client.close(); } public static void main(String[] args) throws Exception { HelloCosmosDbJavaSDK_V4 h = new HelloCosmosDbJavaSDK_V4(); h.query(); } }Reference
Azure Cosmos DB Java SDK v4 for SQL API release notes and resources | Microsoft Docs
https://docs.microsoft.com/en-us/azure/cosmos-db/sql-api-sdk-java-v4Maven Repository: com.azure » azure-cosmos
https://mvnrepository.com/artifact/com.azure/azure-cosmosAzure CosmosDB Client Library for Java | Microsoft Docs
https://docs.microsoft.com/en-us/java/api/overview/azure/cosmos-readme?view=azure-java-stableazure-cosmos-java-sql-api-samples/QueriesQuickstart.java at 367c796257feb37d2f8003a86fe51b0658fcf6ff · Azure-Samples/azure-cosmos-java-sql-api-samples · GitHub
https://github.com/Azure-Samples/azure-cosmos-java-sql-api-samples/blob/367c796257feb37d2f8003a86fe51b0658fcf6ff/src/main/java/com/azure/cosmos/examples/queries/sync/QueriesQuickstart.javaAzure Cosmos DB Workshop - Querying in Azure Cosmos DB
https://cosmosdb.github.io/labs/dotnet/labs/03-querying_in_azure_cosmosdb.html以上です。
- 投稿日:2020-10-06T14:12:20+09:00
Processing(Java)からSwiftで書いたプログラムを呼び出す
Processing を使ってユーティリティ系のソフトを作っていると、どうしてもかゆいところに手がとどかない(システム環境設定系とか)
Swiftで実装すればAPIを叩くのに苦労はしないが、
Java側でRuntime#execとかProcessBuilderを使うのはなんか違う気がするので、
どうにかしてして、Javaで実装されたメソッドのようにSwiftで実装した関数を叩きたい!JNA(Java Native Access)
Processingの実体はPAppletクラスを継承したJavaクラスであるため、
Javaの文法、資産を利用することができるJavaには、JNI(Java Native Interface)と呼ばれる、C/C++などで実装されたネイティブコードと連携する仕組みがある。
このJNIを利用すれば、Swiftで実装したネイティブコードを呼び出されるのではと思うが、
このJavaとC/C++を繋ぐJNIを書くのがマヂ無理
(パッケージ名を含めた関数名をつけた関数をつくったり...)※ Swiftの実装を呼び出すには結局SwiftとJavaの間にCのコードを挟まないといけない
Write & call Swift code using Java’s JNI
https://stackoverflow.com/questions/27628385/write-call-swift-code-using-java-s-jniあー、Javaからネイティブコードを呼びたい
けど、JNIは書きたくないそんなときは JNA(Java Native Access) を使おう
なんかよしなにやってくれるらしい!JNAに関してはこのあたりを参照されたし
https://qiita.com/everylittle/items/b888cbec643f14de5ea6Swiftのソースからダイナミックリンクライブラリを生成
兎にも角にも、Javaから呼び出したいメソッドを作ります
hello.swiftimport Darwin.C @_cdecl("hello") public func hello() { print("Hello") fflush(stdout) }上のプログラムは標準出力に
Helloと表示する関数の実装
ポイントは 1.呼び出し規約を設定する,2.publicにする です
fflush(stdout)がないとprintされないらしいので入れておきましょう
Printf from native code appears only at the end of the java app
https://stackoverrun.com/ja/q/3379588このままではソースのままなのでコンパイルしましょう
上のプログラムからダイナミックリンクライブラリ(MacOSだとlib*.dylib)を生成しますダイナミックリンクライブラリを生成swiftc -emit-library hello.swiftターミナルで上のコマンドを実行すると
lib + ファイル名(拡張子なし) + .dylibの
ダイナミックリンクライブラリが生成されます
nmコマンドで確認すると
hello関数がグローバルセクションにあってなんか呼べそうな気がしてきますねnmコマンドで確認cha84rakanal$ nm libhello.dylib 0000000000000e40 T _$S5helloAAyyF U _$S6Darwin6stdoutSpySo7__sFILEVGvg U _$SSS21_builtinStringLiteral17utf8CodeUnitCount7isASCIISSBp_BwBi1_tcfC U _$SSSN U _$Ss27_allocateUninitializedArrayySayxG_BptBwlFyp_Tg5 U _$Ss5print_9separator10terminatoryypd_S2StF U _$Ss5print_9separator10terminatoryypd_S2StFfA0_ U _$Ss5print_9separator10terminatoryypd_S2StFfA1_ 0000000000000fac s ___swift_reflection_version U __swift_FORCE_LOAD_$_swiftDarwin 0000000000001060 s __swift_FORCE_LOAD_$_swiftDarwin_$_hello U _fflush 0000000000000e30 T _hello U _swift_bridgeObjectRelease U _swift_bridgeObjectRetain U dyld_stub_binder cha84rakanal$実際にJava側からSwiftで実装した関数を呼び出す
さて実際にProcessing(Java)側から先程作った
Hello関数を呼び出してみます
スケッチのdataディレクトリに先に生成したダイナミックリンクライブラリを入れて、次のスケッチで動かします!JNAProcessing.pdeimport com.sun.jna.Library; import com.sun.jna.Native; import com.sun.jna.Platform; public interface SwiftLib extends Library { void hello(); } SwiftLib mylib; void setup(){ mylib = (SwiftLib) Native.loadLibrary(dataPath("libhello.dylib"), SwiftLib.class); mylib.hello(); } void draw(){ }ポイントは、
- JNA関連のライブラリをインポート
- com.sun.jna.Libraryを継承したインターフェースを定義(中に作成した関数の定義)
Native#loadLibraryでダイナミックリンクライブラリを読み込み、ライブラリ名だけだと、Javaが参照しているダイナミックライブラリのパスをみにいく、絶対パスで入れられると確実これでHelloと表示されたらOK! あとは何でも好きな処理をSwiftで実装するだけ!
それでは、よいProcessing Life
- 投稿日:2020-10-06T11:19:30+09:00
ラーメンで学ぶJava 【その1】
Javaをラーメンで学ぼう
なぜならみんなラーメンが好きだから。
Javaの基本をラーメンを通して学びましょう。一連の目標
- Javaの基本を理解して書けるようになる
読者のみなさんがこれくらいのレベルに達してくれたら嬉しいなあ。
出力にチャレンジ
プログラミング学習において、"This is a pen."にあたる導入は"Hello World!"と出力することです。
しかし、ラーメン大好きなみなさんには「ラーメン大好き」と出力していただきます。Javaで出力したい時のキーワードは
System.out.println();
です。この()の中に入れた内容が出力されます。「ラーメン大好き」と出力したいならこう。
Main.javapublic class Main { public static void main(String[] args) { System.out.println("ラーメン大好き"); } }今は、
public class Main
public static void main(String[] args)
とかは気にせず、
System.out.println();の()中に"ラーメン大好き"
が入っていることを確認してください。この状態で実行するとコンソールに
「ラーメン大好き」が出力されると思います。念のため注意していただきたいのは、
""や()、{}は半角であること。です。これさえ守っていれば動くはずです。
さて、もしあなたが「ラーメンを食べたい」となった場合はどうすれば良いでしょうか。
「ラーメン大好き」を「ラーメンを食べたい」に置き換えれば大丈夫です。Main.javapublic class Main { public static void main(String[] args) { System.out.println("ラーメンを食べたい"); } }あなたがラーメンを食べたがっていることが伝わったかと思います。
変数について
上で書いた「ラーメン大好き」文をもう少しスマートに書いてみましょう。
スマートに書くには変数を使います。変数はよく箱に例えられます。
箱に文字や数字を入れることで、その箱を見た人がその中の値を確認・利用することができるという仕組みです。しかし、「ラーメンで学ぶJava」である以上、ラーメンに絡めた説明もしておきます。
我々が店でラーメンを食べる際、ラーメンは器に入っています。まさか麺とスープを手渡しするような店はないはずです。この「器」に相当するのが「変数」だとここでは思ってください。
店主さんが作ったラーメンが器に入って我々に提供され、我々は器の中身のラーメンを頂くわけです。
Java(や多くのプログラミング言語)も同様で、誰かが計算した結果を「変数」にいれ、我々はその変数の中身を使って更に計算をしたり、中身を出力したりするわけです。
では、変数を使って「ラーメン大好き」文を書いてみましょう。
Main.javapublic class Main { public static void main(String[] args) { String love = "ラーメン大好き"; System.out.println(love); } }ここではあなたのラーメン愛を
loveという変数に込めました。
System.out.println(love);
によってあなたの愛の中身を出力しているのです。「ちょっと待って、
Stringって何。」
となった方、次回をお待ちください。
- 投稿日:2020-10-06T09:59:17+09:00
[Android開発]Javaで画像をサーバーから取得してImageViewに設定しよう!!
説明
画像ファイルをURLで参照して、サーバーから取得する方法です。(非同期処理)
Java
GetImagesUrlimport android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; import android.widget.ImageView; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; public class ImageUrl extends AsyncTask<Integer, Integer, Bitmap> { ImageView bmImage; public ImageUrl(ImageView bmImage) { this.bmImage = bmImage; } @Override public Bitmap doInBackground(Integer... integers) { Bitmap image; URL imageUrl = null; try { //引数の数字で取得するURLを変える //Staric変数として画像のURLを定義しよう if (integers[0] == 0) { imageUrl = new URL(Constants.Image1); } else if (integers[0] == 1) { imageUrl = new URL(Constants.Image2); } else if (integers[0] == 2) { imageUrl = new URL(Constants.Image3); } InputStream imageIs; imageIs = imageUrl.openStream(); image = BitmapFactory.decodeStream(imageIs); } catch (MalformedURLException e) { return null; } catch (IOException e) { return null; } return image; } protected void onPostExecute(Bitmap result) { bmImage.setImageBitmap(result); } }実行
mainint ImageNum; //ImageNumに入っている数値で対象の画像を取得して、ImageViewに設定する new ImageUrl((ImageView) view.findViewById(R.id.any_image)).execute(ImageNum);


