2012年12月31日月曜日

android:プリファレンスでデータを保存する

プリファレンスを使うことによって、android端末内にデータを保存できる。

プリミティブな型でデータを保存することは少ないかと思うが、
  • 保存できる型は、
     boolean
     float
     int
     long
     String
  • データの格納先は「/data/data/パッケージ名/shared_prefs/ファイル名.xml」
  • SharedPreferencesのインスタンスはgetSharedPreferencesで取得する。
  • getSharedPreferencesメソッドの第1引数は、ファイル名。
     下記のサンプルの場合、「sample.xml」がファイル名となる。
  • getSharedPreferencesメソッドの第2引数は、プリファレンスへのアクセスモード。
     MODE_PRIVATE:他のアプリケーションからはアクセスできない。
     MODE_WORLD_READABLE:他のアプリケーションからの読み込みを許可する。
     MODE_WORLD_WRITEABLE:他のアプリケーションからの書き込みを許可する。
  • プリファレンスへの読み書きはSharedPreferences.Editorを使う。

package net.kuttya.sharedpreferencessample;

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.view.Menu;

public class MainActivity extends Activity {

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

        // 初期化
        SharedPreferences preferences = getSharedPreferences("sample", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = preferences.edit();

        // 書き込み
        // 第1引数はキー、第2引数は書き込む値
        editor.putBoolean("boolkey", true);
        editor.putFloat("floatkey", 3.5f);
        editor.putInt("intkey", 7);
        editor.putLong("longkey", 9);
        editor.putString("Stringkey", "文字列");
        editor.commit();

        // 読み込み
        // 第1引数はキー、第2引数はデフォルト値
        boolean b = preferences.getBoolean("boolkey", false);
        float f = preferences.getFloat("floatkey", 1.1f);
        int i = preferences.getInt("intkey", 1);
        long l = preferences.getLong("longkey", 5);
        String str = preferences.getString("Stringkey", "");
    }
}


にほんブログ村 IT技術ブログ Androidアプリ開発へ

2012年12月30日日曜日

android:JSONを使う(Twitter-APIの検索結果をパースする)

JSON形式のデータをandroidで扱う。

JSON形式のデータは、WebAPIから取得することにする。
WebAPIは何でもいいのだが、今回はTwitter-APIを使うことにする。

次のサイトにAPIの使い方が書かれているため、参考にしてほしい。
https://dev.twitter.com/docs/api/1/get/search

  • Uri.Builderで、WebAPIのリクエストURLを作成する。
  • HttpURLConnectionで、WebAPIに対してリクエストを投げる。
  • WebAPIから受け取ったレスポンス(JSON形式データ)を、BufferedInputStream、ByteArrayOutputStreamを使用して文字列データに変換する。
  • JSONObject、JSONArrayを使用して、JSONデータをパースする。

package net.kuttya.jsonsample;

import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import org.json.JSONArray;
import org.json.JSONObject;

import android.net.Uri;
import android.os.Bundle;
import android.os.StrictMode;
import android.app.Activity;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class JsonSampleActivity extends Activity {
    private EditText editSearchWord;
    private TextView viewSearchResult;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        // おまじない
        StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().permitAll().build());

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editSearchWord = (EditText)findViewById(R.id.edittext_searchWord);
        viewSearchResult = (TextView)findViewById(R.id.textview_serchResult);
    }

    // 検索ボタン押下処理
    public void onClickSearch(View view) {

        // 検索ワードのチェック
        String searchWord = editSearchWord.getText().toString();
        if(searchWord.length() < 1) {
            viewSearchResult.setText("検索する文字列を指定してください。");
            return;
        }

        // Twitter-APIのURLを生成
        Uri.Builder uriBuilder = new Uri.Builder();
        uriBuilder.scheme("http");
        uriBuilder.authority("search.twitter.com");
        uriBuilder.path("search.json");
        uriBuilder.appendQueryParameter("lang", "ja");
        uriBuilder.appendQueryParameter("rpp", "20");
        uriBuilder.appendQueryParameter("q", searchWord);
        String uriStr = uriBuilder.toString();

        try {
            // コネクション生成
            HttpURLConnection connection = null;
            URL url = new URL(uriStr);
            connection = (HttpURLConnection)url.openConnection();
            connection.setRequestMethod("GET");

            // リクエスト送信
            connection.connect();

            // レスポンスコードチェック
            if(connection.getResponseCode() != 200) {
                viewSearchResult.setText("検索失敗!!");
                return;
            }

            // レスポンス文字列取得
            BufferedInputStream inputStream = new BufferedInputStream(connection.getInputStream());
            ByteArrayOutputStream responseArray = new ByteArrayOutputStream();
            byte[] buff = new byte[1024];

            int length;
            while((length = inputStream.read(buff)) != -1) {
                if(length > 0) {
                    responseArray.write(buff, 0, length);
                }
            }

            // JSONをパース
            StringBuilder viewStrBuilder = new StringBuilder();
            JSONObject jsonObj = new JSONObject(new String(responseArray.toByteArray()));
            JSONArray result = jsonObj.getJSONArray("results");
            for(int i = 0; i < result.length(); i++) {
                JSONObject tweet = result.getJSONObject(i);
                viewStrBuilder.append(tweet.getString("created_at") + "\n");        // つぶやき日時
                viewStrBuilder.append(tweet.getString("from_user_name") + "\n");    // 投稿者
                viewStrBuilder.append(tweet.getString("text") + "\n");                // 投稿内容
                viewStrBuilder.append("----------\n");
            }

            // 表示
            viewSearchResult.setText(viewStrBuilder.toString());
        } catch(Exception e) {
            viewSearchResult.setText(e.getMessage());
        }
    }
}


マニフェストファイルにインターネットを使う旨を登録する。
    

検索結果を取得したときのキャプチャ。






















にほんブログ村 IT技術ブログ Androidアプリ開発へ