Android
 Computer >> コンピューター >  >> プログラミング >> Android

【Android】URLをエンコードする方法をわかりやすく解説|URLEncoderの使い方

AndroidでURLをエンコードするには?

本記事では、AndroidアプリでURLを適切にエンコードする方法を、実際に動作するサンプルコードとともに解説します。

URLに検索キーワードなどのパラメータを含めたい場合、スペースや日本語などの特殊文字がそのまま含まれていると、正しくリクエストが送信できないことがあります。そんなときに役立つのが java.net.URLEncoder クラスです。このクラスを使えば、文字列をUTF-8などでエンコードし、URLとして安全な形式に変換できます。

手順1:新しいプロジェクトを作成する

Android Studioを起動し、メニューから「File」→「New Project」を選択します。必要な項目をすべて入力して、新しいプロジェクトを作成してください。

手順2:レイアウトファイル(activity_main.xml)を編集する

res/layout/activity_main.xml に以下のコードを追加します。画面全体にWebViewを配置し、右下にはURLを読み込むためのボタンを設置しています。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="4dp"
    tools:context=".MainActivity">
    <WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    <Button
        android:id="@+id/btnEncode"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Load URL"
        android:layout_alignParentBottom="true"
        android:layout_alignParentEnd="true" />
</RelativeLayout>

手順3:MainActivity.java にコードを追加する

src/MainActivity.java に以下のコードを記述します。注目すべきは URLEncoder.encode("android drawables", "UTF-8") の部分です。検索クエリ「android drawables」をUTF-8でエンコードすることで、スペースが「+」に変換され、URLパラメータとして安全な文字列になります。

import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.Toast;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
public class MainActivity extends AppCompatActivity {
    Button button;
    private WebView webView;
    String strURL;
    private String query;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        webView = findViewById(R.id.webView);
        button = findViewById(R.id.btnEncode);
        strURL = "https://stackoverflow.com/search?q=";
        try {
            query = URLEncoder.encode("android drawables", "UTF-8");
        }
        catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        strURL += query;
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                webView.setWebViewClient(new WebViewClient() {
                    @Override
                    public void onPageStarted(WebView view, String url, Bitmap favicon) {
                    }
                    @Override
                    public void onPageFinished(WebView view, String url) {
                        Toast.makeText(getApplicationContext(), "Page Loaded.", Toast.LENGTH_SHORT).show();
                    }
                });
                webView.getSettings().setJavaScriptEnabled(true);
                webView.loadUrl(strURL);
            }
        });
    }
}

手順4:AndroidManifest.xml にインターネット権限を追加する

WebViewで外部サイトを読み込むためには、インターネットへのアクセス権限が必要です。androidManifest.xml に以下の <uses-permission> タグを追加しましょう。

<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="app.com.sample">
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

アプリを実行してみよう

それでは、作成したアプリを実行してみましょう。実行前に、Androidスマートフォンを実機としてPCに接続しておいてください。

Android Studioでプロジェクト内のアクティビティファイルを開き、ツールバーの「Run(実行)」アイコンをクリックします。デバイス選択のダイアログが表示されたら、接続したモバイル端末を選択してください。しばらくすると、スマートフォンにアプリの初期画面が表示されます。

【Android】URLをエンコードする方法をわかりやすく解説|URLEncoderの使い方

補足:URLEncoderを使う際の注意点

URLEncoder はHTMLフォーム送信用のエンコード(application/x-www-form-urlencoded)を行うクラスのため、スペースは「%20」ではなく「+」に変換されます。クエリパラメータのエンコードには最適ですが、URL全体やパス部分をエンコードしたい場合には不向きなので、用途に応じて使い分けるようにしましょう。また、エンコード処理は UnsupportedEncodingException をスローする可能性があるため、try-catchでの例外処理も忘れずに記述してください。

  1. AndroidでURLからImageViewに画像を読み込む方法を徹底解説

    この記事では、AndroidアプリにおいてURLを指定してImageViewに画像を読み込む方法を、実際のサンプルコードとともにステップごとにわかりやすく解説します。ネットワーク上の画像を非同期でダウンロードして表示する基本的な仕組みを学びましょう。 手順1:Android Studioで新規プロジェクトを作成する まず、Android Studioを起動し、メニューから「File」→「New Project」を選択します。必要な項目をすべて入力して、新しいプロジェクトを作成してください。 手順2:res/layout/activity_main.xml にコードを追加する 次に、レイアウトフ

  2. AndroidでWebViewのURL読み込み完了を検知する方法を解説

    はじめに この記事では、AndroidアプリにおいてWebViewがURLの読み込みを完了したタイミングを検知(リッスン)する方法を、実際に動作するサンプルコードとともに解説します。 読み込み完了を検知できるようになると、ローディング中のプログレス表示や、読み込み完了時のトースト通知など、ユーザー体験を向上させる処理を簡単に実装できるようになります。 実装手順 ステップ1:新規プロジェクトを作成する Android Studioを起動し、メニューから File → New Project を選択して新しいプロジェクトを作成します。必要な項目をすべて入力してプロジェクトをセットアップしてくだ