- Beranda
- Komunitas
- Tech
- Programmer Forum
[ASK] Penggunaan Text Watcher Message Handler
TS
ketuakpk
[ASK] Penggunaan Text Watcher Message Handler
Salam agan-agan master
ane lagi buat aplikasi pake Message Handler sama Text Watcher,
Jadi si message handler ane pake buat ngambil data dari soket tcp arduino
terus text watcher buat ngeliat kalo editText terisi 10 karakter dia akan search database. Berikut masing-masing kodenya
yang bikin ane bingung adalah ketika aplikasi menerima karakter dari soket tcp, aplikasi langsung forced close.
Ada apa ya gan?ane liat di stackoverflow.com katanya pake background system nah bagaimana cara implementasi di kode ane jika kondisi kode ane seperti ini?
Trims banget ya gan kalo ada yang bantu?
matabelo
ane lagi buat aplikasi pake Message Handler sama Text Watcher,
Jadi si message handler ane pake buat ngambil data dari soket tcp arduino
terus text watcher buat ngeliat kalo editText terisi 10 karakter dia akan search database. Berikut masing-masing kodenya
Spoiler for code watchere:
Code:
// EditTextWacther Implementation
private final TextWatcher mTextEditorWatcher = new TextWatcher() {
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{
// When No ID
}
public void onTextChanged(CharSequence s, int start, int before, int count)
{
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
if(s.length()==10)
{
//sapi cariSapi = new sapi();
EditText etTag = (EditText) findViewById(R.id.editText1);
EditText etWaktu = (EditText) findViewById(R.id.editText2);
EditText etStatus = (EditText) findViewById(R.id.editText3);
cari=etStatus.getText().toString();
Cursor cursor=dataSource.cariDataSapi(cari);
if(cursor.moveToFirst()){
hasildb=cursor.getString(2);
for (; !cursor.isAfterLast(); cursor.moveToNext()) {
hasildb = cursor.getString(2);
idhasil = cursor.getString(1);
dbid = cursor.getLong(0);
cariSapi.setId(cursor.getLong(0));
cariSapi.setTag(cursor.getString(1));
cariSapi.setWaktu(cursor.getString(2));
}
}
etTag.setText(idhasil);
etWaktu.setText(hasildb);
//etStatus.setText(count);
}
}
};
Spoiler for handler:
Code:
@SuppressLint("HandlerLeak") Handler myUpdateHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_ID:
EditText etStatus = (EditText) findViewById(R.id.editText3);
etStatus.setText(mClientMsg);
break;
default:
break;
}
super.handleMessage(msg);
}
};
class CommsThread implements Runnable {
public void run() {
Socket s = null;
try {
ss = new ServerSocket(SERVERPORT );
} catch (IOException e) {
e.printStackTrace();
}
while (!Thread.currentThread().isInterrupted()) {
Message m = new Message();
m.what = MSG_ID;
try {
if (s == null)
s = ss.accept();
BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream()));
String st = null;
st = input.readLine();
mClientMsg = st;
myUpdateHandler.sendMessage(m);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Spoiler for code lengkap:
Code:
package com.arduino.socketsapi;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.database.Cursor;
//import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class consolemode extends Activity implements OnClickListener{
private DBDataSource dataSource;
ServerSocket ss =null;
sapi cariSapi=new sapi();
String hasildb,tmpMsg,cari,idhasil,waktubaru;
long dbid;
String mClientMsg = "";
Thread myCommsThread = null;
EditText etTag;
EditText etWaktu;
EditText etStatus;
Button update;
Cursor cursor;
Handler dHandler=new Handler();
int count = 0;
protected static final int MSG_ID = 0x1337;
public static final int SERVERPORT = 8888;
//private final long startTime = 30 * 1000;
//private final long interval = 1 * 1000;
@Override
public void onCreate(Bundle savedInstanceState) {
//BETA SIMULASI
super.onCreate(savedInstanceState);
setContentView(R.layout.consolemode);
//open database
dataSource=new DBDataSource(this);
dataSource.open();
//referensi edittext
etTag = (EditText) findViewById(R.id.editText1);
etWaktu = (EditText) findViewById(R.id.editText2);
etStatus = (EditText) findViewById(R.id.editText3);
etStatus.requestFocus();
update = (Button) findViewById(R.id.button1);
update.setOnClickListener(this);
//textwatcher pada edittext
etStatus.addTextChangedListener(mTextEditorWatcher);
//countDownTimer = new MyCountDownTimer(startTime, interval);
//koneksi ke soket tcp
this.myCommsThread = new Thread(new CommsThread());
this.myCommsThread.start();
}
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId())
{
// apabila tombol save diklik (update sapi)
case R.id.button1 :
//update.setText("sudah dklik");
etWaktu = (EditText) findViewById(R.id.editText2);
etStatus = (EditText) findViewById(R.id.editText3);
waktubaru=etWaktu.getText().toString();
dataSource.hapusDataSapi(dbid);
dataSource.createSapi(idhasil,waktubaru);
Toast.makeText(this, "Data sapi berhasil diupdate",Toast.LENGTH_LONG).show();
dataSource.close();
break;
}
};
// EditTextWacther Implementation
private final TextWatcher mTextEditorWatcher = new TextWatcher() {
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{
// When No ID
}
public void onTextChanged(CharSequence s, int start, int before, int count)
{
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
if(s.length()==10)
{
//sapi cariSapi = new sapi();
EditText etTag = (EditText) findViewById(R.id.editText1);
EditText etWaktu = (EditText) findViewById(R.id.editText2);
EditText etStatus = (EditText) findViewById(R.id.editText3);
cari=etStatus.getText().toString();
Cursor cursor=dataSource.cariDataSapi(cari);
if(cursor.moveToFirst()){
hasildb=cursor.getString(2);
for (; !cursor.isAfterLast(); cursor.moveToNext()) {
hasildb = cursor.getString(2);
idhasil = cursor.getString(1);
dbid = cursor.getLong(0);
cariSapi.setId(cursor.getLong(0));
cariSapi.setTag(cursor.getString(1));
cariSapi.setWaktu(cursor.getString(2));
}
}
etTag.setText(idhasil);
etWaktu.setText(hasildb);
//etStatus.setText(count);
}
}
};
/*
private class MyAsync extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params) {
// inserting data
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
}
}
*/
@Override
protected void onStop() {
super.onStop();
try {
ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@SuppressLint("HandlerLeak") Handler myUpdateHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_ID:
EditText etStatus = (EditText) findViewById(R.id.editText3);
etStatus.setText(mClientMsg);
break;
default:
break;
}
super.handleMessage(msg);
}
};
class CommsThread implements Runnable {
public void run() {
Socket s = null;
try {
ss = new ServerSocket(SERVERPORT );
} catch (IOException e) {
e.printStackTrace();
}
while (!Thread.currentThread().isInterrupted()) {
Message m = new Message();
m.what = MSG_ID;
try {
if (s == null)
s = ss.accept();
BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream()));
String st = null;
st = input.readLine();
mClientMsg = st;
myUpdateHandler.sendMessage(m);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
yang bikin ane bingung adalah ketika aplikasi menerima karakter dari soket tcp, aplikasi langsung forced close.
Ada apa ya gan?ane liat di stackoverflow.com katanya pake background system nah bagaimana cara implementasi di kode ane jika kondisi kode ane seperti ini?
Trims banget ya gan kalo ada yang bantu?
matabelo
Diubah oleh ketuakpk 21-07-2014 09:07
0
932
Kutip
0
Balasan
Tulis komentar menarik atau mention replykgpt untuk ngobrol seru
Tulis komentar menarik atau mention replykgpt untuk ngobrol seru
Komunitas Pilihan