用户注册空指针异常

时间:2014-05-26 05:09:56

标签: android apache authentication nullpointerexception

我正在Android中使用后端MySQL构建一个聊天应用程序,PHP并在本地网络上运行Apache。但是,当使用尝试注册时,LogCat在第112行的“public void run()”处显示Nullpoint错误。

我已经多次查看了代码,但无法找到为什么零点错误仍然存​​在......任何想法?

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.baidar.androidChatter.interfacer.Manager;
import com.baidar.androidChatter.serve.MessagingService;


public class SigningUp extends Activity {

    private static final int FILL_ALL_FIELDS = 0;
    protected static final int TYPE_SAME_PASSWORD_IN_PASSWORD_FIELDS = 1;
    private static final int SIGN_UP_FAILED = 9;
    private static final int SIGN_UP_USERNAME_CRASHED = 3;
    private static final int SIGN_UP_SUCCESSFULL = 4;
    protected static final int USERNAME_AND_PASSWORD_LENGTH_SHORT = 5;


    //private static final String SERVER_RES_SIGN_UP_FAILED = "0";
    private static final String SERVER_RES_RES_SIGN_UP_SUCCESFULL = "1";
    private static final String SERVER_RES_SIGN_UP_USERNAME_CRASHED = "2";



    private EditText usernameText;
    private EditText passwordText;
    private EditText eMailText;
    private EditText passwordAgainText;
    private Manager imService;
    private Handler handler = new Handler();

