RSS Readerアプリ作成4日目
本日も前回までの続きを作成していきます。(・ω<)
記事は以下を参照。
Androidで広がる、携帯アプリ開発の世界 - 第6回 詳細画面を付けて、簡易RSSリーダーの完成:ITpro
以下のように入力してきましたがメニュー関係がうまく動いてくれません(´・ω・`)
package jp.hatenadiary.amatuka.simplerssreader; import java.util.ArrayList; import android.os.Bundle; import android.view.View;//追加 import android.widget.ListView; import android.app.ListActivity;//追加 import android.content.Intent; public class RssReaderActivity extends ListActivity { public static final String RSS_FEED_URL = "http://itpro.nikkeibp.co.jp/rss/ITpro.rdf"; private ArrayList<Item> mItems; private RssListAdapter mAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_rss_reader); mItems = new ArrayList<Item>(); mAdapter = new RssListAdapter(this, mItems); RssParserTask task = new RssParserTask(this, mAdapter); task.execute(RSS_FEED_URL); /* setListAdapter(mAdapter); for ( int i = 0; i < 10; i++) { mAdapter.add(new Item()); } */ } //ここから追加 @Override protected void onListItemClick(ListView l, View v, int position, long id) { Item item = mItems.get(position); Intent intent = new Intent(this, ItemDetailActivity.class); intent.putExtra("TITLE", item.getTitle()); intent.putExtra("DESCRIPTION", item.getDescription()); startActivity(intent); } @Override public boolean onCreateOptionsMenu(Menu menu) { boolean result = super.onCreateOptionsMenu(menu); menu.add(0, MENU_ITEM_RELOAD, 0, "更新"); return result; } //ここまで追加 }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/item_detail_title" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:background="@android:drawable/dark_header" /> <TextView android:id="@+id/item_detail_descr" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="jp.hatenadiary.amatuka.simplerssreader.RssReaderActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".ItemDetailActivity"> </activity> </application>
明日は仕事なのでまた明日原因を突き止めます(・ω<)
RSS Readerアプリ作成3日目
前回に引き続き下記の記事の通り作成していきたいと思います。
Androidで広がる、携帯アプリ開発の世界 - 第5回 RSSリーダーの要、パース機能を知る:ITpro
前回記事の通り入力したと思ったのになぜか起動はするけど何も起こらない状態になってしまいました(´・ω・`)
そこで、何がダメだったのか確認するためにLogCatを見てみることにします。
すると「java.lang.SecurityException: Permission denied (missing INTERNET permission?)」
のようにエラーが出ていました。
どうやらインターネットを利用する権限がないようです。
たしか、AndroidManifestに記載したはずだったのにと思って見てみると以下のようになっていました。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="jp.hatenadiary.amatuka.simplerssreader" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="8" /> <uses-permission android:name="android.permission.INTERNET" android:maxSdkVersion="18"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="jp.hatenadiary.amatuka.simplerssreader.RssReaderActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
該当の箇所は「
ただ、「android:maxSdkVersion="18"」の部分がどんな意味なのかわからなかったので調べてみるとどうやらこのアプリが動作する最大のAPIを指しているようです。
ということで、自分が利用しているエミュレータのAPIレベルを確認してみたところ19になっていたのでAndroidManifestの方も19に合わせてみたところ無事に動作しました。
RSS Readerアプリ作成2日目
今回は前回途中まで作成したRSS Readerの続きを作成してみます。
記事は以下
Androidで広がる、携帯アプリ開発の世界 - 第5回 RSSリーダーの要、パース機能を知る:ITpro
とりあえずRssParserTask.javaを作成していきます。
package jp.hatenadiary.amatuka.simplerssreader; import java.io.IOException; import java.io.InputStream; import java.net.URL; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import android.app.ProgressDialog; import android.os.AsyncTask; import android.util.Xml; public class RssParserTask extends AsyncTask<String, Integer, RssListAdapter> { private RssReaderActivity mActivity; private RssListAdapter mAdapter; private ProgressDialog mProgressDialog; public RssParserTask(RssReaderActivity activity, RssListAdapter adapter) { mActivity = activity; mAdapter = adapter; } @Override protected void onPreExecute() { mProgressDialog = new ProgressDialog(mActivity); mProgressDialog.setMessage("Now Loading..."); mProgressDialog.show(); } @Override protected RssListAdapter doInBackground(String... params) { RssListAdapter result = null; try { URL url = new URL(params[0]); InputStream is = url.openConnection().getInputStream(); result = parseXml(is); } catch (Exception e) { e.printStackTrace(); } return result; } @Override protected void onPostExecute(RssListAdapter result) { mProgressDialog.dismiss(); mActivity.setListAdapter(result); } public RssListAdapter parseXml(InputStream is) throws IOException, XmlPullParserException { XmlPullParser parser = Xml.newPullParser(); try { parser.setInput(is, null); int eventType = parser.getEventType(); Item currentItem = null; while (eventType != XmlPullParser.END_DOCUMENT) { String tag = null; switch (eventType) { case XmlPullParser.START_TAG: tag = parser.getName(); if (tag.equals("item")) { currentItem = new Item(); } else if (currentItem != null) { if (tag.equals("title")){ currentItem.setTitle(parser.nextText()); } else if (tag.equals("description")) { currentItem.setDescription(parser.nextText()); } } break; case XmlPullParser.END_TAG: tag = parser.getName(); if (tag.equals("item")) { mAdapter.add(currentItem); } break; } eventType = parser.next(); } } catch (Exception e) { e.printStackTrace(); } return mAdapter; } }
RssReaderActivity.javaも以下のように追加する。
package jp.hatenadiary.amatuka.simplerssreader; import java.util.ArrayList; import android.os.Bundle; import android.app.ListActivity; public class RssReaderActivity extends ListActivity { public static final String RSS_FEED_URL = "http://itpro.nikkeibp.co.jp/rss/ITpro.rdf"; //追加 private ArrayList<Item> mItems; private RssListAdapter mAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_rss_reader); mItems = new ArrayList<Item>(); mAdapter = new RssListAdapter(this, mItems); RssParserTask task = new RssParserTask(this, mAdapter); //追加 task.execute(RSS_FEED_URL);//追加 } }
上記のように入力してみたのですがちゃんと動いてくれません(´・ω・`)
明日は動くようにがんばります(・ω<)
いつもの牛丼
我が家でいつも作っている牛丼のレシピです。
これは美味しい!「牛丼」 by rey* [クックパッド] 簡単おいしいみんなのレシピが162万品
普段は基本的になるべく残業をせずにほぼ定時に帰れるように仕事をしていますが、
今日は久しぶりに残業しました(T_T)
クタクタに疲れて家に帰るといつもの牛丼が待っていました(・∀・)
ということで今日はこれにて就寝です(・ω<)
RSS Readerのアプリ
以下の記事を参考に作ってみることにした。
Androidで広がる,携帯アプリ開発の世界 - 第4回 簡単なRSSリーダーを作ってみる:ITpro
若干、記事の内容と違う箇所もあったが概ね同じ感じに入力して早速実行してみると
「Unfortunately,(アプリ名) has stopped.」とエラーが出て起動しない・・・(´・ω・`)
エラー内容をググってみるとLogCatにエラーが出ている模様。
というわけで早速LogCatを見てみると作成したアプリから大量にエラーが・・・
その中に以下のようなエラーがありました。
「Your content must have a ListView whose id attribute is 'android.R.id.list'」
要するにListViewを利用する場合はIDを @+id/android:listしないといけないみたいです。
そこで、作成した「activity_rss_reader.xml」を見てみると
ちゃんと指定されているみたいです(´・ω・`)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".RssReaderActivity" > <ListView android:id="@+id/list" android:layout_width="wrap_content" android:layout_height="wrap_content" > </ListView> <TextView android:id="@+id/empty" android:layout_width="wrap_content" android:layout_height="wrap_content" android:ems="10" > <requestFocus /> </TextView> </LinearLayout>
デフォルトで入っていた値にGUIで付け足して作成したのですが、
何がダメなのかわかりません_| ̄|○
ということで、記事にある通り以下のように手書きで作り変えてみました。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ListView android:id="@android:id/list" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@android:id/empty" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
それで、実行してみると無事に動くようになりました。
マウスで、ドラッグすると上下します。
また、明日以降続きをがんばるぞ~(・ω<)
【2014】今年の抱負
今年もはや2週間が過ぎようとしていますが、
今年の目標を立てました。
といっても、毎年なかなか実行できていませんが(^_^;)
というわけで今年はAndroidアプリを作成しストアに上げたいと思います。
その他にも本業のネットワークの知識もまだまだ学習することがあるので頑張らないといけません(´・ω・`)
いつもやりたいことがありすぎて中途半端になってしまうので
ここまでやるぞ~っていう目標を決めてそれを達成していきたいと思います。
それと、春に情報セキュリティも取得したいと思います。
前回の秋季試験の時ホントはネスペを受けようと思っていたのですが
忙しくて申し込みを忘れていて春季に受ければいいかぁと思っていたのに
春の試験ではネスペはありませんでした(・ω<)
というわけでネスペの次に興味のある情報セキュリティを受けようと思います。
とりあえずこの2つを目標に今年も頑張っていきます。