liguofeng29’s blog

個人勉強用ブログだっす。

Androidのweb開発 - URLを使いwebリソースにアクセスする

URL(Uniform Resource Locator)

形式: protocol://host:port/resourceName

サンプルコード

URLを使いwebのイメージを取得し、Androidアプリに表示する。

① AndroidManifest.xml

    <uses-permission android:name="android.permission.INTERNET"/>

② activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <TextView
        android:id="@+id/text"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
    <ImageView
        android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="fitCenter" />
</LinearLayout>

③ MainActivity.java

package com.example.liguofeng.urlsample;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;
import android.os.Handler;
import android.widget.TextView;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;

public class MainActivity extends AppCompatActivity {

    TextView text;
    ImageView image;

    // ネットからダウンロードしたイメージ
    Bitmap bitmap;
    String fileName;
    String hostName;
    String path;
    int port;
    String protocol;
    String query;

    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            if (msg.what == 0x123) {
                // Text表示
                text.setText(
                        fileName + "\n" +
                                hostName + "\n" +
                                path + "\n" +
                                port + "\n" +
                                protocol + "\n" +
                                query
                );

                // イメージ表示
                image.setImageBitmap(bitmap);
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // イメージURL
        // http://f.st-hatena.com/images/fotolife/l/liguofeng29/20160110/20160110134229_120.jpg
        image = (ImageView) findViewById(R.id.image);
        text = (TextView) findViewById(R.id.text);

        // サブスレッド
        new Thread() {
            @Override
            public void run() {
                try {
                    URL url = new URL("http://f.st-hatena.com/images/fotolife/l/liguofeng29/20160110/20160110134229_120.jpg");

                    fileName = url.getFile(); // リソース名
                    hostName = url.getHost(); // ホスト名
                    path = url.getPath();     // パス
                    port = url.getPort();     // ポート番号
                    protocol = url.getProtocol();  // プロトコル名
                    query = url.getQuery();    // URL検索キャラ

                    InputStream is = url.openStream();

                    // URLのInputStreamからイメージ読み取り
                    bitmap = BitmapFactory.decodeStream(is);

                    // hanlderメッセージ送信
                    handler.sendEmptyMessage(0x123);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }.start();
    }
}

f:id:liguofeng29:20160110140251p:plain