Android 想要中断线程,但线程为空

Android 想要中断线程,但线程为空,android,multithreading,null,android-context,Android,Multithreading,Null,Android Context,我想从另一个thread2中断一个thread1,但是当我尝试执行thread1.interrupt()时调用我得到一个空指针错误 我正在制作一个android应用程序,我在一个android登录页面上,当我登录时,我创建并启动一个名为sessionTimer(会话倒计时是2分钟)的线程。我想要的是,当我在另一个活动中按logout时,我进入登录页面,我的sessionTimer线程应该被中断,这样我就可以在最长时间内启动新的登录会话 package com.AndroidApp.Login;

我想从另一个thread2中断一个thread1,但是当我尝试执行
thread1.interrupt()时调用我得到一个空指针错误

我正在制作一个android应用程序,我在一个android登录页面上,当我登录时,我创建并启动一个名为
sessionTimer
(会话倒计时是2分钟)的线程。我想要的是,当我在另一个活动中按logout时,我进入登录页面,我的
sessionTimer
线程应该被中断,这样我就可以在最长时间内启动新的登录会话

package com.AndroidApp.Login;

import java.security.GeneralSecurityException;
import java.security.MessageDigest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.AndroidApp.R;
import com.AndroidApp.domain.Utente;
import com.AndroidApp.pagine.MenuPagina;


public class LoginActivity extends Activity {

    final String TAG = "LogIN";
    ArrayList<HashMap<String, String>> mylist;

