Android 恢复片段时出现NullPointerException

Android 恢复片段时出现NullPointerException,android,nullpointerexception,fragment,Android,Nullpointerexception,Fragment,我在ViewPager中有两个片段。这些片段具有为WS-Server调用异步的计时器。我在OnResume中停止并恢复计时器,然后在OnPause中停止计时器。有时,在S4智能手机中,我会出现以下错误: java.lang.NullPointerException at futbol.app.fragment.FragmentUsuariosConectados$3.run(FragmentUsuariosConectados.java:220) at and

我在ViewPager中有两个片段。这些片段具有为WS-Server调用异步的计时器。我在OnResume中停止并恢复计时器,然后在OnPause中停止计时器。有时,在S4智能手机中,我会出现以下错误:

  java.lang.NullPointerException
        at futbol.app.fragment.FragmentUsuariosConectados$3.run(FragmentUsuariosConectados.java:220)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:157)
        at android.app.ActivityThread.main(ActivityThread.java:5293)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
        at dalvik.system.NativeStart.main(Native Method)
这些是日志中报告的行,它们位于tvRegistrados.post中:

Line 219:   BitmapDrawable bitmapDrawable = convertViewToDrawable(
Line 220:                           getActivity(), tvRegistrados);
这是我的整个片段类

public class FragmentUsuariosConectados extends Fragment {

    private View view = null;

    private FragmentActivity activity;

    private JSONObject obj;

    private Boolean isTimeToPrint;

    private Boolean isWsFinished;

    private UsuariosConectadosList usuariosList;

    private final static int DELAY_TIME = 540000;

    private Timer timer;

    public FragmentUsuariosConectados newInstance() {
        FragmentUsuariosConectados f = new FragmentUsuariosConectados();

        return f;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        isTimeToPrint = false;
        timer = new Timer();
        isWsFinished = false;
        getFragmentActivity();
    }

    @Override
    public void onPause() {
        stopTimer();
        super.onPause();
    }

    @Override
    public void onResume() {
        resumeTimer();
        super.onResume();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        view = inflater.inflate(R.layout.fragment_usuarios_conectados,
                container, false);

        // Realiza una espera, para que al menu lateral le de tiempo de cerrarse
        // antes de pintar la pantalla
        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {

            public void run() {

                isTimeToPrint = true;
                if (isWsFinished && isTimeToPrint) {

                    onDrawScreen();
                    Log.e("DELAY", "ENTRA");
                }
            }

        }, Constantes.TIME_DELAY);

