2014-04-23 57 views
1

运行我的应用程序时,我去点击注册按钮,应用程序崩溃。请在下面找到Log-cat(如果任何人都可以解释使用log-cat的最佳方式,那就太好了),我还包括了注册Java。如果有更多信息需要评论,我会更新此消息。当我点击注册表时,我的android应用程序崩溃btn

04-23 21:52:07.835: D/libEGL(28588): loaded /system/lib/egl/libEGL_mali.so 
04-23 21:52:07.875: D/libEGL(28588): loaded /system/lib/egl/libGLESv1_CM_mali.so 
04-23 21:52:07.885: D/libEGL(28588): loaded /system/lib/egl/libGLESv2_mali.so 
04-23 21:52:07.895: E/(28588): Device driver API match 
04-23 21:52:07.895: E/(28588): Device driver API version: 23 
04-23 21:52:07.895: E/(28588): User space API version: 23 
04-23 21:52:07.895: E/(28588): mali: REVISION=Linux-r3p2-01rel3 BUILD_DATE=Wed Oct 9 21:05:57 KST 2013 
04-23 21:52:08.000: D/OpenGLRenderer(28588): Enabling debug mode 0 
04-23 21:52:24.925: D/AndroidRuntime(28588): Shutting down VM 
04-23 21:52:24.925: W/dalvikvm(28588): threadid=1: thread exiting with uncaught exception (group=0x41ba8700) 
04-23 21:52:24.930: E/AndroidRuntime(28588): FATAL EXCEPTION: main 
04-23 21:52:24.930: E/AndroidRuntime(28588): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.loggedin/com.loggedin.Register}: java.lang.NullPointerException 
04-23 21:52:24.930: E/AndroidRuntime(28588): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2295) 
04-23 21:52:24.930: E/AndroidRuntime(28588): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349) 
04-23 21:52:24.930: E/AndroidRuntime(28588): at android.app.ActivityThread.access$700(ActivityThread.java:159) 
04-23 21:52:24.930: E/AndroidRuntime(28588): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316) 
04-23 21:52:24.930: E/AndroidRuntime(28588): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-23 21:52:24.930: E/AndroidRuntime(28588): at android.os.Looper.loop(Looper.java:176) 
04-23 21:52:24.930: E/AndroidRuntime(28588): at android.app.ActivityThread.main(ActivityThread.java:5419) 
04-23 21:52:24.930: E/AndroidRuntime(28588): at java.lang.reflect.Method.invokeNative(Native Method) 
04-23 21:52:24.930: E/AndroidRuntime(28588): at java.lang.reflect.Method.invoke(Method.java:525) 
04-23 21:52:24.930: E/AndroidRuntime(28588): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046) 
04-23 21:52:24.930: E/AndroidRuntime(28588): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862) 
04-23 21:52:24.930: E/AndroidRuntime(28588): at dalvik.system.NativeStart.main(Native Method) 
04-23 21:52:24.930: E/AndroidRuntime(28588): Caused by: java.lang.NullPointerException 
04-23 21:52:24.930: E/AndroidRuntime(28588): at com.loggedin.Register.onCreate(Register.java:83) 
04-23 21:52:24.930: E/AndroidRuntime(28588): at android.app.Activity.performCreate(Activity.java:5372) 
04-23 21:52:24.930: E/AndroidRuntime(28588): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104) 
04-23 21:52:24.930: E/AndroidRuntime(28588): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2257) 

以下代码是注册页面

包com.loggedin;

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Context; 
import android.content.Intent; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 
import com.loggedin.internal.DatabaseHandler; 
import com.loggedin.internal.UserFunctions; 
import org.json.JSONException; 
import org.json.JSONObject; 
import java.io.IOException; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 

