我正在尝试在我的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);
如果有人可以帮助我,因为我已经完成了搜索,但无法找到问题的解决方案。提前谢谢。
答案 0 :(得分:3)
KitchenManager kitchen=new KitchenManager();
不要试图这样做!!!
您无法使用Activity
实例化new
。这不是Android的工作原理。
如果您想从Activity
开始Service
,则应使用Notification
和PendingIntent
来完成此操作。
答案 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);