FX and Program Memo

FXに関することやプログラミングに関することを、メモ帳代わりに使います。 気がついたら有益な情報がてんこ盛りになってるかも。

Android: Google APIのtokenバグ

テスト機(エミュレーター)では問題なく動くのに、スマホ携帯(N-04d、Android2.3)にアップして実行したら、エラー出現。。現象は、「トークンは取得できているのにその先のカレンダー情報やタスク情報がとってこれていない」ということでした。

ということで、Google API(TasksやCalendar)に関する報告です。

AuthTokenでトークンを取得し、Tasksからタスクリストを取得しようとしたら、、、
なんと!401エラーが帰ってきました。。

その理由はというと、GoogleAPIのバグだそうです。。

参考記事

そのエラーの回避方法は、「古いトークンを廃棄する」ことだそうです。実際、それでOKでした。

具体的には、

・発行されたtokenを変数に格納しておく(すぐに捨てない)
・201エラーが出たら、そのトークンを捨てる
・再度トークンを取得すれば、そのトークンでTasksなど取得可能となる

トークンを捨てるのは、

mAccountManager.invalidateAuthToken(acc.type, currentToken); //acc:Account型,currentToken:String型

です。 まだきっちりロジック組めてないですが、とりあえずのアップでした。

テーマ:Android - ジャンル:携帯電話・PHS

  1. 2012/05/03(木) 01:51:54|
  2. Android
  3. | トラックバック:0
  4. | コメント:0

テザリングのOn/Offを一発設定してくれるアプリ

オススメアプリの紹介です。

私はスマホのテザリング機能を多用しているのですが、電池もちのことを考え、しょっちゅうOn/Offしています。
このOn/Off機能を一発起動してくれるソフトのご紹介です。

ただ、いちいち設定画面を開くのにとても手間。。ホーム画面にショートカットを貼り付けようとしたんですが、テザリング設定のショートカットは作成できない模様で、四苦八苦してました。

そんなとき、このアプリを発見!実際使ってみたら、チョー便利!

参考ページ

ちなみに、上記の“参考ページ”にも記載されていますが、これはアプリではなくウィジットなので、ホーム画面の長押しで“ウィジット”を選択し、ホーム画面に貼り付けてください。

最初、アプリ一覧をくまなく探しても見つからず、これまた悪戦苦闘してました。。。

GooglePlayへのリンク



テーマ:Android - ジャンル:携帯電話・PHS

  1. 2012/05/01(火) 21:07:43|
  2. Android
  3. | トラックバック:0
  4. | コメント:0

Android: 日付→文字列

単にDate型・日付型の数値を文字列に変換したいだけだったが、結構ヒットしないもの。。

Calendar型を使えという記事は多かったが、なんとなく感じが悪いし。

VBでは、formatという関数と同じような挙動をしてくれればOKなんだが。

ということで、自分用まとめ。

ちなみに、エミュレーターのタイムゾーンに影響した時間が表示されます。

・うちのは地域がUSに設定されている模様で、実際の時間-9時間

・携帯にDLして実行したら、日本の今の時間を表示しれくれました。


ソースコード

Date date = new Date(); //VBのnowと一緒
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Log.d("Test", simpleDateFormat.format(date));

★ 注意点! ★

Date部分に赤波線が出てきて、マウスを近づけて「Import #Library」をするとき、間違えて“SQL”用のをインポートしないように!!

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2012/04/30(月) 21:20:29|
  2. Android
  3. | トラックバック:0
  4. | コメント:0

Android: Intentのテスト

 サブ画面を呼び出すためのサンプルです。
Intentを利用します。
詳細はたくさんインターネットに出ていると思うので、極力シンプルに“明示的インテント”を書きました。


<注意!!>
AndroidManifest.xmlに、サブ画面の登録をしておかないと、こけます。
いっつも忘れてしまうんですが、、、
ちなみに、↓のような感じでマニュフェストに登録します。

        <activity
            android:name=".SubActivity"
            android:label="SubActivity" >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>



サンプルは、
といった流れです。
-----------------------------------------------
1.プロジェクトの新規作成
-----------------------------------------------
Eclipseで、プロジェクトを新規作成します。
ちなみに、私は以下の設定で作りました。
Target Name:Google APIs(Platform=8)
アプリケーション名:TestIntent
パッケージ名:com.fxscore.testintent
Activity名:TestIntentActivity
Minimum SDK:8
-----------------------------------------------
2.サブ画面のクラス作成
-----------------------------------------------
サブ画面のクラスを、Activityから派生させて作ります。
package com.fxscore.testintent;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class SubActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.layout_subactivity);
        // アダプター設定
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
        adapter.add("red");
        adapter.add("green");
        adapter.add("blue");
        ListView lv = (ListView) findViewById(R.id.sublv);
        lv.setAdapter(adapter);
        // リストビューのアイテムがクリックされた時の挙動
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                ListView lv = (ListView) parent;
                String item = lv.getItemAtPosition(position).toString();
                Toast.makeText(SubActivity.this, item, Toast.LENGTH_LONG).show();
                Intent intent = new Intent();  
                intent.putExtra("SUB_INPUT_STRING", item);  
                setResult(RESULT_OK,intent);  
                finish();  
            }
        });
}
}
★利用するリソース(レイアウト)★
(ファイル名:layout_subactivity.xml)
<?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="fill_parent"
    android:orientation="vertical" >
