いまさら感
基本、javaは業務経験ないのでこういう場面でしか使わないので勉強、勉強
画面
RSSとかの処理は非同期でしか取得できない
ライブラリなどもきいたことはあるけどまずはなしの状態で最初からやってみる
MainActivity
package jp.mshige1979.app.sampleapp01; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.os.Handler; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { private Handler handler; private final String RSS_URL = "http://m-shige1979.hatenablog.com/rss"; private TextView text1; private String RssText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); handler = new Handler(); setContentView(R.layout.activity_main); text1 = (TextView)findViewById(R.id.textview1); } @Override public boolean onCreateOptionsMenu(Menu menu) { // メニューボタンを追加 MenuItem item1 = menu.add("UPDATE"); item1.setIcon(android.R.drawable.ic_menu_upload); item1.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { Thread thread1 = new Thread() { @Override public void run() { try { // URLよりRSSを取得 RssText = RssParse.getRss(MainActivity.this, RSS_URL); // handler handler.post(new Runnable() { @Override public void run() { // 読み込み終了 text1.setText(RssText); Toast.makeText(MainActivity.this, "読み込み終了", Toast.LENGTH_SHORT).show(); } }); } catch (Exception e) { Log.d("sample", e.getMessage()); } } }; thread1.start(); return false; } }); // 画面にメニューを表示 item1.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
RssParse
package jp.mshige1979.app.sampleapp01; import android.content.Context; import android.net.http.AndroidHttpClient; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpUriRequest; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /** * RSSを取得するクラス */ public class RssParse{ public static String getRss(Context context, String url) throws IOException{ StringBuilder sb = new StringBuilder(); AndroidHttpClient client = AndroidHttpClient.newInstance("TEST"); HttpGet get = new HttpGet(url); try{ // リクエストを取得 HttpResponse response = client.execute(get); BufferedReader br = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); String line = null; while((line = br.readLine()) != null){ sb.append(line); } }finally { // 閉じる client.close(); } return sb.toString(); } }
結果
やったこと
- RSS取得用のクラスを用意
- Handlerで非同期後の結果をtextviewに貼り付け
- 別スレッドで起動
所感
XMLをパースしてリストビューとの割り当てはまた後日
バージョンが変わったせいか以前の方法とはまた処理があわなくで混乱気味
参考
Android Studioではじめる 簡単Androidアプリ開発
- 作者: 有山圭二
- 出版社/メーカー: 技術評論社
- 発売日: 2014/11/21
- メディア: 大型本
- この商品を含むブログを見る
Android Studioではじめる 簡単Androidアプリ開発
- 作者: 有山圭二
- 出版社/メーカー: 技術評論社
- 発売日: 2014/11/21
- メディア: 大型本
- この商品を含むブログを見る