0

我有一個Tabhost 3周孩子的活動的Android:如何從服務中獲得一個變量來tabhost子活動

1)TabbarExample.java //標籤活動

2)FirstTab.java //子活動

3)SecondTab.java //子活動

4)ThirdTab.java //子活動

所以對於tabhost,getApp的第一個子活動licationContext.bindService()工作正常,我可以從服務中獲取數據並在UI上顯示。

實際的事情是我訪問值(比如速度,溫度)從遠程服務的第一個子活動,dispalying在UI

和tabhost的第二個孩子的活動做我需要重複我在第一次兒童活動中使用的代碼相同。

我不想爲tabhost的第二個和第三個子活動重複相同的代碼。

對於第二個子活動(SecondTab.java),我做了一些更改,但UI沒有獲取數據。

在第二個孩子活動中,我沒有得到顯示的數據,而是得到錯誤。

 @Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.hvacpass); 
    // ((SecondTab) getApplicationContext()).doBindService(); 
    // doBindService(); 
    try { 
     passcurtempcount = (TextView) findViewById(R.id.passcurtempcount); 

     hvactemppass = remoteService.getHvacTemppass(); //GETTING ERRORS HERE 
     passcurtempcount.setText(Integer.toString(hvactemppass)); 
     Toast.makeText(SecondTab.this, "Connected", Toast.LENGTH_SHORT) 
       .show(); 
    } catch (RemoteException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

public void onServiceConnected(ComponentName className, IBinder boundService) { 
    // TODO Auto-generated method stub 
    doBindService(); 

    remoteService = IMyRemoteService.Stub 
      .asInterface((IBinder) boundService); 
    Log.d(getClass().getSimpleName(), "onServiceConnected()"); 

    Intent i = new Intent(); 
    i.setClassName("com.msat.home.clusterservices", 
      "com.msat.home.clusterservices.RemoteService"); 
    getApplicationContext().startService(i); 
    getApplicationContext().bindService(i, this, Context.BIND_AUTO_CREATE); 

    if(startService(i) != null) { 
     Toast.makeText(getBaseContext(), "service is already running", Toast.LENGTH_SHORT).show(); 
    }else { 
     Toast.makeText(getBaseContext(), "There is no service running, starting service..", Toast.LENGTH_SHORT).show(); 
    } 




} 

public void onServiceDisconnected(ComponentName className) { 
    // TODO Auto-generated method stub 
    remoteService = null; 

} 

public void doBindService() { 

    getApplicationContext().bindService(
      // getApplicationContext() fixed the problem here. 
      new Intent(getApplicationContext(), FirstTab.class), conn, 
      Context.BIND_AUTO_CREATE); 


} 

這些都是錯誤信息

 09-06 12:58:55.160: E/AndroidRuntime(2512): FATAL EXCEPTION: main 
     09-06 12:58:55.160: E/AndroidRuntime(2512): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.hvaccontroller.msat/com.hvaccontroller.msat.SecondTab}: java.lang.NullPointerException 
     09-06 12:58:55.160: E/AndroidRuntime(2512): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1650) 
     09-06 12:58:55.160: E/AndroidRuntime(2512): at android.app.ActivityThread.startActivityNow(ActivityThread.java:1487) 
    09-06 12:58:55.160: E/AndroidRuntime(2512): at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127) 
    09-06 12:58:55.160: E/AndroidRuntime(2512): at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339) 
    09-06 12:58:55.160: E/AndroidRuntime(2512): at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:654) 
    09-06 12:58:55.160: E/AndroidRuntime(2512): at android.widget.TabHost.setCurrentTab(TabHost.java:326) 
    09-06 12:58:55.160: E/AndroidRuntime(2512): at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:132) 
    09-06 12:58:55.160: E/AndroidRuntime(2512): at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:456) 
    09-06 12:58:55.160: E/AndroidRuntime(2512):  at android.view.View.performClick(View.java:2485) 
    09-06 12:58:55.160: E/AndroidRuntime(2512):  at android.view.View$PerformClick.run(View.java:9080) 
    09-06 12:58:55.160: E/AndroidRuntime(2512):  at android.os.Handler.handleCallback(Handler.java:587) 
    09-06 12:58:55.160: E/AndroidRuntime(2512): at android.os.Handler.dispatchMessage(Handler.java:92) 
    09-06 12:58:55.160: E/AndroidRuntime(2512): at android.os.Looper.loop(Looper.java:130) 
    09-06 12:58:55.160: E/AndroidRuntime(2512):  at android.app.ActivityThread.main(ActivityThread.java:3686) 
    09-06 12:58:55.160: E/AndroidRuntime(2512):  at java.lang.reflect.Method.invokeNative(Native Method) 
    09-06 12:58:55.160: E/AndroidRuntime(2512):  at java.lang.reflect.Method.invoke(Method.java:507) 
    09-06 12:58:55.160: E/AndroidRuntime(2512):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
    09-06 12:58:55.160: E/AndroidRuntime(2512):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
    09-06 12:58:55.160: E/AndroidRuntime(2512):  at dalvik.system.NativeStart.main(Native Method) 
    09-06 12:58:55.160: E/AndroidRuntime(2512): Caused by: java.lang.NullPointerException 
    09-06 12:58:55.160: E/AndroidRuntime(2512):  at com.hvaccontroller.msat.SecondTab.onCreate(SecondTab.java:37) 
    09-06 12:58:55.160: E/AndroidRuntime(2512):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
    09-06 12:58:55.160: E/AndroidRuntime(2512):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1614) 
    09-06 12:58:55.160: E/AndroidRuntime(2512):  ... 18 more 

回答

0

它看起來像remoteService中的onCreate沒有初始化,這就是爲什麼你得到那個NullPointerException異常。您在onServiceConnected方法中初始化remoteService,但不要在那裏使用它。除非它是一個成員變量,onCreate方法之前不調用onServiceConnected。

這可能可以解釋你得到的錯誤,不確定你的詢問 - 你能否澄清?

+0

謝謝我已在onServiceConnected()中初始化它,但沒有在UI textview上顯示任何值。 hvactemppass = remoteService.getHvacTemppass(); passcurtempcount.setText(Integer.toString(hvactemppass));使用這兩行我試圖在textview中顯示hvactemppass – Randroid

相關問題