    private Button bLogin, bExit;
    private EditText utente, passwd;
    private MediaPlayer mpButtonClick = null;
    private SharedPreferences mPreferences; 
    public volatile Thread sessionTimer;
    public long tId = -1;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);

        mPreferences = getSharedPreferences("CurrentUser", MODE_PRIVATE);

        SharedPreferences.Editor editor = mPreferences.edit();
        editor.clear();
        editor.commit();

        String nome = mPreferences.getString("nome", "Nessuno");
        setTitle("Sessione di : " + nome);
        Log.w("TotThreads", Integer.toString(Thread.activeCount()));
        /*
        final SessionTimer st = new SessionTimer();
        */
        if(MenuPagina.reset){

            Log.w("sessionTimer ID", Long.toString(sessionTimer.getId()));
            if (sessionTimer == null)
                Log.w("sessionTimer", "sessionTimer is NULL");
            sessionTimer.interrupt();
            System.out.println("end current session");

            //st.stopRequest();
        }

        if (!checkLoginInfo()) {

            mpButtonClick = MediaPlayer.create(this, R.raw.button);

            bLogin = (Button)findViewById(R.id.bLogin);
            bLogin.setOnClickListener(new View.OnClickListener() {

                public void onClick(View view) {

                    mpButtonClick.start();

                    Log.v(TAG, "Trying to Login");
                    utente = (EditText)findViewById(R.id.etUtente);
                    passwd = (EditText)findViewById(R.id.etPassword);

                    String username = utente.getText().toString();
                    username = ("ccce@eex.it");
                    String password = md5(passwd.getText().toString());
                    password = md5("12345");

                    XMLFunctionsLogin.getInstance().setNewURL("u=" + username + "&p=" + password);
                    String xml = XMLFunctionsLogin.getXML();
                    Document doc = XMLFunctionsLogin.xmlFromString(xml); 
                    int status = XMLFunctionsLogin.errStatus(doc); 

                    Log.v("status", Integer.toString(status));
                    if ((status == 0)) {
                        NodeList nodes = doc.getElementsByTagName("login"); 
                        Element e = (Element) nodes.item(0);
                        Utente utente = new Utente();
                        utente.setIdUtente(XMLFunctionsLogin.getValue(e, "idUtente"));
                        utente.setNome(XMLFunctionsLogin.getValue(e, "nome"));
                        utente.setCognome(XMLFunctionsLogin.getValue(e, "cognome"));
                        Log.v("utente", utente.getCognome().toString());

                        List<NameValuePair> nvps = new ArrayList<NameValuePair>(2);
                        nvps.add(new BasicNameValuePair("utente", username));
                        nvps.add(new BasicNameValuePair("password", password));
                        Log.v(TAG, nvps.get(0).toString());
                        Log.v(TAG, nvps.get(1).toString());

                        // Store the username and password in SharedPreferences after the successful login
                        SharedPreferences.Editor editor = mPreferences.edit();
                        editor.putString("userName", username);
                        editor.putString("password", password);
                        editor.putString("idUtente", utente.getIdUtente());
                        editor.putString("nome", utente.getNome());
                        editor.putString("cognome", utente.getCognome());
                        editor.commit();


                        Log.v(TAG, "timer");
                        Log.v("RESET", Boolean.toString(MenuPagina.reset));

                        /*
                        Thread t = new Thread(st);
                        t.start();
                        */




                        sessionTimer = new Thread() {
                            @Override
                            public void run() {
                                long tId = Thread.currentThread().getId();
                                Log.w("TTthread Id", Long.toString(tId));
                                for (int i = 30; i >= 0; i -= 1) {
                                    if ((i == 0) || (MenuPagina.reset)) {
                                        System.out.print("timer finito");
                                        Log.i("Timer", "timer finito");
                                        LoginActivity.this.runOnUiThread(new Runnable() { 
                                            public void run() { 
                                                Toast.makeText(LoginActivity.this, "ti si è scaduta la sessione", Toast.LENGTH_LONG).show(); 
                                            }
                                        });
                                        Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
                                        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                                        startActivity(intent);
                                        //System.exit(0);
                                    } try {
                                        Thread.sleep(1000);
                                        Log.i("Timer", Integer.toString(i));
                                    } catch (InterruptedException e) {
                                        Log.i("Catch", "Catchhhhhhhhhhhh");
                                        e.printStackTrace();
                                        Thread.currentThread().interrupt();
                                        return;

                                    }
                                }
                            }

                        };
                        sessionTimer.start();


                        Log.v(TAG, "Successo2");

                        Toast.makeText(LoginActivity.this, "LogIn con successo", Toast.LENGTH_SHORT).show();
                        Intent intent = new Intent(getApplicationContext()/*LoginActivity.this*/, MenuPagina.class);
                        startActivity(intent);

                    } else {
                        final String errorMessage = XMLFunctionsLogin.errStatusDesc(doc);
                        Log.v("fallimento", errorMessage);
                        LoginActivity.this.runOnUiThread(new Runnable() { 
                            public void run() { 
                                Toast.makeText(LoginActivity.this, errorMessage, Toast.LENGTH_LONG).show(); 
                            }
                        });

                        Intent intent = getIntent();
                        finish();
                        startActivity(intent);
                    }
                }

            });

            bExit = (Button)findViewById(R.id.bExit);
            bExit.setOnClickListener(new View.OnClickListener() {

                public void onClick(View view) {
                    mpButtonClick.start();
                    finish();
                }
            });
        }
    }

    //Checking whether the username and password has stored already or not
    private final boolean checkLoginInfo() {
          boolean username_set = mPreferences.contains("UserName");
          boolean password_set = mPreferences.contains("PassWord"); 
          if ( username_set || password_set ) {
                return true;
          } 
          return false;
    }

    //md5 for crypting and hash
    private static String md5(String data) {
        byte[] bdata = new byte[data.length()];
        int i;
        byte[] hash;

        for (i = 0; i < data.length(); i++)
            bdata[i] = (byte) (data.charAt(i) & 0xff);

        try {
            MessageDigest md5er = MessageDigest.getInstance("MD5");
            hash = md5er.digest(bdata);
        } catch (GeneralSecurityException e) {
            throw new RuntimeException(e);
        }

        StringBuffer r = new StringBuffer(32);
        for (i = 0; i < hash.length; i++) {
            String x = Integer.toHexString(hash[i] & 0xff);
            if (x.length() < 2)
                r.append("0");
            r.append(x);
        }
        return r.toString();
    }
}
package com.AndroidApp.Login;
导入java.security.GeneralSecurityException;
导入java.security.MessageDigest;
导入java.util.ArrayList;
导入java.util.HashMap;
导入java.util.List;
导入org.apache.http.NameValuePair;
导入org.apache.http.message.BasicNameValuePair;
导入org.w3c.dom.Document;
导入org.w3c.dom.Element;
导入org.w3c.dom.NodeList;
导入android.app.Activity;
导入android.content.Intent;
导入android.content.SharedReferences;
导入android.media.MediaPlayer;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.Toast;
导入com.AndroidApp.R;
导入com.AndroidApp.domain.utete;
进口com.AndroidApp.pagine.MenuPagina;
公共类LoginActivity扩展了活动{
最后一个字符串TAG=“LogIN”;
ArrayList mylist;
私有按钮bLogin,bExit;
私有EditText-utente,passwd;
私有媒体播放器mpButtonClick=null;
私人共享参考文献;
公共易失性线程sessionTimer;
公众长期工贸总指数=-1;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
mPreferences=getSharedReferences(“当前用户”,模式\私有);
SharedReferences.Editor=mPreferences.edit();
编辑器.clear();
commit();
字符串nome=mPreferences.getString(“nome”、“Nessuno”);
片名(“Sessione di:+nome”);
Log.w(“tothreads”,Integer.toString(Thread.activeCount());
/*
final SessionTimer st=新SessionTimer();
*/
如果(菜单设置重置){
Log.w(“sessionTimer ID”,Long.toString(sessionTimer.getId());
if(sessionTimer==null)
w(“sessionTimer”,“sessionTimer为空”);
sessionTimer.interrupt();
System.out.println(“结束当前会话”);
//st.stopRequest();
}
如果(!checkLoginInfo()){
mpButtonClick=MediaPlayer.create(这个,R.raw.button);
bLogin=(按钮)findviewbyd(R.id.bLogin);
bLogin.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图){
mpbutton单击.start();
Log.v(标记“尝试登录”);
utente=(EditText)findViewById(R.id.etUtente);
passwd=(EditText)findViewById(R.id.etPassword);
字符串username=utete.getText().toString();
用户名=(“ccce@eex.it");
字符串密码=md5(passwd.getText().toString());
密码=md5(“12345”);
XMLFunctionsLogin.getInstance().setNewURL(“u=“+username+”&p=“+password”);
字符串xml=XMLFunctionsLogin.getXML();
Document doc=XMLFunctionsLogin.xmlFromString(xml);
int status=XMLFunctionsLogin.errStatus(doc);
Log.v(“status”,Integer.toString(status));
如果((状态==0)){
NodeList节点=doc.getElementsByTagName(“登录”);
元素e=(元素)节点。项(0);
中尉中尉=新中尉();
setidute(XMLFunctionsLogin.getValue(e,“idute”);
setNome(XMLFunctionsLogin.getValue(e,“nome”);
setCognome(XMLFunctionsLogin.getValue(e,“cognome”);
Log.v(“utete”,utete.getCognome().toString());
列表nvps=新阵列列表(2);
添加(新的BasicNameValuePair(“Utene”,用户名));
添加(新的BasicNameValuePair(“密码”,password));
Log.v(TAG,nvps.get(0.toString());
Log.v(TAG,nvps.get(1.toString());
//成功登录后,将用户名和密码存储在SharedReferences中
SharedReferences.Editor=mPreferences.edit();
编辑器.putString(“用户名”,用户名);
编辑器.putString(“密码”,password);
putString(“idute”,utinte.getidute());
editor.putString(“nome”,utete.getNome());
editor.putString(“cognome”,utite.getCognome());
commit();
Log.v(标签“计时器”);
Log.v(“RESET”,Boolean.toString(MenuPagina.RESET));
/*
螺纹t=新螺纹(st);
t、 start();
*/
sessionTimer=新线程(){
@凌驾
公开募捐{
long tId=Thread.currentThread().getId();
Log.w(“TTthread Id”,Long.toString(tId));
对于(int i=30;i>=0;i-=1){
if((i==0)| |(MenuPagina.reset)){
系统输出打印(“计时器finito”);
日志(