저는 로컬로 바인딩 된 서비스를 android.My 응용 프로그램에 작성하고 있습니다. 두 클래스가 있습니다 즉. 활동 및 서비스Nullpointer는 android에서 로컬 바인딩 서비스로 구현 된 함수에 의해 반환되었습니다.
내 활동에는 하나의 TextView와 하나의 버튼이 있습니다. 활동의 onCreate() 메소드에서 서비스를 시작하고 바인딩하고 있습니다. 버튼이 클릭 될 때 서비스 클래스로 작성된 함수에서 반환 된 문자열 값으로 TextView를 업데이트하려고합니다.
null 반환 값은 항상 null입니다. 문제가 될 수 있습니다?
여기
내 전체 코드를 제공하고이 활동 클래스에게 있습니다
package com.tcs.cto.healthcare;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.tcs.cto.healthcare.GlucoseDataService.LocalUSBSerialBinder;
public class HealthcareCTOActivity extends Activity {
Button getDataButton;
TextView dataView;
String TAG="HealthCareCTO";
String glucoseData;
GlucoseDataService myService;
boolean isBound = false;
private ServiceConnection myConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className,
IBinder service) {
LocalUSBSerialBinder binder = (LocalUSBSerialBinder) service;
myService = binder.getService();
isBound = true;
}
public void onServiceDisconnected(ComponentName arg0) {
isBound = false;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_healthcare_cto);
getDataButton=(Button)findViewById(R.id.button1);
dataView=(TextView)findViewById(R.id.glucoseDataView);
Intent intent = new Intent(this, GlucoseDataService.class);
startService(intent);
bindService(intent, myConnection, Context.BIND_AUTO_CREATE);
Log.i(TAG,"Glucose Service Started");
//getDataButton=(Button)findViewById(R.id.button1);
//dataView=(TextView)findViewById(R.id.glucoseDataView);
getDataButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View arg0) {
Log.i(TAG,"Button clicked");
try{
//glucoseData = myService.getGlucoseValueOverSerialPort();
String currentTime="XXX";
currentTime = myService.getCurrentTime();
//glucoseData = myService.getGlucoseValueOverSerialPort();
//Log.i(TAG,"glucoseData --> "+glucoseData);
Log.i(TAG,"currentTume --> "+currentTime);
dataView.setText(currentTime);
}catch(Exception ex){
Log.i(TAG,"Button click exception");
ex.printStackTrace();
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_healthcare_cto, menu);
return true;
}
}
그리고}package com.tcs.cto.healthcare;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;
public class GlucoseDataService extends Service {
private final IBinder myBinder = new LocalUSBSerialBinder();
String glucoseData="0000";
String TAG="GlucoseService";
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
public String getGlucoseValueOverSerialPort(){
int glucoseValue=120;
glucoseData=String.valueOf(glucoseValue);
return glucoseData;
}
public String getCurrentTime() {
Log.i(TAG,"getCurrentTime");
SimpleDateFormat dateformat =
new SimpleDateFormat("HH:mm:ss MM/dd/yyyy", Locale.US);
return (dateformat.format(new Date()));
}
public class LocalUSBSerialBinder extends Binder {
GlucoseDataService getService() {
return GlucoseDataService.this;
}
를 다음과 같이 내 서비스 클래스이다; }