2015-06-22 5 views
-4

Я видел много вопросов, как у меня
, и я пытаюсь исправить свои коды, но не удалось ...
это мой код:ошибка setOnClickListener Null объект

public class MainActivity extends ActionBarActivity { 
EditText usernameEditText; 
EditText passwordEditText; 
public Button saveme; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 


    usernameEditText = (EditText) findViewById(R.id.username); 
    passwordEditText = (EditText) findViewById(R.id.pass); 

    saveme = (Button) findViewById(R.id.loginn); 
    saveme.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      try{ 
       String givenUsername = usernameEditText.getEditableText().toString(); 
       String givenPassword = passwordEditText.getEditableText().toString(); 
       // CALL GetText method to make post method call 
       HttpClient httpclient = new DefaultHttpClient(); 
       HttpPost httppost = new HttpPost("http://fb.facenegah.com/android/login.php"); 
       List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
       nameValuePairs.add(new BasicNameValuePair("email", givenUsername)); 
       nameValuePairs.add(new BasicNameValuePair("pass", givenPassword)); 
       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
       HttpResponse response = httpclient.execute(httppost); 
       HttpEntity entity = response.getEntity(); 
       String responseText = EntityUtils.toString(entity); 
       Toast bread = Toast.makeText(getApplicationContext(), responseText, Toast.LENGTH_LONG); 
       bread.show(); 
      } 
      catch(Exception ex) 
      { 
       // content.setText(" url exeption! "); 
      } 
     } 
    }); 

и это мой XML

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:text="ایمیل/شناسه کاربری" 
    android:id="@+id/textView" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="30dp" /> 

<EditText 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/username" 
    android:width="150dp" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="60dp" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:text="رمز عبور" 
    android:id="@+id/textView2" 
    android:layout_below="@+id/username" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="23dp" /> 

<EditText 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:inputType="textPassword" 
    android:ems="10" 
    android:id="@+id/pass" 
    android:layout_below="@+id/textView2" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="10dp" 
    android:width="150dp" /> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="ورود" 
    android:id="@+id/loginn" 
    android:layout_below="@+id/pass" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="15dp" /> 

Но я получаю эту ошибку:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference 

В чем проблема?

+0

1. Вы пропустили 'setContentView'. 2. Сетевой вызов на нити ui. 3. использование устаревшего метода – Raghunandan

+0

У вас нет настройки макета, пожалуйста, установите Макет для Activity как setContentView (R.layout.main); –

+0

да, сэр, спасибо – user1772630

ответ

0

После super.onCreate(savedInstanceState); вставки setContentView(R.layout.YourLayout);

вам нужно сделать запрос на сервер в другом потоке. Это может выглядеть

public class LoginTask extends AsyncTask<Void, Void, String>{ 
     private String username; 
     private String password; 
     private Context context; 

     public LoginTask(Context context, String username, String password) { 
      this.username = username; 
      this.password = password; 
      this.context = context; 
     } 

     @Override 
     protected String doInBackground(Void... voids) { 
      try{ 
       HttpClient httpclient = new DefaultHttpClient(); 
       HttpPost httppost = new HttpPost("http://fb.facenegah.com/android/login.php"); 
       List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
       nameValuePairs.add(new BasicNameValuePair("email", username)); 
       nameValuePairs.add(new BasicNameValuePair("pass", password)); 
       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
       HttpResponse response = httpclient.execute(httppost); 
       HttpEntity entity = response.getEntity(); 
       String responseText = EntityUtils.toString(entity); 
       return responseText; 
      } 
      catch(Exception ex) 
      { 

      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(String s) { 
      super.onPostExecute(s); 
      if(s != null) { 
       Toast bread = Toast.makeText(context, s, Toast.LENGTH_LONG); 
       bread.show(); 
      } 
     } 
    } 

Далее, вам потребуется изменить кнопку обработчик

saveme.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      String givenUsername = usernameEditText.getEditableText().toString(); 
      String givenPassword = passwordEditText.getEditableText().toString(); 
      new LoginTask(MainActivity.this, givenUsername, givenPassword).execute(); 
     } 
    }); 

обещание, что будет понимать, а не просто скопировать его и забыть :-)

+0

позвольте мне проверить его ... спасибо – user1772630

+0

его работа сейчас, но когда я нажимаю на эту кнопку, отмечая, что это происходит – user1772630

+0

@ user1772630 не соответствует вашему коду. Вы не можете выполнять сетевую операцию на нити ui. также вам нужно использовать HttpUrlConnection. http://developer.android.com/reference/org/apache/http/client/HttpClient.html – Raghunandan

2

Вы пропустили

setContentView(R.layout.yourlayout); 

в onCreate(...) перед тем View инициализируется

0

использования

setContentView(YOUR_LAYOUT) 

после super(savedinstate) способ в onCreate() способ.

подобный.

protected void onCreate(Bundle savedInstanceState) 
{ 

    super.onCreate(savedInstanceState); 
    setContentView(YOUR_LAYOUT_HERE); 
} 
Смежные вопросы