ymdyu1さんのブログで東電の電力使用状況をアプリにする記事を見つけましたが、androidバージョンが上がったことで対応していない箇所があったので、自分なりに再構築してみました
http://d.hatena.ne.jp/ymdyu1/20110324/p1
参照先の東京電力の電力使用状況csv
http://www.tepco.co.jp/forecast/html/images/juyo-j.csv
東京電力のファイルを読み込んだ時に文字化けが発生したので、そのとき参照したBufferReaderについてのサイト
http://developer.android.com/intl/ja/reference/java/io/BufferedReader.html
http://ash.jp/java/stream.htm
読み込むCSVファイルの文字コードを指定する時は
のようにすればいいようです
東京電力のcsvの場合はSJISでしたが、リンク先の文字コードに合わせて変えてください
拝見した記事が書かれていたのが2011年頃だったので、別スレッドにUIでアクセスできていたようです
http://pentan.info/android/app/multi_thread.html
今はできないのでHandlerを使って
少しハマったと言うかエラーになったのが「.post」のところですが、android studioで勝手にインポートしてくれたのが↓
こちらがコード
こんな感じの画面構成です
http://d.hatena.ne.jp/ymdyu1/20110324/p1
参照先の東京電力の電力使用状況csv
http://www.tepco.co.jp/forecast/html/images/juyo-j.csv
東京電力のファイルを読み込んだ時に文字化けが発生したので、そのとき参照したBufferReaderについてのサイト
http://developer.android.com/intl/ja/reference/java/io/BufferedReader.html
http://ash.jp/java/stream.htm
読み込むCSVファイルの文字コードを指定する時は
BufferedReader reader = new BufferedReader(new InputStreamReader(http.getInputStream(), "SJIS"));ファイル名(),"文字コード"
のようにすればいいようです
東京電力のcsvの場合はSJISでしたが、リンク先の文字コードに合わせて変えてください
拝見した記事が書かれていたのが2011年頃だったので、別スレッドにUIでアクセスできていたようです
http://pentan.info/android/app/multi_thread.html
今はできないのでHandlerを使って
handler.post(new Runnable() { @Override public void run() { textView.setText(msg); // 画面に描画する処理 } }); //このように囲ってあげて完了
少しハマったと言うかエラーになったのが「.post」のところですが、android studioで勝手にインポートしてくれたのが↓
import java.util.logging.Handler; //だったんですが、
import android.os.Handler; //android側で用意してくれたやつを使えばいいようです
こちらがコード
import android.os.AsyncTask; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.os.Handler; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; //import java.util.logging.Handler; public class MainActivity extends ActionBarActivity { Button button; TextView textView; String msg; String array[] = null; // ここがエラーになる場合は、import文が間違っている場合が多い Handler handler = new Handler(); // 改行コードを取得 static final String BR = System.getProperty("line.separator"); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 表示領域 textView = (TextView) findViewById(R.id.textView); // 取得ボタン button = (Button) findViewById(R.id.text); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { new Thread(new Runnable() { @Override public void run() { try { // データ取得 URL url = new URL("http://www.tepco.co.jp/forecast/html/images/juyo-j.csv"); HttpURLConnection http = (HttpURLConnection) url.openConnection(); http.setRequestMethod("GET"); http.connect(); // データ読込 BufferedReader reader = new BufferedReader(new InputStreamReader(http.getInputStream(), "SJIS")); // 解析 while (true) { String line = reader.readLine(); if (line == null) { break; } if (line.indexOf(",") != -1) { array = line.split(","); } if (array != null) { for (int i = 0; i < array.length; i++) { Log.v("array array[", i + "] " + array[i]); msg += array[i] + " "; } } else Log.e("array", " no array"); msg += BR; } handler.post(new Runnable() { @Override public void run() { // 画面に描画する処理 textView.setText(msg); } }); http.disconnect(); reader.close(); // エラー処理 } catch (Exception e) { e.printStackTrace(); } } }).start(); // if (array != null){ for (int i = 0; i < array.length; i++) { Log.v("array[" + i + "] ", array[i]); } } } }); } } //
こんな感じの画面構成です
xmlはこちら
//
manifestファイルにインターネットの通信を許可する文を追加しないと多分エラーになります
/applicationの外側に入れてください
コメント
コメントを投稿