        return view;
    }

    public class WSGet extends AsyncTask<String, Integer, Void> {

        // URL del ws
        private String url;
        private WSController ws;

        public WSGet(String url) {
            this.url = url;
            this.ws = new WSController();
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        protected Void doInBackground(String... params) {

            Log.i("WSGET", "Chat");
            obj = ws.getWS(getActivity(), url);

            Gson gson = new Gson();

            if (obj != null)
                usuariosList = gson.fromJson(obj.toString(),
                        UsuariosConectadosList.class);

            return null;

        }

        protected void onPostExecute(Void result) {

            isWsFinished = true;
            if (isWsFinished && isTimeToPrint) {

                onDrawScreen();

            }

        }

    }

    private void onDrawScreen() {

        try {
            if (getFragmentActivity() != null && view != null) {

                TextView tvCompartir = (TextView) view
                        .findViewById(R.id.tv_invitar);
                tvCompartir.setOnClickListener(new OnClickListener() {

                    public void onClick(View v) {

                        new CompartirDialog(getActivity()).show();

                    }
                });

                if (usuariosList != null && usuariosList.getError() != null
                        && usuariosList.getError().getCodError().equals(0)) {

                    loadUsuarios();

                }

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void loadUsuarios() {

        UsuariosConectados usuariosConectados = usuariosList.getRespuesta();
        final List<Usuario> registradosList = usuariosConectados.getUsuarios();

        if (registradosList != null) {

            TextView tvNumConectados = (TextView) view
                    .findViewById(R.id.tv_num_conectados);
            tvNumConectados.setText(registradosList.size() + "");

            final TextView tvRegistrados = (TextView) view
                    .findViewById(R.id.usuarios_registrados);
            if (!registradosList.isEmpty())
                tvRegistrados.setVisibility(View.VISIBLE);
            final List<BitmapDrawable> bitmapList = new ArrayList<BitmapDrawable>();
            tvRegistrados.post(new Runnable() {

                @SuppressWarnings("deprecation")
                public void run() {

                    for (int i = 0; i < registradosList.size(); i++) {

                        String nick = registradosList.get(i).getNick();
                        tvRegistrados.setText(nick);
                        tvRegistrados
                                .setBackgroundDrawable(getFragmentActivity()
                                        .getResources()
                                        .getDrawable(
                                                R.drawable.shape_bg_usuario_registrado));

                        try {

                                BitmapDrawable bitmapDrawable = convertViewToDrawable(
                                        getFragmentActivity(), tvRegistrados);
                                bitmapList.add(bitmapDrawable);

                        } catch (Exception e) {
                            e.printStackTrace();
                        }

                    }

                    SpannableStringBuilder sStringBuilder = new SpannableStringBuilder();
                    for (int i = 0; i < bitmapList.size(); i++) {

                        Spannable wordSpan = new SpannableString("1" + " ");

                        BitmapDrawable bd = bitmapList.get(i);
                        bd.setBounds(0, 0, (int) (bd.getIntrinsicWidth()),
                                (int) (bd.getIntrinsicHeight()));
                        wordSpan.setSpan(new ImageSpan(bd), 0, 1,
                                Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

                        sStringBuilder.append(wordSpan);

                    }

                        tvRegistrados.setText(sStringBuilder);
                        tvRegistrados.setBackgroundColor(getFragmentActivity()
                                .getResources().getColor(
                                        android.R.color.transparent));


                }
            });

        }

        Integer numInvitados = 0;
        if (usuariosConectados.getNumInvitados() != null) {
            numInvitados = usuariosConectados.getNumInvitados();
        }
        TextView tvInvitados = (TextView) view
                .findViewById(R.id.tv_usuarios_invitados);
        tvInvitados.setText(numInvitados.toString());

    }

    public class WSTimerTask extends TimerTask {

        @Override
        public void run() {
            Log.i("TIMER WS", "EXECUTE");

            if (getFragmentActivity() != null) {

                // Login periodico del usuario en el chat
                Usuario usuario = UtilPreferencias
                        .getUsuario(getFragmentActivity());
                if (usuario != null) {
                    Usuario registrado = new Usuario();
                    registrado.setNick(usuario.getNick());
                    registrado.setPassword(usuario.getPassword());
                    new WSLogin(registrado).execute();
                } else {
                    Usuario invitado = new Usuario();
                    String uuid = UtilPreferencias
                            .getUuid(getFragmentActivity());
                    invitado.setUuid(uuid);
                    new WSLogin(invitado).execute();
                }

                // Obtiene los conectados
                new WSGet(Webservices.URL_BASE
                        + Webservices.USUARIOS_CONECTADOS
                        + futbol.app.constante.Stylo.ID_EQUIPO).execute();

            }
        }

    }

    public class WSLogin extends AsyncTask<String, Integer, Void> {

        // URL del ws
        private String url;
        private WSController ws;
        private Usuario usuario;

        public WSLogin(Usuario usuario) {

            this.ws = new WSController();
            if (usuario.getNick() != null && !usuario.getNick().equals(""))
                this.url = Webservices.URL_BASE + Webservices.USUARIO_LOGIN;
            else
                this.url = Webservices.URL_BASE + Webservices.USUARIO_INVITADO;
            this.usuario = usuario;
            this.usuario.setIdEquipo(futbol.app.constante.Stylo.ID_EQUIPO);
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

        }

        protected Void doInBackground(String... params) {

            Log.i("WSLOGIN", "Login");

            obj = ws.postWS(getFragmentActivity(), url, usuario);

            return null;

        }

        protected void onPostExecute(Void result) {

        }

    }

    public static BitmapDrawable convertViewToDrawable(Context context,
            View view) {
        int spec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
        view.measure(spec, spec);
        view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());

        Bitmap b = Bitmap.createBitmap(view.getMeasuredWidth(),
                view.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
        Canvas c = new Canvas(b);
        c.translate(-view.getScrollX(), -view.getScrollY());
        view.draw(c);
        view.setDrawingCacheEnabled(true);
        Bitmap cacheBmp = view.getDrawingCache();
        Bitmap viewBmp = cacheBmp.copy(Bitmap.Config.ARGB_8888, true);
        view.destroyDrawingCache();
        return new BitmapDrawable(context.getResources(), viewBmp);

    }

    public FragmentActivity getFragmentActivity() {

        if (activity == null) {
            activity = this.getActivity();
        }
        return activity;
    }

    @Override
    public void onDestroyView() {
        stopTimer();
        super.onDestroyView();
    }

    @Override
    public void onDestroy() {
        stopTimer();
        super.onDestroy();
    }

    public Timer getTimer() {
        return timer;
    }

    public void stopTimer() {

        if (timer != null) {
            timer.cancel();
            timer.purge();
            timer = null;
        }
    }

    public void resumeTimer() {
        stopTimer();
        if (timer == null) {
            timer = new Timer();
            // Hace autologin cada 9 min.
            timer.scheduleAtFixedRate(new WSTimerTask(), 0, DELAY_TIME);
        }
    }

}
public类fragmentUsariosconnectados扩展片段{
私有视图=空;
私人碎片活动;
私有JSONObject对象;
私人印刷品;
私有布尔完成;
私人高利贷者,联系高利贷者;
专用最终静态整数延迟时间=540000;
私人定时器;
公共碎片UsariosConnectados newInstance(){
FragmentUsariosConnectados f=新的FragmentUsariosConnectados();
返回f;
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
打印=假;
定时器=新定时器();
isWsFinished=false;
getFragmentActivity();
}
@凌驾
公共无效暂停(){
停止计时器();
super.onPause();
}
@凌驾
恢复时公开作废(){
恢复计时器();
super.onResume();
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图=充气机。充气(R.layout.fragment\u usuarios\u conctados,
货柜(虚假);;
//实现这一点,请参见cerrarse tiempo的横向菜单
//潘塔拉平塔酒店
Handler=newhandler();
handler.postDelayed(新的Runnable(){
公开募捐{
打印结果=真;
如果(isWsFinished和打印(&I){
onDrawScreen();
Log.e(“延迟”、“夹带”);
}
}
},康斯坦茨。时间延迟);
返回视图;
}
公共类WSGet扩展异步任务{
//URL del ws
私有字符串url;
专用无线传感器网络控制器;
公共WSGet(字符串url){
this.url=url;
this.ws=新的WSController();
}
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
受保护的Void doInBackground(字符串…参数){
Log.i(“WSGET”、“Chat”);
obj=ws.getWS(getActivity(),url);
Gson Gson=新的Gson();
如果(obj!=null)
usuariosList=gson.fromJson(obj.toString(),
USUARIOSCONNECTADOSLIST.class);
返回null;
}
受保护的void onPostExecute(void结果){
isWsFinished=true;
如果(isWsFinished和打印(&I){
onDrawScreen();
}
}
}
私有屏幕(){
试一试{
if(getFragmentActivity()!=null&&view!=null){
TextView tvCompartir=(TextView)视图
.findViewById(R.id.tv_invitar);
setOnClickListener(新的OnClickListener(){
公共void onClick(视图v){
新建对话框(getActivity()).show();
}
});
if(usuarislist!=null&&usuarislist.getError()!=null
&&UsuarisList.getError().GetCodeError().equals(0)){
loadUsuarios();
}
}
}捕获(例外e){
e、 printStackTrace();
}
}
私有void loadUsuarios(){
UsuariosConectados UsuariosConectados=usuariosList.getRespuesta();
最终列表registordoslist=usuariosconnectados.getUsuarios();
如果(注册列表!=null){
TextView tvNumConectados=(TextView)视图
.findviewbyd(R.id.tv\u num\u conctados);
tvNumConectados.setText(registorDosList.size()+);
最终文本视图TVDOS=(文本视图)视图
.findviewbyd(R.id.usuarios_注册);
如果(!registordoslist.isEmpty())
设置可见性(View.VISIBLE);
最终列表bitmapList=新的ArrayList();
tvRegistrados.post(新的Runnable(){
@抑制警告(“弃用”)
公开募捐{
对于(int i=0;i