2013-11-14 88 views
0

我現在編輯它...我檢查佈局和初始化,但仍然是相同的錯誤..它可能是月食錯誤?Android導致:java.lang.NullPointerException

public class ActivityOwner extends Activity implements OnClickListener { 

     EditText ownerUser, ownerPass; 
     private Button btnLogin; 
     private ProgressDialog pDialog; 
     JSONParser jsonParser = new JSONParser(); 

     private static final String OWNER_LOGIN_URL = "http://192.168.2.5/idot/owner_login.php"; 

     // ---JSON element ids from response of php script 
     private static final String TAG_SUCCESS = "success"; 
     private static final String TAG_MESSAGE = "message"; 

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

      ownerUser = (EditText) findViewById(R.id.owner_login_username); 
      ownerPass = (EditText) findViewById(R.id.owner_login_password); 

      TextView tvLinkToRegister = (TextView) findViewById(R.id.link_to_register); 
      tvLinkToRegister.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View view) { 
        // TODO Auto-generated method stub 
        Intent registrationForm = new Intent(ActivityOwner.this, 
          ActivityOwnerRegister.class); 
        startActivity(registrationForm); 
       } 
      }); 

      btnLogin = (Button) findViewById(R.id.btnOwnerLogin); 
      btnLogin.setOnClickListener(this); 
     } 

     @Override 
     public void onClick(View v) { 
      new AttemptLogin().execute(); 
     } 

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

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

      @Override 
      protected String doInBackground(String... args) { 

       // Check for success tag 
       int success; 
       String username = ownerUser.getText().toString(); 
       String password = ownerPass.getText().toString(); 

       try { 
        // Building Parameters 
        List<NameValuePair> params = new ArrayList<NameValuePair>(); 
        params.add(new BasicNameValuePair("owner_username", username)); 
        params.add(new BasicNameValuePair("owner_password", password)); 

        Log.d("request!", "starting"); 
        // getting product details by making HTTP request 
        JSONObject json = jsonParser.makeHttpRequest(OWNER_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(ActivityOwner.this); 
         Editor edit = sp.edit(); 
         edit.putString("owner_username", username); 
         edit.commit(); 

         Intent i = new Intent(ActivityOwner.this, 
           ActivityOwnerSuccessLogin.class); 
         pDialog.dismiss(); 
         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; 
      } 

      @Override 
      protected void onPostExecute(String result) { 
       // dismiss the dialog once product deleted 
       pDialog.dismiss(); 
       if (result != null) { 
        Toast.makeText(ActivityOwner.this, result, Toast.LENGTH_SHORT) 
          .show(); 
       } 
      } 

     } 
    } 

------ logcat的-------

11-14 21:30:52.517: E/AndroidRuntime(18929): Caused by: java.lang.NullPointerException 
11-14 21:30:52.517: E/AndroidRuntime(18929): at ph.idot.owner.ActivityOwner$AttemptLogin.doInBackground(ActivityOwner.java:88) 
+0

你在哪裏設置'user'?它可能是'null'。 – nfechner

+0

「用戶」變量可能爲空,因此您無法成功調用getText()。 – Kuffs

+0

如何聲明並初始化「用戶」? – Avijit

回答

7

形式爲A.B.C的行上的空指針異常意味着點左側的某些內容爲null。在本例中:

  • 或者A爲空;
  • 或A.B爲空。

可能沒有其他原因。因此,由於textView.getText()永遠不會返回null,唯一的可能性是user爲空。

+0

即使您沒有在editText上輸入任何內容,getText是否可以使用? – rAyso7

+0

當然,這隻會是空的。看看文檔。對於這樣一種常見的方法,空值會非常煩人。 – Snicolas

+0

@Snicolas +1:重要知識.. !!今天幫助我 –

1

按照給你的問題的信息,我假設你EditText用戶沒有完全初始化。請檢查一下。

0

我有這個問題,我努力解決它很多,只要意見不關你的看法變量的名稱是類似於您的視圖的ID。說

 Button btnA,btnB; 
     @Override 
     public void onCreate(Bundle savedInstanceState){ 
     ............... 
     .............. 
     //DO NOT USE button1 = (Button)findViewById(R.id.button1) ; 
     //use 
     btnA = (Button)findViewById(R.id.button1) ; 
1

我也面臨同樣的問題,但它是個好消息:) 我的問題已經解決了。

我的問題是與Button01的void OnCreate下。

在我的活動

<Button 
    android:id="@+id/button01" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:enabled="false"/> 

在我的代碼

Button btnYes; 

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

    btnYes = (Button) findViewById(R.id.button01); 

    try{ 
      btnYes.setEnabled(true); 

    } 
    catch(Exception ex){ 

    } 
} 

我的觀察

的onCreate期間;代碼搜索按鈕,可能仍然可以創建。使用try將處理這個null異常。

如果你面對與TextView,EditText等其他控件相同的問題,那麼你可以把它們放在'try'裏面。

希望它能幫助你解決你的問題。

如果解決了然後享受....... :) :) :)

+0

謝謝!能夠用您提供的一般信息弄清楚。我的按鈕代碼壞了。 – Andy

相關問題