前提・実現したいこと
自分はプログラミング初心者です。説明が下手くそ(日本語も下手くそ)なのはご了承してください。
Android Studio(Java)でListView(配列に表示させる内容を入れてます)を用いてHandheldに一覧表示させ、次にDataApiを用いてwearにその配列データを送りたいです。wearに配列データを送る方法がわかりません。
Handheld側で「課題一覧を送る」ボタンを押すと配列データが送られて、表示させるようにしたいです。
該当のソースコード
///////////Handheld側のJavaコード//////////////
public class MainActivity extends AppCompatActivity
implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, View.OnClickListener{
private static final String TAG = "Mobile#Main";
// リストビューに表示する期限
String[] c_code = new String[] {
"8/1", "8/2", "8/6", "4/9"
};
// リストビューに表示する科目
String[] c_name = new String[] {
"国語", "算数", "理科", "社会"
};
// GoogleApiクライエント
private GoogleApiClient mGoogleApiClient = null;
private EditText editText = null;
// データを格納するためのArrayListを宣言
private ArrayList<HashMap<String, String>> data
= new ArrayList<HashMap<String, String>>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 課題の数分の繰り返し
for(int i = 0; i< c_name.length; i++){
HashMap<String, String> map
= new HashMap<String, String>();
// 提出期限をmapに代入
map.put("countrycode", c_code[i]);
// 科目名をmapに代入
map.put("countryname", c_name[i]);
// 作成したmapをdataに追加
data.add(map);
}
SimpleAdapter sa
= new SimpleAdapter(this, data, R.layout.row,
new String[]{"countrycode", "countryname"},
new int[]{R.id.countrycode, R.id.countryname}
);
// main.xmlのListViewにsaをセットします。
ListView lv = (ListView)findViewById(R.id.listview);
lv.setAdapter(sa);
//GoogleApiClientのインスタンス生成
mGoogleApiClient = new GoogleApiClient
.Builder(this)
.addApi(Wearable.API)
//接続成功と中断を監視するリスナーを登録
.addConnectionCallbacks(this)
//接続失敗を監視するリスナーを登録
.addOnConnectionFailedListener(this)
.build();
editText = (EditText)findViewById(R.id.editText);
findViewById(R.id.sendButton).setOnClickListener(this);
findViewById(R.id.send).setOnClickListener(this);
}
//フォアグラウンドに移行したタイミングで接続処理を行うメソッド
@Override
protected void onResume() {
super.onResume();
mGoogleApiClient.connect();
}
//バックグラウンド移行時に切断処理を行うメソッド
@Override
protected void onPause() {
super.onPause();
if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) {
mGoogleApiClient.disconnect();
}
}
//接続成功時のメソッド
@Override
public void onConnected(Bundle bundle) {
Log.i(TAG, "onConnected");
}
//接続中断時のメソッド
@Override
public void onConnectionSuspended(int i) {
Log.i(TAG, "onConnectionSuspended");
}
//接続失敗時のメソッド
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
Log.i(TAG, "onConnectionFailed");
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.send:
// 配列のデータ送信
sendArrayUsingDataApi(c_code[0].toString());
break;
}
}
}
//Data Apiを用いた配列データ送信処理
private void sendArrayUsingDataApi(String array) {
PutDataMapRequest putDataMapReq = PutDataMapRequest.create(Config.DATA_PATH2);
putDataMapReq.getDataMap().putString(Config.KEY_DATA2, array);
PutDataRequest putDataReq = putDataMapReq.asPutDataRequest();
Wearable.DataApi.putDataItem(mGoogleApiClient, putDataReq);
}
}
///////////Wear側のJavaコード//////////////
public class KadaiList extends Activity
implements DataApi.DataListener, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
private static final String TAG = "Wear#Main";
// GoogleApiクライエント
private GoogleApiClient mGoogleApiClient = null;
private WearableListView mListView;
private TextView text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_kadai_list);
text = (TextView)findViewById(R.id.text1);
mGoogleApiClient = new GoogleApiClient
.Builder(this)
.addApi(Wearable.API)
//接続成功と中断を監視するリスナーを登録
.addConnectionCallbacks(this)
//接続失敗を監視するリスナーを登録
.addOnConnectionFailedListener(this)
.build();
}
//フォアグラウンドに移行したタイミングで接続処理を行うメソッド
@Override
protected void onResume() {
super.onResume();
mGoogleApiClient.connect();
}
//接続成功時のメソッド
@Override
public void onConnected(Bundle bundle) {
Log.i(TAG, "onConnected");
Wearable.DataApi.addListener(mGoogleApiClient, this);
}
//バックグラウンド移行時に切断処理を行うメソッド
@Override
protected void onPause() {
super.onPause();
if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) {
Wearable.DataApi.removeListener(mGoogleApiClient, this);
mGoogleApiClient.disconnect();
}
}
//接続中断時のメソッド
@Override
public void onConnectionSuspended(int i) {
Log.i(TAG, "onConnectionSuspended");
}
//接続失敗時のメソッド
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
Log.i(TAG, "onConnectionFailed");
}
//Data Apiにより共有するデータの内容が変更されると呼ばれる
@Override
public void onDataChanged(DataEventBuffer dataEvents) {
for (DataEvent event : dataEvents) {
if (event.getType() == DataEvent.TYPE_CHANGED) {
DataItem item = event.getDataItem();
if (item.getUri().getPath().equals(Config.DATA_PATH1)) {
final DataMap dataMap1 = DataMapItem.fromDataItem(item).getDataMap();
runOnUiThread(new Runnable() {
@Override
public void run() {
//Handheldで入力された文字に書き換える
text.setText(dataMap1.getString(Config.KEY_DATA1));
}
});
}
else if (item.getUri().getPath().equals(Config.DATA_PATH2)) {
final DataMap dataMap2 = DataMapItem.fromDataItem(item).getDataMap();
runOnUiThread(new Runnable() {
@Override
public void run() {
//Handheldで表示されてる科目一覧を取得(配列)し、表示する
mListView = (WearableListView) findViewById(R.id.wearable_list);
mListView.setAdapter(new MyListAdapter(getApplicationContext(),
dataMap2.getStringArrayList(Config.KEY_DATA2)));
}
});
}
}
else if (event.getType() == DataEvent.TYPE_DELETED) {
}
}
}
// Adapterをセットする時に使用するクラス
private class MyListAdapter extends WearableListView.Adapter {
private LayoutInflater mInflater;
private List<String> mItems = null;
public MyListAdapter(Context context, List items) {
super();
mInflater = LayoutInflater.from(context);
mItems = items;
}
@Override
public WearableListView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
return new MyViewHolder(mInflater.inflate(R.layout.list_item_main, null));
}
@Override
public void onBindViewHolder(WearableListView.ViewHolder viewHolder, int position) {
MyViewHolder myViewHolder = (MyViewHolder) viewHolder;
myViewHolder.text.setText(mItems.get(position));
}
@Override
public int getItemCount() {
return mItems.size();
}
}
private static class MyViewHolder extends WearableListView.ViewHolder {
public TextView text;
public MyViewHolder(View v) {
super(v);
text = (TextView) v.findViewById(R.id.name);
}
}
}
試したこと
まずこの時点でエラーは出てないです。おそらく間違っている所はHandheld側Javaコードの、配列のデータ送信をしようとしたコードです(sendArrayUsingDataApi(c_code[i].toString()); )。自分が作ったsendArrayUsingDataApi関数が配列を入れるような形じゃないと思われます。
Wear側のJavaコードの、送られてきた配列データを表示させようとしてるところも怪しいです。
補足情報(言語/FW/ツール等のバージョンなど)
Android Studio 2.0を使用しています。
デザインはこんな感じです。
](d66b910112b9e3c33905b951a333d179.png)
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
あまり詳しく無いですが、DataMap#putStringArrayを使って二個の配列を設定するといいんじゃ無いでしょうか?
また、Wear側にデータは到達していますか?
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
データは本当に送られているのでしょうか?
pathがwearとhandheldで合わせているように見えないのですが...
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.13%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
yona
2017/02/03 20:57
コードはコード用の記述に修正してください。
Yochan
2017/02/03 21:26
かしこまりました!