    private ServiceConnection mConnection = new ServiceConnection() {


        public void onServiceConnected(ComponentName className, IBinder service) {
            // This is called when the connection with the service has been
            // established, giving us the service object we can use to
            // interact with the service.  Because we have bound to a explicit
            // service that we know is running in our own process, we can
            // cast its IBinder to a concrete class and directly access it.
            imService = ((MessagingService.IMBinder)service).getService();  


        }

        public void onServiceDisconnected(ComponentName className) {
            // This is called when the connection with the service has been
            // unexpectedly disconnected -- that is, its process crashed.
            // Because it is running in our same process, we should never
            // see this happen.
            imService = null;
            Toast.makeText(SigningUp.this, R.string.local_service_stopped,
                    Toast.LENGTH_SHORT).show();
        }
    };

    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);    



            setContentView(R.layout.signingup);
            setTitle("Sign up");

            Button signUpButton = (Button) findViewById(R.id.signUp);
            Button cancelButton = (Button) findViewById(R.id.cancel_signUp);
            usernameText = (EditText) findViewById(R.id.userName);
            passwordText = (EditText) findViewById(R.id.password);  
            passwordAgainText = (EditText) findViewById(R.id.passwordAgain);  
            eMailText = (EditText) findViewById(R.id.email);

            signUpButton.setOnClickListener(new OnClickListener(){
                public void onClick(View arg0) 
                {                       
                    if (usernameText.length() > 0 &&        
                        passwordText.length() > 0 && 
                        passwordAgainText.length() > 0 &&
                        eMailText.length() > 0
                        )
                    {
                        //TODO check email address is valid

                        if (passwordText.getText().toString().equals(passwordAgainText.getText().toString())){

                            if (usernameText.length() >= 5 && passwordText.length() >= 5) {

                                    Thread thread = new Thread(){
                                        String result = new String();
                                        @Override
                                        public void run() {
                                            result = imService.signUpUser(usernameText.getText().toString(), 
                                                    passwordText.getText().toString(), 
                                                    eMailText.getText().toString());

                                            handler.post(new Runnable(){

                                                public void run() {
                                                    if (result.equals(SERVER_RES_RES_SIGN_UP_SUCCESFULL)) {
                                                        Toast.makeText(getApplicationContext(),R.string.signup_successfull, Toast.LENGTH_LONG).show();
                                                        //showDialog(SIGN_UP_SUCCESSFULL);
                                                    }
                                                    else if (result.equals(SERVER_RES_SIGN_UP_USERNAME_CRASHED)){
                                                        Toast.makeText(getApplicationContext(),R.string.signup_username_crashed, Toast.LENGTH_LONG).show();
                                                        //showDialog(SIGN_UP_USERNAME_CRASHED);
                                                    }
                                                    else  //if (result.equals(SERVER_RES_SIGN_UP_FAILED)) 
                                                    {
                                                        Toast.makeText(getApplicationContext(),R.string.signup_failed, Toast.LENGTH_LONG).show();
                                                        //showDialog(SIGN_UP_FAILED);
                                                    }           
                                                }

                                            });
                                        }

                                    };
                                    thread.start();
                            }
                            else{
                                Toast.makeText(getApplicationContext(),R.string.username_and_password_length_short, Toast.LENGTH_LONG).show();
                                //showDialog(USERNAME_AND_PASSWORD_LENGTH_SHORT);
                            }                           
                        }
                        else {
                            Toast.makeText(getApplicationContext(),R.string.signup_type_same_password_in_password_fields, Toast.LENGTH_LONG).show();
                            //showDialog(TYPE_SAME_PASSWORD_IN_PASSWORD_FIELDS);
                        }

                    }
                    else {
                        Toast.makeText(getApplicationContext(),R.string.signup_fill_all_fields, Toast.LENGTH_LONG).show();
                        //showDialog(FILL_ALL_FIELDS);

                    }               
                }           
            });

            cancelButton.setOnClickListener(new OnClickListener(){
                public void onClick(View arg0) 
                {                       
                    finish();                   
                }               
            });


        }


    protected Dialog onCreateDialog(int id) 
    {       

        switch (id) 
        {
            case TYPE_SAME_PASSWORD_IN_PASSWORD_FIELDS:         
                return new AlertDialog.Builder(SigningUp.this)       
                .setMessage(R.string.signup_type_same_password_in_password_fields)
                .setPositiveButton(R.string.OK, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        /* User clicked OK so do some stuff */
                    }
                })        
                .create();          
            case FILL_ALL_FIELDS:               
                return new AlertDialog.Builder(SigningUp.this)       
                .setMessage(R.string.signup_fill_all_fields)
                .setPositiveButton(R.string.OK, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        /* User clicked OK so do some stuff */
                    }
                })        
                .create();
            case SIGN_UP_FAILED:
                return new AlertDialog.Builder(SigningUp.this)       
                .setMessage(R.string.signup_failed)
                .setPositiveButton(R.string.OK, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        /* User clicked OK so do some stuff */
                    }
                })        
                .create();
            case SIGN_UP_USERNAME_CRASHED:
                return new AlertDialog.Builder(SigningUp.this)       
                .setMessage(R.string.signup_username_crashed)
                .setPositiveButton(R.string.OK, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        /* User clicked OK so do some stuff */
                    }
                })        
                .create();
            case SIGN_UP_SUCCESSFULL:
                return new AlertDialog.Builder(SigningUp.this)       
                .setMessage(R.string.signup_successfull)
                .setPositiveButton(R.string.OK, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        finish();
                    }
                })        
                .create();  
            case USERNAME_AND_PASSWORD_LENGTH_SHORT:
                return new AlertDialog.Builder(SigningUp.this)       
                .setMessage(R.string.username_and_password_length_short)
                .setPositiveButton(R.string.OK, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        /* User clicked OK so do some stuff */
                    }
                })        
                .create();
            default:
                return null;

        }


    }

    @Override
    protected void onResume() {
        bindService(new Intent(SigningUp.this, MessagingService.class), mConnection , Context.BIND_AUTO_CREATE);

        super.onResume();
    }

    @Override
    protected void onPause() 
    {
        unbindService(mConnection);
        super.onPause();
    }



}

1 个答案:

答案 0 :(得分:0)

嘿,你的问题是因为ImService对象。它在onResume方法中的声明只是将它移动到你的onCreate,因为onresume方法之前的oncreate调用和你的imService对象在oncreate中使用。

bindService(new Intent(SigningUp.this,MessagingService.class),mConnection,Context.BIND_AUTO_CREATE);

将此行放在buttononclicklistner之前。

相关问题