public class Register extends Activity { 
/** 
* JSON Response node names. 
**/ 
private static String KEY_SUCCESS = "success"; 
private static String KEY_UID = "id"; 
private static String KEY_FIRSTNAME = "FirstName"; 
private static String KEY_LASTNAME = "LastName"; 
private static String KEY_USERNAME = "Username"; 
private static String KEY_EMAIL = "email"; 
private static String KEY_DOB = "DOB"; 
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 inputDOB; 
EditText inputPassword; 
Button btnRegister; 
TextView registerErrorMsg; 
/** 
* Called when the activity is first created. 
*/ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_register); 
/** 
* Defining all layout items 
**/ 
    inputFirstName = (EditText) findViewById(R.id.FirstName); 
    inputLastName = (EditText) findViewById(R.id.LastName); 
    inputUsername = (EditText) findViewById(R.id.Username); 
    inputEmail = (EditText) findViewById(R.id.email); 
    inputDOB = (EditText) findViewById(R.id.DOB); 
    inputPassword = (EditText) findViewById(R.id.Password); 
    btnRegister = (Button) findViewById(R.id.registerbtn1); 
    registerErrorMsg = (TextView) findViewById(R.id.register_error); 
    /** 
* Button which Switches back to the login screen on clicked 
**/ 
    Button login = (Button) findViewById(R.id.bktologinbtn); 
    login.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) { 
      Intent myIntent = new Intent(view.getContext(), Login.class); 
      startActivityForResult(myIntent, 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 view) { 
     if ( (!inputUsername.getText().toString().equals("")) && (  !inputPassword.getText().toString().equals("")) && (!inputFirstName.getText().toString().equals("")) && (!inputLastName.getText().toString().equals("")) && (!inputDOB.getText().toString().equals("")) && (!inputEmail.getText().toString().equals(""))) 
      { 
       if (inputUsername.getText().toString().length() > 4){ 
       InternetAsync(view); 
       } 
       else 
       { 
        Toast.makeText(getApplicationContext(), 
       "Username should be minimum 5 characters", Toast.LENGTH_SHORT).show(); 
       } 
      } 
      else 
      { 
       Toast.makeText(getApplicationContext(), 
         "One or more fields are empty", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }); 
    } 
/** 
* Async Task to check whether internet connection is working 
**/ 
    private class InternetCheck extends AsyncTask<String, Boolean, Boolean> { 
    private ProgressDialog nDialog; 
    @Override 
    protected void onPreExecute(){ 
     super.onPreExecute(); 
     nDialog = new ProgressDialog(Register.this); 
     nDialog.setMessage("Loading.."); 
     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) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       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"); 
     } 
    } 
} 
    private class ProcessRegister extends AsyncTask <String, String, JSONObject>{ 
    /** 
* Defining Process dialog 
**/ 
    private ProgressDialog pDialog; 
    String email,Password,FirstName,LastName,DOB,Username; 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     inputUsername = (EditText) findViewById(R.id.Username); 
     inputPassword = (EditText) findViewById(R.id.Password); 
      FirstName = inputFirstName.getText().toString(); 
      LastName = inputLastName.getText().toString(); 
      email = inputEmail.getText().toString(); 
      DOB = inputDOB.getText().toString(); 
      Username= inputUsername.getText().toString(); 
      Password = inputPassword.getText().toString(); 
     pDialog = new ProgressDialog(Register.this); 
     pDialog.setTitle("Contacting Servers"); 
     pDialog.setMessage("Registering ..."); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(true); 
     pDialog.show(); 
    } 
    @Override 
    protected JSONObject doInBackground(String... args) { 
    UserFunctions userFunction = new UserFunctions(); 
    JSONObject json = userFunction.registerUser(FirstName, LastName, DOB, email, Username, Password); 
     return json; 
    } 
    @Override 
    protected void onPostExecute(JSONObject json) { 
    /** 
    * Checks for success message. 
    **/ 
      try { 
       if (json.getString(KEY_SUCCESS) != null) { 
        registerErrorMsg.setText(""); 
        String res = json.getString(KEY_SUCCESS); 
        String red = json.getString(KEY_ERROR); 
        if(Integer.parseInt(res) == 1){ 
         pDialog.setTitle("Getting Data"); 
         pDialog.setMessage("Loading Info"); 
         registerErrorMsg.setText("Successfully Registered"); 
         DatabaseHandler db = new DatabaseHandler(getApplicationContext()); 
         JSONObject json_user = json.getJSONObject("user"); 
         /** 
         * Removes all the previous data in the SQlite database 
         **/ 
         UserFunctions logout = new UserFunctions(); 
         logout.logoutUser(getApplicationContext()); 
         db.addUser(json_user.getString(KEY_FIRSTNAME),json_user.getString(KEY_LASTNAME),json_user.getString(KEY_EMAIL),json_user.getString(KEY_USERNAME),json_user.getString(KEY_UID),json_user.getString(KEY_CREATED_AT)); 
         /** 
         * Stores registered data in SQlite Database 
         * Launch Registered screen 
         **/ 
      Intent registered = new Intent(getApplicationContext(),Registered.class); 
         /** 
         * Close all views before launching Registered screen 
         **/ 
         registered.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
         pDialog.dismiss(); 
         startActivity(registered); 
          finish(); 
        } 
        else if (Integer.parseInt(red) ==2){ 
         pDialog.dismiss(); 
         registerErrorMsg.setText("User already exists"); 
        } 
        else if (Integer.parseInt(red) ==3){ 
         pDialog.dismiss(); 
         registerErrorMsg.setText("Invalid Email id"); 
        } 
       } 
        else{ 
        pDialog.dismiss(); 
         registerErrorMsg.setText("Error occured in registration"); 
        } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
    public void InternetAsync(View view){ 
     new InternetCheck().execute(); 
    } 
    } 

回答

2

正如迈克已经说过,调试器可以真正帮助您找到问题。 在这种情况下,该行是:

btnRegister.setOnClickListener(new View.OnClickListener() { 

问题是,当你使用findViewById:

public View findViewById (int id) 
Added in API level 1 
Finds a view that was identified by the id attribute from the XML that was processed in onCreate(Bundle). 

Returns 
The view if found or null otherwise. 

这意味着findViewById返回一个空指针:)所以,请检查您的ID在XML布局。

+2

好的,我打算这么说,但是当我输完后你已经发布了这个。 :) 但迈克是正确的:你应该学习如何使用Logcat调试器。 – felixd

3

一些建议使用logcat的时候...

E/AndroidRuntime(28588):产生的原因:显示java.lang.NullPointerException
E/AndroidRuntime(28588):在 com.loggedin .Register.onCreate(Register.java:83

你总是可以做一个快速的文本检索检查引起的。你可以找出你出错的地方.Logcat也显示错误发生在哪里o在你的案例#83。

我建议考虑如何使用调试器正常过,这是很重要的:

0

的错误是显而易见的,PPL正确,所述使用调试器和logcat的关于..

反正以下是我的看法: - 1. PLZ交叉检查你的XML文件activity_register.xml DAT它具有你的ID在这里使用。

  1. 由于误差在按钮的onclick事件,然后尝试使用试图捕获异常中点击数的一切 - 抓也用来包围的try-catch里面全按一下按钮。添加两个具有不同消息的Toast以确定引发异常的位置。

  2. 也可以简单地添加日志消息像这样Log.e(“IS_REGISTER_BUTTON_NULL”,“价值:”+ btnRegister)在创建后获得ID如果它不是空它会写一些字符,然后空。同时删除onlick内的所有内容,并查看每个字符串的值,例如

String uName = inputUsername.getText()。的toString(); String pWd = inputPassword.getText()。toString(); 。 。 。 (“CHECKING_IF_STRING_ARE_NULL”,uName +“”+ pWd +“”+ eMail + .....);

thx

相关问题