微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在android中完成服务类的活动?

我正在开发一个应用程序,我想从后台服务器获取数据.我在后台使用service获取数据.现在我想处理网络异常,如果没有网络我想显示一个警告对话框并完成应用程序.在这里,我有一个问题,即完成服务类活动
显示异常ClassCastExcetption..Exception在这里提出(((Activity)mContext).finish())我尝试了很多,但我无法得到这个请任何人解决我的问题
public class InitialRequestService extends Service{

    @Override
    public IBinder onBind(Intent intent) {
        // Todo Auto-generated method stub
        return null;
    }
    @Override
    public void onCreate() {
        // Todo Auto-generated method stub
        super.onCreate();   
        new InitialRequestData(InitialRequestService.this).execute();
    }   

    public class InitialRequestData extends AsyncTask<String,Void,Void> {

        public InitialRequestData(Context context) {
            this.mContext = context;
        }

        @Override
        protected void onPreExecute() {
            // Todo Auto-generated method stub
            super.onPreExecute();
            isNetworkAvailable = CheckNetWork.isConnectedToInternet(mContext);
        }

        @Override
        protected Void doInBackground(String... params) {  
           //
        }

        @Override
        protected void onPostExecute(FeatureResult result) {
            // Todo Auto-generated method stub
            super.onPostExecute(result);

            if(result==null || isNetworkAvailable==false){

                /*String message="Unable to connect to the server,please try again";
                FieldsValdations.AlertErrorMessage(mContext,message,"Network failure");*/

                final AlertDialog alert = new AlertDialog.Builder(mContext).create();
                alert.setTitle("Network failure"); 
                alert.setMessage("Unable to connect to the server,please try again");
                alert.setButton("OK",new DialogInterface.OnClickListener() {

                    public void onClick(DialogInterface dialog,int which) {

                        alert.dismiss();
                        ((Activity) mContext).finish(); 
                    }
                });

            alert.setCancelable(false);
            alert.getwindow().setType(WindowManager.LayoutParams.TYPE_SYstem_ALERT);
            alert.show();
            }               
        }
    }
}

解决方法

排队

((Activity)mContext).finish();

mContext来自新的InitialRequestData(InitialRequestService.this).execute();

它是InitialRequestService,而不是Activity,所以你得到一个ClassCastExcetption.

您需要将Activity实例传递给Service.但我更喜欢在您的InitialRequestService中将broadcastReceiver发送到这样的Activity:

alert.setButton("OK",new DialogInterface.OnClickListener() {

    public void onClick(DialogInterface dialog,int which) {

        alert.dismiss();
        // modify here
        LocalbroadcastManager localbroadcastManager = LocalbroadcastManager
                .getInstance(InitialRequestService.this);
        localbroadcastManager.sendbroadcast(new Intent(
                "com.durga.action.close"));
                }
            });

在要关闭的活动中:

public class YourActivity extends Activity{

    LocalbroadcastManager mLocalbroadcastManager;
    broadcastReceiver mbroadcastReceiver = new broadcastReceiver() {

        @Override
        public void onReceive(Context context,Intent intent) {
            if(intent.getAction().equals("com.durga.action.close")){
                finish();
            }
        }
    };

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mLocalbroadcastManager = LocalbroadcastManager.getInstance(this);
        IntentFilter mIntentFilter = new IntentFilter();
        mIntentFilter.addAction("com.durga.action.close");
        mLocalbroadcastManager.registerReceiver(mbroadcastReceiver,mIntentFilter);
    }

    protected void onDestroy() {
        super.onDestroy();
        mLocalbroadcastManager.unregisterReceiver(mbroadcastReceiver);
    }
}

希望能帮助到你.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