2014-09-25 105 views
0

我想爲PHP和MYSQL的android做一個登錄應用程序,但它每當我啓動它崩潰。我看過類似的問題,但我仍然不能查明錯誤Android崩潰:零點異常

logcat的報告

09-25 15:34:07.722: E/AndroidRuntime(2515): FATAL EXCEPTION: main 
09-25 15:34:07.722: E/AndroidRuntime(2515): Process: com.learn2crack.tab, PID: 2515 
09-25 15:34:07.722: E/AndroidRuntime(2515): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.learn2crack.tab/com.learn2crack.tab.Login}: java.lang.NullPointerException 
09-25 15:34:07.722: E/AndroidRuntime(2515):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195) 
09-25 15:34:07.722: E/AndroidRuntime(2515):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
09-25 15:34:07.722: E/AndroidRuntime(2515):  at android.app.ActivityThread.access$800(ActivityThread.java:135) 
09-25 15:34:07.722: E/AndroidRuntime(2515):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
09-25 15:34:07.722: E/AndroidRuntime(2515):  at android.os.Handler.dispatchMessage(Handler.java:102) 
09-25 15:34:07.722: E/AndroidRuntime(2515):  at android.os.Looper.loop(Looper.java:136) 
09-25 15:34:07.722: E/AndroidRuntime(2515):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
09-25 15:34:07.722: E/AndroidRuntime(2515):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-25 15:34:07.722: E/AndroidRuntime(2515):  at java.lang.reflect.Method.invoke(Method.java:515) 
09-25 15:34:07.722: E/AndroidRuntime(2515):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
09-25 15:34:07.722: E/AndroidRuntime(2515):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
09-25 15:34:07.722: E/AndroidRuntime(2515):  at dalvik.system.NativeStart.main(Native Method) 
09-25 15:34:07.722: E/AndroidRuntime(2515): Caused by: java.lang.NullPointerException 
09-25 15:34:07.722: E/AndroidRuntime(2515):  at com.learn2crack.tab.Login.onCreate(Login.java:76) 
09-25 15:34:07.722: E/AndroidRuntime(2515):  at android.app.Activity.performCreate(Activity.java:5231) 
09-25 15:34:07.722: E/AndroidRuntime(2515):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
09-25 15:34:07.722: E/AndroidRuntime(2515):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 

我login.java 包com.learn2crack.tab;

public class Login extends Activity implements OnClickListener { 

    private EditText user, pass; 
    private Button mSubmit, mRegister; 

    // Progress Dialog 
    private ProgressDialog pDialog; 

    // JSON parser class 
    JSONParser jsonParser = new JSONParser(); 

    // php login script location: 


    private static final String LOGIN_URL = "http://10.0.2.2/webservice/login.php"; 


