質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

2回答

1608閲覧

milkcocoa android sdk でpushされた値をtext viewに表示できません

nori1508

総合スコア8

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2017/06/04 12:08

編集2017/06/05 15:08

milkcocoa データストアへpushされる値(実際にはesp8266を使って温度センサーの値をPUSHさせています。)をtext viewに表示させようと思っています。milkcocoaのandroid sdk jar を使用しています。
LOG出力は正常にできていますが,
W/System.err: MqttException (0) - android.view

のようなエラー表示が示されMqtt例外が発生しているようです。
対処方法についてご教示願います。

ソースコードは以下のとおりです

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.TextView;

import com.mlkcca.client.DataElement;
import com.mlkcca.client.DataStore;
import com.mlkcca.client.DataStoreEventListener;
import com.mlkcca.client.MilkCocoa;

public class MainActivity extends Activity implements DataStoreEventListener {

int temp0 = 10; float temp1; TextView t3; private EditText editText; private ArrayAdapter<String> adapter; private MilkCocoa m_milkCocoa; private DataStore m_dataStore; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); m_milkCocoa = new MilkCocoa("MY_MILKCOCOA_APP_ID"); m_dataStore = m_milkCocoa.dataStore("DATASTORE NAME"); m_dataStore.addDataStoreEventListener(this); m_dataStore.on("push"); } @Override public void onPushed(DataElement dataElement) { final DataElement pushed = dataElement; final TextView t3 = (TextView) findViewById(R.id.text3); String temp = pushed.getValue("temp"); int temp0 = Integer.parseInt(temp); temp1=(float)temp0/10; Log.i("MC","温度は"+temp1+"℃です"); t3.setText("温度は"+temp1+"℃です"); } @Override public void onSetted(DataElement dataElement) { } @Override public void onSended(DataElement dataElement) { } @Override public void onRemoved(DataElement dataElement) { } @Override public void onPause() { super.onPause(); finish(); android.os.Process.killProcess(android.os.Process.myPid()); }

}

以上よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

ハンドラを用いて解決することができました。
参考までにソースを掲載します。

java

1import android.app.Activity; 2 import android.os.Bundle; 3 import android.os.Handler; 4 import android.util.Log; 5 import android.widget.ArrayAdapter; 6 import android.widget.TextView; 7 8import com.mlkcca.client.DataElement; 9 import com.mlkcca.client.DataStore; 10 import com.mlkcca.client.DataStoreEventListener; 11 import com.mlkcca.client.MilkCocoa; 12 13public class MainActivity extends Activity implements DataStoreEventListener { 14 String temp; 15 int temp0; 16 String temp2; 17 float temp1; 18 TextView t3; 19 private MilkCocoa m_milkCocoa; 20 private DataStore m_dataStore; 21 private Handler handler = new Handler(); 22 private ArrayAdapter<String> adapter; 23 24@Override 25 protected void onCreate(Bundle savedInstanceState) { 26 super.onCreate(savedInstanceState); 27 setContentView(R.layout.activity_main); 28 t3 = (TextView) findViewById(R.id.text3); 29 m_milkCocoa = new MilkCocoa("MY_MILKCOCOA_APP_ID"); 30 m_dataStore = m_milkCocoa.dataStore("DATASTORE NAME"); 31 m_dataStore.addDataStoreEventListener(this); 32 m_dataStore.on("push"); 33 } 34 35@Override 36 public void onPushed(DataElement dataElement) { 37 final DataElement pushed = dataElement; 38 new Thread(new Runnable() { 39 @Override 40 public void run() { 41 handler.post(new Runnable() { 42 @Override 43 public void run() { 44 String temp = pushed.getValue("temp"); 45 int temp0 = Integer.parseInt(temp); 46 temp1 = (float) temp0 / 10; 47 Log.i("MC", "温度は" + temp1 + "℃です"); 48temp2 = "温度は" + temp1 + "℃です"; 49t3.setText(temp2); 50 } 51 }); 52 } 53 54}).start(); 55 } 56 57@Override 58 public void onSetted(DataElement dataElement) { 59 60} 61 62@Override 63 public void onSended(DataElement dataElement) { 64 65} 66 67@Override 68 public void onRemoved(DataElement dataElement) { 69 70} 71 72@Override 73 public void onPause() { 74 super.onPause(); 75 finish(); 76 android.os.Process.killProcess(android.os.Process.myPid()); 77 } 78 }

投稿2017/06/17 16:19

編集2017/06/17 16:41
nori1508

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

いろいろ 調べてみたところ setText等で表示させる場合は,ハンドラを用いないとロックしてしまう
記載がありました。その方法でトライしてみたいと思います。

投稿2017/06/08 20:51

nori1508

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問