2016-11-13 74 views
0

我的SMS應用程序的工作調用一個活動的方法和我在我的MainActivity的方法來執行一個按鈕:如何從另一個類

public void updateMessage() { 
    ViewMessages.performClick(); 
} 

這種方法效果很好,執行按鈕當我從MainActivity類中調用此方法時,請點擊。
但是,當我從任何其他類此方法,如下圖所示,在這裏我所說的主要活動的從IntentServiceHandlerupdateMessage方法,我得到一個NullPointerException

顯示java.lang.NullPointerException:嘗試調用虛方法「布爾android.widget.Button.performClick()」上一個空對象引用

public class IntentServiceHandler extends IntentService { 

    public IntentServiceHandler() { 
     super("IntentServiceHandler"); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 
     String message = intent.getStringExtra("message"); 
     TransactionDataBase transactionDB = new TransactionDataBase(this, 1); 
     transactionDB.addMessage(message); 
     MainActivity mainActivity = new MainActivity(); 
     mainActivity.updateMessage(); 
    } 
} 

我該如何處理呢?

編輯:我甚至試圖使updateMessage方法靜態的,現在我得到下面的異常

android.view.ViewRootImpl $ CalledFromWrongThreadException:只有創建視圖層次可以觸摸其觀點原來的線程。

+2

從來沒有'新'一個活動。這是你的第一個問題。您的活動可能需要綁定到該服務,並處理消息 –

+0

更新問題。我使它成爲靜態的,現在我得到了一個不同的例外 –

+0

'static'不是正確的解決方案。這只是一個可怕的解決方法。 –

回答

1

不要在IntentService中調用Activity的方法,請嘗試使用Intent在Activity和IntentService之間進行通信。

  1. 最後兩個語句)與

    Intent intent = new Intent(); 
    broadcastIntent.setAction(MainActivity.UPDATE_MESSAGE); 
    broadcastIntent.addCategory(Intent.CATEGORY_DEFAULT); 
    sendBroadcast(intent); 
    
  2. 更換onHandleIntent(你應該在MainAcitivty的的onCreate()註冊一個BroadcastReceiver像

    private BroadcastReceiver receiver; 
    
    @Override 
    public void onCreate(Bundle savedInstanceState){ 
    
        // .... 
    
        IntentFilter filter = new IntentFilter(); 
        filter.addAction(UPDATE_MESSAGE); 
    
        receiver = new BroadcastReceiver() { 
         @Override 
         public void onReceive(Context context, Intent intent) { 
         // do something based on the intent's action 
         // for example, call updateMessage() 
         } 
        }; 
    
        registerReceiver(receiver, filter); 
    } 
    
  3. IntentService的onHandleIntent運行另一個線程(而不是主線程/ ui線程),因此不允許更新onHandleIntent中的UI組件。