2014年1月29日水曜日

PhoneGapをインストールには

PhoneGapをインストールには、まずnode.jsをインストール
Android開発には、Eclipse with ADTが必要、そして、PATHにはADTツールを通す
環境変数JAVA_HOMEを設定(ADTはJAVAベース)
Ant(JAVA build用)をインストール、ANT_HOMEを設定、antをPATHに通す

2014年1月26日日曜日

apkファイルをエミュレータにインストール

Genymotionを入れた。Eclipseのエミュレータよりずっと速かった。
apkファイルをインストールには、エミュレータを起動してから、以下のコマンドとなる。

adb install xxx.apk

2013年10月13日日曜日

Azure SQLのデータをListViewに表示させる


public class MainActivity extends Activity {

MobileServiceClient mClient;
MobileServiceTable<TokutenItem> mTokutenTable;
TokutenItemAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.benefit_list);
// 1)ListViewとadapterを設定、rowのlayoutも紐づく
mAdapter = new TokutenItemAdapter(this, R.layout.benifit_cell);
ListView listViewBenefit = (ListView) findViewById(R.id.benefitList);
listViewBenefit.setAdapter(mAdapter);

try {
// 2)Create the Mobile Service Client instance, using the provided
// Mobile Service URL and key
mClient = new MobileServiceClient(
        "https://xxxxxxx.azure-mobile.net/",
"keyforAzuraMobileService"
this);

// 3)Get the Mobile Service Table instance to use
mTokutenTable = mClient.getTable(TokutenItem.class);
} catch (MalformedURLException e) {
createAndShowDialog(new Exception("There was an error creating the Mobile Service. Verify the URL"), "Error");
}
// 4)SQL実行
mTokutenTable.where().field("venusId").eq("4e25173e091a817e3dd67300")
.execute(new TableQueryCallback<TokutenItem>() {
                          // 5)SQL完了したあとのcallbackでadapterを更新
public void onCompleted(List<TokutenItem> result, 
        int count,
                Exception exception, 
                ServiceFilterResponse response) {   
   if (exception == null) {
mAdapter.clear();
        for (TokutenItem item : result) {
mAdapter.add(item);
}

   } else {
        createAndShowDialog(exception, "Error");
  }
        }
});
}

Adapterの設計

public class TokutenItemAdapter extends ArrayAdapter<TokutenItem>{
/**
* Adapter context
*/
Context mContext;

/**
* Adapter View layout
*/
int mLayoutResourceId;

public TokutenItemAdapter(Context context, int layoutResourceId) {
super(context, layoutResourceId);

mContext = context;
mLayoutResourceId = layoutResourceId;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;

final TokutenItem currentItem = getItem(position);

if (row == null) {//再利用できるrowがあるかどうかをチェック、なければ新規作成
LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();
row = inflater.inflate(mLayoutResourceId, parent, false);
}

//rowのlayoutになにを表示させるかを設定
TextView pointTv = (TextView) row.findViewById(R.id.point);
TextView priceDownTv = (TextView) row.findViewById(R.id.priceDown);
pointTv.setText(Float.toString(currentItem.getPointUp()));
priceDownTv.setText(Integer.toString(currentItem.getPriceDown()));
return row;
}

}

2013年9月20日金曜日

Android開発における便利な機能

importの自動補完
「Command+Shift+o」

AndroidにおけるAzureの使用、SQLにinsert

AndroidからAzureのSQLを使用には、簡単です。

1)Tableの構造と合うclassを用意します。

package com.example.azuretest;

public class TokutenItem {
@com.google.gson.annotations.SerializedName("id")
private int mId;
@com.google.gson.annotations.SerializedName("venusId")
private String mVenusId;

@com.google.gson.annotations.SerializedName("pointUp")
private  float mPointUp;
@com.google.gson.annotations.SerializedName("pricedown")
private int mPriceDown;
@com.google.gson.annotations.SerializedName("cardId")
private int mCardId;
public TokutenItem(String venusId, float pointUp, int priceDown, int cardId) {
//this.setId(id); idは自動的に付与され、set不可のようです
this.setVenusId(venusId);
this.setPointUp(pointUp);
this.setPriceDown(priceDown);
this.setCardId(cardId);
}
public int getId() {
return mId;
}
public String getVenusId() {
return mVenusId;
}
public float getPointUp() {
return mPointUp;
}
public int getPriceDown() {
return mPriceDown;
}
public int getCardId() {
return mCardId;
}
public final void setId(int id) {
mId = id;
}
public final void setVenusId(String venusId) {
mVenusId = venusId;
}
public final void setPointUp(float pointUp) {
mPointUp = pointUp;
}
public final void setPriceDown(int priceDown) {
mPriceDown = priceDown;
}
public final void setCardId(int cardId) {
mCardId = cardId;
}
}

2)MobileServiveClientの設定、そしてMobileServiceTableの設定

try {
// Create the Mobile Service Client instance, using the provided
// Mobile Service URL and key
mClient = new MobileServiceClient(
"https://xxxxxxx.azure-mobile.net/",
"keyforAzuraMobileService"
this);

// Get the Mobile Service Table instance to use
mTokutenTable = mClient.getTable(TokutenItem.class);
     } catch (MalformedURLException e) {
createAndShowDialog(new Exception("There was an error creating the Mobile Service. Verify the URL"), "Error");
       }
        // 挿入したいItem項目をclassに入れる、idの設定は不可
TokutenItem mTokutenItem = new TokutenItem("4e25173e091a817e3dd67300",2,300,3);
mTokutenTable.insert(mTokutenItem, new TableOperationCallback<TokutenItem>() {
        public void onCompleted(TokutenItem entity, 
                Exception exception, 
                ServiceFilterResponse response) {   
           if (exception == null) {
        //Log.i(TAG, "Read object with ID " + entity.id);
           } else {
        createAndShowDialog(exception, "Error");
           }
        }
});

getTableは、classの構造に合わせて、SQLの列を追加してくれます。

3) Permissionの追加を忘れず
<uses-permission android:name="android.permission.INTERNET" />

2013年9月18日水曜日

AdapterのgetView()

ListViewに内容を表示させるには、AdapterはデータとListViewの中間役になります。Adapterの役割の中心は、getView()です。ListViewは新しいrowを表示する際、その都度getView()を呼び出します。

public abstract View getView (int positionView convertView, ViewGroup parent)

Added in API level 1
Get a View that displays the data at the specified position in the data set. You can either create a View manually or inflate it from an XML layout file. When the View is inflated, the parent View (GridView, ListView...) will apply default layout parameters unless you use inflate(int, android.view.ViewGroup, boolean) to specify a root view and to prevent attachment to the root.
Parameters
positionThe position of the item within the adapter's data set of the item whose view we want.
convertViewThe old view to reuse, if possible. Note: You should check that this view is non-null and of an appropriate type before using. If it is not possible to convert this view to display the correct data, this method can create a new view. Heterogeneous lists can specify their number of view types, so that this View is always of the right type (see getViewTypeCount() and getItemViewType(int)).
parentThe parent that this view will eventually be attached to
Returns
  • A View corresponding to the data at the specified position.

2013年9月13日金曜日

Azureプレミアクーポン券をいただいた

日本MS本社に、あるセミナーに参加しに行ったら、何と454,500円分のAzureプレミアクーポンをいただきました。これはありがたいです。ますます、Azureに傾くようになりました。MSさんはクラウド分野で、一生懸命追いついていますね。