繁体   English   中英

setOnClickListener 错误 Null 对象

[英]setOnClickListener error Null object

我看到很多和我一样的问题
我尝试修复我的代码但失败了...
这是我的代码:

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  

问题是什么?

你错过了

 setContentView(R.layout.yourlayout);

在视图初始化之前的onCreate(...)

之后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();
        }
    });

承诺会理解,而不仅仅是复制它并忘记它:-)

setContentView(YOUR_LAYOUT)

onCreate()方法中的super(savedinstate)方法之后。

喜欢。

protected void onCreate(Bundle savedInstanceState) 
{

    super.onCreate(savedInstanceState);
    setContentView(YOUR_LAYOUT_HERE);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM