2015-01-06 3 views
0

저는 로컬로 바인딩 된 서비스를 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; 
    } 

를 다음과 같이 내 서비스 클래스이다; }

답변

0

연결하려는 장치의 USB 직렬 드라이버의 공급 업체 ID와 제품을 추가하면 문제가 해결되었습니다. 장치 ID가 누락되어 연결 개체가 생성되지 않고 null이 반환되었습니다. android.manifest 파일에 메타 데이터 태그를이 device_filter.xml을 추가하고 업데이트 한 후

<!-- 0x10C4/0xEA60: CP210x UART Bridge --> 
<usb-device vendor-id="4292" product-id="60000" /> 

문제를 해결.