2011-12-13 124 views
0

我有一個活動,我希望它從服務中更新。當我嘗試啓動服務時,我收到一個強制關閉錯誤。啓動服務時強制關閉

logcat的

12-13 15:26:24.574: E/AndroidRuntime(13741): FATAL EXCEPTION: main 
12-13 15:26:24.574: E/AndroidRuntime(13741): java.lang.RuntimeException: Unable to instantiate service www.freshapp.com.wherewhen.html.SetTime: java.lang.NullPointerException 
12-13 15:26:24.574: E/AndroidRuntime(13741): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2005) 
12-13 15:26:24.574: E/AndroidRuntime(13741): at android.app.ActivityThread.access$2500(ActivityThread.java:124) 
12-13 15:26:24.574: E/AndroidRuntime(13741): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1022) 
12-13 15:26:24.574: E/AndroidRuntime(13741): at android.os.Handler.dispatchMessage(Handler.java:99) 
12-13 15:26:24.574: E/AndroidRuntime(13741): at android.os.Looper.loop(Looper.java:123) 
12-13 15:26:24.574: E/AndroidRuntime(13741): at android.app.ActivityThread.main(ActivityThread.java:3806) 
12-13 15:26:24.574: E/AndroidRuntime(13741): at java.lang.reflect.Method.invokeNative(Native Method) 
12-13 15:26:24.574: E/AndroidRuntime(13741): at java.lang.reflect.Method.invoke(Method.java:507) 
12-13 15:26:24.574: E/AndroidRuntime(13741): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
12-13 15:26:24.574: E/AndroidRuntime(13741): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
12-13 15:26:24.574: E/AndroidRuntime(13741): at dalvik.system.NativeStart.main(Native Method) 
12-13 15:26:24.574: E/AndroidRuntime(13741): Caused by: java.lang.NullPointerException 
12-13 15:26:24.574: E/AndroidRuntime(13741): at www.freshapp.com.wherewhen.html.SetTime.<init>(SetTime.java:21) 
12-13 15:26:24.574: E/AndroidRuntime(13741): at java.lang.Class.newInstanceImpl(Native Method) 
12-13 15:26:24.574: E/AndroidRuntime(13741): at java.lang.Class.newInstance(Class.java:1409) 
12-13 15:26:24.574: E/AndroidRuntime(13741): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2002) 

服務類

public class SetTime extends Service { 


private Handler hanl; 
private Context context; 
LayoutInflater inflater = (LayoutInflater)context.getSystemService(LAYOUT_INFLATER_SERVICE); 
View name = inflater.inflate(R.id.editName, null); 

View lon = inflater.inflate(R.id.editName, null); 

View lat = inflater.inflate(R.id.editName, null); 

@Override 
public IBinder onBind(Intent intent) { 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public void onCreate(){ 

} 

@Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 

    final LocationManager mlocManager = 
       (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     final LocationListener mlocListener = new LocationHelper(); 
     Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show(); 

     final Runnable r = new Runnable(){ 
     public void run(){ 
      mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, 
        mlocListener); 

      ((TextView) lat).setText(""+ LocationHelper.getLatitude()); 
      ((TextView) lon).setText("" + LocationHelper.getLongitude()); 


      hanl.postDelayed(this, 1000); 


      //String date = s.format(new Date()); 
       String mName = ((EditText) name).getText().toString(); 
       String mLat = ((EditText) lat).getText().toString(); 
       String mLon = ((EditText) lon).getText().toString(); 




     } 
      }; 
      hanl.postDelayed(r, 1000); 


     // If we get killed, after returning from here, restart 
     return START_STICKY; 
    } 

}

LINE 21

LayoutInflater inflater = (LayoutInflater)context.getSystemService(LAYOUT_INFLATER_SERVICE); 

回答

0

您正試圖在靜態初始化程序中創建一個LayoutInflater。這不起作用。在戰術上,它不會工作,因爲您正試圖在context上撥打getSystemService(),此時null

此外,Service有沒有用了LayoutInflater,所以你應該刪除引用它的第21行的一切,如全部EditText小部件,你不能使用。或者,將此Service轉換爲Activity,因爲Activity具有UI,而Service則不具有UI。

+0

@CommansWare,那很糟糕。有沒有一種方法可以用服務更新信息 – Christian 2011-12-13 22:57:24