    private static final String TAG_SUCCESS = "success"; 
    private static final String TAG_MESSAGE = "message"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_login); 

     // setup input fields 
     user = (EditText) findViewById(R.id.username); 
     pass = (EditText) findViewById(R.id.pword); 

     // setup buttons 
     mSubmit = (Button) findViewById(R.id.login); 
     mRegister = (Button) findViewById(R.id.register); 

     // register listeners 
     mSubmit.setOnClickListener(this); 
     mRegister.setOnClickListener(this); 

    } 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     switch (v.getId()) { 
     case R.id.login: 
      new AttemptLogin().execute(); 
      break; 
     case R.id.register: 
      Intent i = new Intent(this, Register.class); 
      startActivity(i); 
      break; 

     default: 
      break; 
     } 
    } 

    class AttemptLogin extends AsyncTask<String, String, String> { 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      pDialog = new ProgressDialog(Login.this); 
      pDialog.setMessage("Attempting login..."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(true); 
      pDialog.show(); 
     } 

     @Override 
     protected String doInBackground(String... args) { 
      // TODO Auto-generated method stub 
      // Check for success tag 
      int success; 
      String username = user.getText().toString(); 
      String password = pass.getText().toString(); 
      try { 
       // Building Parameters 
       List<NameValuePair> params = new ArrayList<NameValuePair>(); 
       params.add(new BasicNameValuePair("username", username)); 
       params.add(new BasicNameValuePair("password", password)); 

       Log.d("request!", "starting"); 
       // getting product details by making HTTP request 
       JSONObject json = jsonParser.makeHttpRequest(LOGIN_URL, "POST", 
         params); 

       // check your log for json response 
       Log.d("Login attempt", json.toString()); 

       // json success tag 
       success = json.getInt(TAG_SUCCESS); 
       if (success == 1) { 
        Log.d("Login Successful!", json.toString()); 
        // save user data 
        SharedPreferences sp = PreferenceManager 
          .getDefaultSharedPreferences(Login.this); 
        Editor edit = sp.edit(); 
        edit.putString("username", username); 
        edit.commit(); 

        Intent i = new Intent(Login.this, MainActivity.class); 
        finish(); 
        startActivity(i); 
        return json.getString(TAG_MESSAGE); 
       } else { 
        Log.d("Login Failure!", json.getString(TAG_MESSAGE)); 
        return json.getString(TAG_MESSAGE); 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

      return null; 

     } 

     protected void onPostExecute(String file_url) { 
      // dismiss the dialog once product deleted 
      pDialog.dismiss(); 
      if (file_url != null) { 
       Toast.makeText(Login.this, file_url, Toast.LENGTH_LONG).show(); 
      } 

     } 

    } 

} 

PHP腳本

$ _POST [ '用戶名'] ); try { $ stmt = $ db-> prepare($ query); $ result = $ stmt-> execute($ query_params); } catch(PDOException $ ex){ //對於測試,您可以使用骰子和消息。 // die(「無法運行查詢:」。$ ex-> getMessage()); //或者只是使用這個來產生JSON數據: $ response [「success」] = 0; // $ response [「message」] =「Database Error1。Please Try Again!」; die(json_encode($ response)); } //這將是確定用戶信息是否正確的變量。 //我們將它初始化爲false。 $ validated_info = false; //獲取查詢中的所有行 $ row = $ stmt-> fetch(); if($ row){ //如果我們加密了密碼,我們會在這裏解密它,但在我們的例子中我們只是 //比較兩個密碼 if($ _POST ['password'] === $ row ['password']){ $ login_ok = true; }} //如果用戶登錄成功,那麼我們將它們發送到私人會員制 頁//否則,我們顯示登錄失敗的消息,並再次顯示登錄表單 如果($ login_ok){ $ response [「success」] = 1; // $ response [「message」] =「登錄成功!」; die(json_encode($ response)); } else { $ response [「success」] = 0; // $ response [「message」] =「證書無效!」; die(json_encode($ response)); } }其他{ >

登錄

用戶名:


密碼:


註冊
+0

這行是76? – 2014-09-25 19:55:50

+1

看起來你的'Buttons'是'null'。檢查他們都在'activity_login.xml' – codeMagic 2014-09-25 19:58:26

回答

0

用一步一步的執行,並檢查您的resurces 。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_login); 

    // setup input fields 
    user = (EditText) findViewById(R.id.username); 
    pass = (EditText) findViewById(R.id.pword); 

    // setup buttons 
    mSubmit = (Button) findViewById(R.id.login); 
    mRegister = (Button) findViewById(R.id.register); 

    // register listeners 
    mSubmit.setOnClickListener(this); 
    mRegister.setOnClickListener(this); 

} 

在OnCreate上切換斷點。

檢查:

// setup buttons 
    mSubmit = (Button) findViewById(R.id.login); 
    mRegister = (Button) findViewById(R.id.register); 
+0

是的註冊按鈕不在xml文件中。多麼令人沮喪我已經處理了幾個月的android現在我仍然遇到基本的錯誤,比如這個很好,無論如何感謝大家的幫助 – user4068130 2014-09-25 20:17:29

+0

@ user4068130,所有的錯誤。有時它基本) – user3439968 2014-09-25 20:38:09