0

メソッド onCreate()の外部でアダプターを設定しようとすると、この例外 System services not available to Activities beforeが発生します。関数を使用してみましたが、まだ問題を解決できませんでした。これが実際の私のコードです。メソッドを介して Service サブクラスからアクティビティ クラスにリストを送信しています。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()オンラインの public void で例外が発生しています

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

検索は完了しましたが、問題の解決策が見つからないため、誰かが私を助けることができればお願いします。前もって感謝します。

4

2 に答える 2

3
KitchenManager kitchen=new KitchenManager();

これをやろうとしないでください!!!

Activityusing をインスタンス化することはできませんnew。これは Android の仕組みではありません。

Activityからを開始したい場合は、とServiceを使用して実行する必要があります。NotificationPendingIntent

于 2012-06-12T07:09:27.923 に答える
0

コードの再設計を検討する必要があります。

どこが間違っているか指摘します。

次のコードに問題があります。

 public void sendOrder(List<Order> orderList)

このメソッドを KitchenService から呼び出して、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);
于 2012-06-12T06:45:09.680 に答える