onCreate()之前活动无法使用的系统服务

时间:2012-06-12 06:29:46

标签: android

我正在尝试在我的onCreate()方法之外设置适配器时,onCreate()之前的活动无法使用此异常系统服务。
我尝试过使用runOnUIThread()函数但仍然无法解决问题。
实际上这是我的代码。
我从我的服务子类发送一个列表到我的活动通过一种方法。

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();
    }
}

我在线上的公共空sendOrder()

中遇到异常
adapter=new OrdersAdapter(KitchenManager.this,R.layout.kitchen_order_list,this.orderList);

如果有人可以帮助我,因为我已经完成了搜索,但无法找到问题的解决方案。提前谢谢。

2 个答案:

答案 0 :(得分:3)

KitchenManager kitchen=new KitchenManager();

不要试图这样做!!!

您无法使用Activity实例化new。这不是Android的工作原理。

如果您想从Activity开始Service,则应使用NotificationPendingIntent来完成此操作。

答案 1 :(得分:0)

您应该考虑重新设计代码。

我会指出你哪里错了。

以下代码存在问题。

 public void sendOrder(List<Order> orderList)

您正在从KitchenSerivce调用此方法并期望它与KitchenManager的上下文一起使用

相反,您应该将方法更改为关注。

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

您的厨房服务包括以下内容。

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);