<ListView
        android:id="@+id/sublv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >
    </ListView>
</LinearLayout>


-----------------------------------------------
3.メインアクティビティの修正
-----------------------------------------------
メインどころの「TestIntentActivity 」を、以下のように書き換えます。


package com.fxscore.testintent;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
public class TestIntentActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        Intent intent = new Intent( TestIntentActivity.this, SubActivity.class );
        //リクエストコード123で呼び出し
        this.startActivityForResult(intent, 123);
    }
    
    @Override  
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {  
        super.onActivityResult(requestCode, resultCode, intent);  
        
        if (requestCode == 123){  
            if (resultCode == RESULT_OK){  
                Bundle extras = intent.getExtras();  
                if (extras != null){ Log.d("res",extras.getString("SUB_INPUT_STRING")); }
                else               { Log.d("res", "extra is null"                    ); }  
            } else{  
                Log.d("aaa","OKじゃない");
            }  
        }
    }      
}

ちなみに、レイアウトはデフォルトのままでOKです。



-----------------------------------------------
4.マニュフェストの修正
-----------------------------------------------
↓な感じ。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.fxscore.testintent"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk android:minSdkVersion="8" />
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".TestIntentActivity"
            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=".SubActivity"
            android:label="SubActivity" >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
    </application>
</manifest>

以上です。

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2012/04/30(月) 03:12:09|
  2. Android
  3. | トラックバック:0
  4. | コメント:0

Android: ListViewをコーディングで作成

ListViewを、xmlのレイアウトを使わずにソースコードに自前で埋め込んで作成する方法です。
そのためには、BaseAdapterクラスを拡張して自前で作成する必要があります。
具体的には以下のとおり。でも、文字サイズとか、きちゃない。。

参考にさせてもらったサイト


-----------------------------------------------
1.プロジェクトの新規作成
-----------------------------------------------
Eclipseで、プロジェクトを新規作成します。
ちなみに、私は以下の設定で作りました。
Target Name:Google APIs(Platform=8)
アプリケーション名:TestListViewNoXML
パッケージ名:com.fxscore.testlistviewnoxml
Activity名:TestListViewNoXMLActivity
Minimum SDK:8
-----------------------------------------------
2.プログラム
-----------------------------------------------
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class TestListViewNoXMLActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // レイアウトをコーディングで作成
        LinearLayout linearLayout = new LinearLayout(this);
        linearLayout.setOrientation(LinearLayout.VERTICAL);
        setContentView(linearLayout);
        
        // ListViewを作成
        ListView lv = new ListView(this);
        String teststr[] = {"str1","str2","str3"};
        lv.setAdapter(new TestAdapter(this, teststr));
        // ListViewをレイアウトにセット
        linearLayout.addView(lv);
        
        // リストビューのアイテムがクリックされた時の挙動
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                ListView lv = (ListView) parent;
                String item = (String) lv.getItemAtPosition(position);
                Toast.makeText(TestListViewNoXMLActivity.this, item, Toast.LENGTH_SHORT).show();
            }
        });        
    }
    
    // BaseAdapterクラスを拡張して自前で作成
    private class TestAdapter extends BaseAdapter{
        private Context con;
        private String[] data ;
        // コンストラクタ
        public TestAdapter(Context context, String[] str) {
            con = context;
            data = str ;
        }
        // 必要関数
        public int getCount() {return data.length;}
        public Object getItem(int position) {return data[position];}
        public long getItemId(int position) {return position;}
        // Listの中身を生成
        public View getView(int position, View convertView, ViewGroup parent) {
            TextView tv;
            if(convertView == null){ tv = new TextView(con)    ; }
            else                   { tv = (TextView)convertView; }
            
            tv.setText(data[position]);
            tv.setTextSize(30) ; //文字サイズをここで調整
            return tv;
        }
    }
}

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2012/04/30(月) 02:56:48|
  2. Android
  3. | トラックバック:0
  4. | コメント:0
次のページ

プロフィール

Author:fxscore
FC2ブログへようこそ!

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

未分類 (1)
VB .net (1)
VBA Access (6)
VB (25)
VB for FX (5)
SQL (3)
tips (1)
MySQL (1)
SAS (9)
SQLServer (1)
レザークラフト (3)
Android (20)

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する

Powered By FC2ブログ

今すぐブログを作ろう!

Powered By FC2ブログ

ブロとも申請フォーム

この人とブロともになる

QRコード

QRコード