2012-06-12 45 views
0

我收到此例外系統服務不可用於onCreate()之前的活動,當我試圖在我的onCreate()方法之外設置適配器時。
我試過使用runOnUIThread()函數,但仍然無法解決我的問題。
這是我的代碼。
我通過一種方法將我的Service子類中的列表發送給我的活動類。系統服務不可用於onCreate之前的活動()

Class KitchenSerivce extends Service 
@Override 
public int onStartCommand(Intent intent, int flags , int startId) 
{ 
    super.onStartCommand(intent, flags, startId); 
    Toast.makeText(this, "Service started ...", Toast.LENGTH_SHORT).show(); 

    try 
    { 
     SoapObject result=null; 
     SoapObject request=new SoapObject(NAME_SPACE, METHOD_NAME); 

     SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11); 
     envelope.dotNet=true; 
     envelope.setOutputSoapObject(request); 

     try 
     { 
      HttpTransportSE androidHttpTransportSE=new HttpTransportSE(URL, 5000); 
      androidHttpTransportSE.call(SOAP_ACTION, envelope); 

      result=(SoapObject)envelope.getResponse(); 
      orderList=getOrder(result); 

      Log.v("Server response", result.toString()); 
     } 
     catch (Exception e) 
     { 
      msg=Toast.makeText(this, "Connection to Server Failed", Toast.LENGTH_SHORT); 
      msg.show();    
     } 

     msg=Toast.makeText(this, result.toString(), Toast.LENGTH_SHORT); 
     msg.show(); 

     KitchenManager kitchen=new KitchenManager();   
     kitchen.sendOrder(orderList); 
    }     
    catch (Exception e)  
    {    
     System.out.println("Exception Caught:"+e.getMessage());   
    } 

    return START_STICKY;   
} 

KitchenManager延伸活動

public void sendOrder(List<Order> orderList) 
{ 

    this.orderList=orderList; 

    for(int i=0;i<orderList.size();i++) 
    { 
     System.out.println("List Size:"+orderList.size()); 
     System.out.println("Item:"+orderList.get(i).getItem()); 
    } 

    adapter=new OrdersAdapter(KitchenManager.this,R.layout.kitchen_order_list,this.orderList); 

    if(this.orderList.size()==0) 
    { 

    } 
    else 
    { 
    list.setAdapter(adapter); 
    adapter.notifyDataSetChanged(); 
    } 
} 

我上線

adapter=new OrdersAdapter(KitchenManager.this,R.layout.kitchen_order_list,this.orderList); 

變得異常的公共無效sendOrder()如有任何人都可以幫助我,因爲我已經完成搜索,但找不到解決方案。提前致謝。

回答

0

你應該考慮重新設計你的代碼。

我會指出你在哪裏錯了。

您在下面的代碼中存在問題。

public void sendOrder(List<Order> orderList) 

要調用從KitchenSerivce這種方法,指望它與KitchenManager

的環境中工作

相反,你應該改變你的方法如下。

public void sendOrder(Context context,List<Order> orderList) 

你在裏面KitchenService包括以下內容。

class KitchenService extends Service { 
     private Context context; 

     @Override 
     public void onCreate() { 
      context = KitchenService.this; 
      super.onCreate(); 
     } 

,並同時呼籲kitchen.sendOrder(orderList);改變它

kitchen.sendOrder(context,orderList); 

,然後改變這種

adapter=new OrdersAdapter(KitchenManager.this,R.layout.kitchen_order_list,this.orderList); 

adapter=new OrdersAdapter(context,R.layout.kitchen_order_list,this.orderList); 
+0

如何處理sendOrder()內的上下文? –

+0

檢查已更新的answer.pass將該上下文傳遞給OrdersAdapter。 –

+0

@VipulShah:看到我的答案。OP正試圖用'new'創建一個'Activity'的實例。它永遠不會工作。 – Squonk

3
KitchenManager kitchen=new KitchenManager(); 

不要試圖做到這一點!

您不能使用new實例化Activity。這不是Android的工作原理。

如果你想從Service開始Activity你應該使用NotificationPendingIntent

+0

提到它+1。 –

+0

@VipulShah:我花了一段時間才發現它。 :) – Squonk

+0

@Squonk好的,如果我使用掛起的意圖我怎麼發送我的數組列表? –

相關問題