2014-08-30 79 views
0

我的代码是:空指针异常的onClick

public class Register extends Activity { 

    // JSON Response node names 
    private static String KEY_SUCCESS = "success"; 
    private static String KEY_UID = "uid"; 
    private static String KEY_FIRSTNAME = "fname"; 
    private static String KEY_LASTNAME = "lname"; 
    private static String KEY_USERNAME = "uname"; 
    private static String KEY_EMAIL = "email"; 
    private static String KEY_CREATED_AT = "created_at"; 
    private static String KEY_ERROR = "error"; 

    // Defining layout items 
    EditText inputFirstName; 
    EditText inputLastName; 
    EditText inputUsername; 
    EditText inputEmail; 
    EditText inputPassword; 
    Button btnRegister; 
    TextView registerErrorMsg; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_register); 

     // Defining all layout items 
     inputFirstName = (EditText) findViewById(R.id.fname); 
     inputLastName = (EditText) findViewById(R.id.lname); 
     inputUsername = (EditText) findViewById(R.id.uname); 
     inputPassword = (EditText) findViewById(R.id.pword); 
     btnRegister = (Button) findViewById(R.id.register); 
     registerErrorMsg = (TextView)findViewById(R.id.register_error); 

     // Button which Switches back to the login screen on clicked 
     Button login = (Button) findViewById(R.id.bktologin); 
     login.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent i = new Intent(v.getContext(), LoginActivity.class); 
       startActivityForResult(i, 0); 
       finish(); 
      } 
     }); 

     // Register Button click event. A toast is set to alert when the fields are empty 
     // Another toast is set to alert Username must be 5 characters. 
     btnRegister.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 



       if ((!inputUsername.getText().toString().equals("")) && (!inputPassword.getText().toString().equals("")) && (!inputFirstName.getText().toString().equals("")) && (!inputLastName.getText().toString().equals("")) && (!inputEmail.getText().toString().equals(""))) { 
        Log.e(KEY_ERROR, "Pride do kle4"); 
        if (inputUsername.getText().toString().length() > 4) { 
         Log.e(KEY_ERROR, "Pride do kle2"); 
         NetAsync (v); 
        } 
        else { 
         Log.e(KEY_ERROR, "Pride do kle3"); 
         Toast.makeText(getApplicationContext(), 
           "Username should be minimum 5 characters", Toast.LENGTH_SHORT).show(); 
        } 
       } else { 
        Log.e(KEY_ERROR, "Pride do kle5"); 
        Toast.makeText(getApplicationContext(), 
          "One or more fields are empty", Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }); 
    } 

    // Async Task to check whether internet connection is working 
    private class NetCheck extends AsyncTask<String, Void, Boolean> { 
     private ProgressDialog nDialog; 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      nDialog = new ProgressDialog(Register.this); 
      nDialog.setMessage("Loadig..."); 
      nDialog.setTitle("Checking Network"); 
      nDialog.setIndeterminate(false); 
      nDialog.setCancelable(true); 
      nDialog.show(); 
     } 

     @Override 
     protected Boolean doInBackground(String... args) { 
      // Gets current device state and checks for working internet connection by trying Google 
      ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
      NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
      if (netInfo != null && netInfo.isConnected()) { 
       try { 
        URL url = new URL("http://www.google.com"); 
        HttpURLConnection urlc = (HttpURLConnection) url.openConnection(); 
        urlc.setConnectTimeout(3000); 
        urlc.connect(); 
        if (urlc.getResponseCode() == 200) { 
         return true; 
        } 
       } catch (MalformedURLException e1) { 
        e1.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
      return false; 
     } 

     @Override 
     protected void onPostExecute(Boolean th) { 
      if (th == true) { 
       nDialog.dismiss(); 
       new ProcessRegister().execute(); 
      } else { 
       nDialog.dismiss(); 
       registerErrorMsg.setText("Error in Network Connection"); 
      } 
     } 
    } 

,我得到这个错误:

08-30 17:11:41.155 26407-26407/com.knedl.testloginapp W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x418adda0) 
08-30 17:11:41.155 26407-26407/com.knedl.testloginapp E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.knedl.testloginapp, PID: 26407 
    java.lang.NullPointerException 
      at com.knedl.testloginapp.Register$2.onClick(Register.java:85) 
      at android.view.View.performClick(View.java:4640) 
      at android.view.View$PerformClick.run(View.java:19425) 
      at android.os.Handler.handleCallback(Handler.java:733) 
      at android.os.Handler.dispatchMessage(Handler.java:95) 
      at android.os.Looper.loop(Looper.java:146) 
      at android.app.ActivityThread.main(ActivityThread.java:5593) 
      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:1283) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 
      at dalvik.system.NativeStart.main(Native Method) 
+0

我会改变'如果((!inputUsername.getText()。的toString()。等于( “”))&& ...'和如果(inputUsername.length()<1 && ...' – 2014-08-30 15:59:51

回答

2

inputEmail似乎并没有被初始化。

1

你忘了初始化inputEmail下面的代码

​​
+1

我同意,只是发现它,但你更快。作者,错误发生的原因是你的onClick你检查是否所有的字段在他们的价值,而inputEmail声明,但未初始化。 – 2014-08-30 16:06:44

+0

谢谢,我多么愚蠢:) – jump 2014-08-30 16:09:12

+0

@Dawid Czerwinski是的,你的是对的 – Jamil 2014-08-30 16:15:20