1

我正在尝试使我的 android 应用程序与 php 站点一起工作。我有存储有关用户的信息的数据库,例如用户 ID、密码等。但是当我从 mainactivity 应用程序中单击登录按钮时会停止。

我的 login.java 如下

    public class Login extends Activity {

    Button home,login;
    EditText uname,pword;
    Context context;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        getActionBar().setDisplayHomeAsUpEnabled(true);
        addListenerOnHome();
        addListenerOnBtnlogin();   //this is line 42

        uname = (EditText) findViewById(R.id.txtuserid);
        pword = (EditText) findViewById(R.id.txtuserpass);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_login, menu);
        return true;
    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                NavUtils.navigateUpFromSameTask(this);
                return true;
        }
        return super.onOptionsItemSelected(item);
    }

    public void addListenerOnHome() {
        final Context context = this;
        home = (Button)findViewById(R.id.btnhome);
        home.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(context,MainActivity.class);
                startActivity(intent);   
            }
        });
    }

    public void addListenerOnBtnlogin() {
        context = this;
        final String username = uname.getText().toString();   //this is line 79        
        final String password = pword.getText().toString();

        login = (Button)findViewById(R.id.btnlogin);
        login.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Thread t = new Thread() {
                    public void run() {
                        postLoginData(username,password);
                    }
                };
                t.start();
            }
        });
    }

    private void postLoginData(String username,String password) {

        try {
            // Create a new HttpClient and Post Header
            HttpClient httpclient = new DefaultHttpClient();
            Log.e("Response-->", "after httpclient");

            HttpPost httppost = new HttpPost("http://10.0.2.2/dealnow/login.php");
            Log.e("Response-->", "after httppost");


            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
            nameValuePairs.add(new BasicNameValuePair("username", username));
            nameValuePairs.add(new BasicNameValuePair("password", password));

            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            Log.e("Responce-->", "after using the list name pair");

            // Execute HTTP Post Request
            Log.w("SENCIDE", "Execute HTTP Post Request");
            HttpResponse response = httpclient.execute(httppost);
            Log.e("Responce-->", "after execute the http response");
            String str = EntityUtils.toString(response.getEntity(), HTTP.UTF_8);

            if (str.toString().equalsIgnoreCase("true")) {

                runOnUiThread(new Runnable() {
                    public void run() {
                        Intent intent = new Intent(context,MainActivity.class);
                        startActivity(intent);

                    }
                });


            } else {
                runOnUiThread(new Runnable() {
                    public void run() {
                        //notlogged in

                    }
                });
            }

        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

和 login.php 是

<?php
$host="localhost"; // Host name
$username="root"; // Mysql username
$password=""; // Mysql password
$db_name="user"; // Database name
$tbl_name="user_det"; // Table name

// Connect to server and select databse.
mysql_connect("$host","$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

// username and password sent from form
$myusername=$_POST['username'];
$mypassword=$_POST['password'];

// To protect MySQL injection
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$sql="SELECT * FROM $tbl_name WHERE user_id='$myusername' and 
app_pass='$mypassword'";

$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);

// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){
echo "true";
}
else {
echo "Login Failed";
}
?>

和 logcat 显示

04-29 03:16:11.355: D/dalvikvm(454): GC_FOR_ALLOC freed 30K, 3% free 7683K/7879K, paused 56ms
04-29 03:16:11.365: I/dalvikvm-heap(454): Grow heap (frag case) to 8.065MB for 495616-byte allocation
04-29 03:16:11.546: D/dalvikvm(454): GC_FOR_ALLOC freed <1K, 3% free 8166K/8391K, paused 83ms
04-29 03:16:11.765: D/dalvikvm(454): GC_CONCURRENT freed 1K, 3% free 8173K/8391K, paused 5ms+14ms
04-29 03:16:11.805: D/AndroidRuntime(454): Shutting down VM
04-29 03:16:11.805: W/dalvikvm(454): threadid=1: thread exiting with uncaught exception (group=0x40014760)
04-29 03:16:11.825: E/AndroidRuntime(454): FATAL EXCEPTION: main
04-29 03:16:11.825: E/AndroidRuntime(454): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test/com.example.test.Login}: java.lang.NullPointerException
04-29 03:16:11.825: E/AndroidRuntime(454):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1736)
04-29 03:16:11.825: E/AndroidRuntime(454):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1752)
04-29 03:16:11.825: E/AndroidRuntime(454):  at android.app.ActivityThread.access$1500(ActivityThread.java:123)
04-29 03:16:11.825: E/AndroidRuntime(454):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:993)
04-29 03:16:11.825: E/AndroidRuntime(454):  at android.os.Handler.dispatchMessage(Handler.java:99)
04-29 03:16:11.825: E/AndroidRuntime(454):  at android.os.Looper.loop(Looper.java:126)
04-29 03:16:11.825: E/AndroidRuntime(454):  at android.app.ActivityThread.main(ActivityThread.java:3997)
04-29 03:16:11.825: E/AndroidRuntime(454):  at java.lang.reflect.Method.invokeNative(Native Method)
04-29 03:16:11.825: E/AndroidRuntime(454):  at java.lang.reflect.Method.invoke(Method.java:491)
04-29 03:16:11.825: E/AndroidRuntime(454):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
04-29 03:16:11.825: E/AndroidRuntime(454):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
04-29 03:16:11.825: E/AndroidRuntime(454):  at dalvik.system.NativeStart.main(Native Method)
04-29 03:16:11.825: E/AndroidRuntime(454): Caused by: java.lang.NullPointerException
04-29 03:16:11.825: E/AndroidRuntime(454):  at com.example.test.Login.addListenerOnBtnlogin(Login.java:79)
04-29 03:16:11.825: E/AndroidRuntime(454):  at com.example.test.Login.onCreate(Login.java:42)
04-29 03:16:11.825: E/AndroidRuntime(454):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
04-29 03:16:11.825: E/AndroidRuntime(454):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1700)
04-29 03:16:11.825: E/AndroidRuntime(454):  ... 11 more
04-29 03:16:14.684: I/Process(454): Sending signal. PID: 454 SIG: 9
4

1 回答 1

2

我可能错了,但我认为它正在发生,因为您试图在从 XML 布局文件正确btnLogin listener 引用它们之前获取 EditTexts的值。

首先正确定义引用,使用findViewById(..)然后调用监听器。

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        getActionBar().setDisplayHomeAsUpEnabled(true);
        uname = (EditText) findViewById(R.id.txtuserid);
        pword = (EditText) findViewById(R.id.txtuserpass);

        addListenerOnHome();
        addListenerOnBtnlogin();  
    }
于 2013-04-28T22:26:36.580 回答