1
我是android新手,所以任何建议都会非常有帮助。android:通过php连接mysql(WAMP设置) - 应用程序崩溃
我想通过PHP连接Mysql,但应用程序在尝试连接时崩溃。
private class ProcessLogin extends AsyncTask<String, String, JSONObject> {
private ProgressDialog pDialog;
String email,password;
@Override
protected void onPreExecute() {
super.onPreExecute();
inputEmail = (EditText) findViewById(R.id.email);
inputPassword = (EditText) findViewById(R.id.pword);
email = inputEmail.getText().toString();
password = inputPassword.getText().toString();
pDialog = new ProgressDialog(login.this);
pDialog.setTitle("Contacting Servers");
pDialog.setMessage("Logging in ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
protected JSONObject doInBackground(String... args) {
UserFunctions userFunction = new UserFunctions();
JSONObject json = userFunction.loginUser(email, password);
return json;
}
下的DB_CONFIG文件是这样的:
define('DB_USER', "root"); // db user
define('DB_PASSWORD', ""); // db password (mention your db password here)
define('DB_DATABASE', "aap1"); // database name
define('DB_SERVER', "localhost"); // db server
我加入数据库中的表项。
此外,函数调用如下:
public JSONObject loginUser(String email, String password){
// Building Parameters
List<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>();
params.add(new BasicNameValuePair("tag", Custlogin_tag));
params.add(new BasicNameValuePair("email", email));
params.add(new BasicNameValuePair("password", password));
JSONObject json = jsonParser.getJSONFromUrl(loginURL, params);
return json;
}
private static String loginURL = "http://127.0.0.1/app1/index.php";
下面是logcat的:
10-07 23:22:40.596: E/Buffer Error(2003): Error converting result java.lang.NullPointerException: lock == null
10-07 23:22:40.676: E/JSON Parser(2003): Error parsing data org.json.JSONException: End of input at character 0 of
10-07 23:22:40.766: E/AndroidRuntime(2003): FATAL EXCEPTION: main
10-07 23:22:40.766: E/AndroidRuntime(2003): Process: com.example.app1, PID: 2003
10-07 23:22:40.766: E/AndroidRuntime(2003): java.lang.NullPointerException
10-07 23:22:40.766: E/AndroidRuntime(2003): at com.example.app1.login$ProcessLogin.onPostExecute(login.java:180)
10-07 23:22:40.766: E/AndroidRuntime(2003): at com.example.aap1.login$ProcessLogin.onPostExecute(login.java:1)
10-07 23:22:40.766: E/AndroidRuntime(2003): at android.os.AsyncTask.finish(AsyncTask.java:632)
10-07 23:22:40.766: E/AndroidRuntime(2003): at android.os.AsyncTask.access$600(AsyncTask.java:177)
10-07 23:22:40.766: E/AndroidRuntime(2003): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
10-07 23:22:40.766: E/AndroidRuntime(2003): at android.os.Handler.dispatchMessage(Handler.java:102)
10-07 23:22:40.766: E/AndroidRuntime(2003): at android.os.Looper.loop(Looper.java:136)
10-07 23:22:40.766: E/AndroidRuntime(2003): at android.app.ActivityThread.main(ActivityThread.java:5017)
10-07 23:22:40.766: E/AndroidRuntime(2003): at java.lang.reflect.Method.invokeNative(Native Method)
10-07 23:22:40.766: E/AndroidRuntime(2003): at java.lang.reflect.Method.invoke(Method.java:515)
10-07 23:22:40.766: E/AndroidRuntime(2003): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
10-07 23:22:40.766: E/AndroidRuntime(2003): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
10-07 23:22:40.766: E/AndroidRuntime(2003): at dalvik.system.NativeStart.main(Native Method)
JSON解析器如下:
`public JSONObject getJSONFromUrl(String url, List<?> params) {
// Making HTTP request
try {
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity
((List<? extends NameValuePair>) params));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}`
和PHP脚本:
`if ($tag == 'login') {
// Request type is check Login
$email = $_POST['email'];
$password = $_POST['password'];
// check for user
$user = $db->getUserByEmailAndPassword($email, $password);
if ($user != false) {
// user found
// echo json with success = 1
$response["success"] = 1;
$response["user"]["email"] = $user["email"];
$response["user"]["uname"] = $user["username"];
$response["user"]["uid"] = $user["unique_id"];
$response["user"]["created_at"] = $user["created_at"];
echo json_encode($response);
} else {
// user not found
// echo json with error = 1
$response["error"] = 1;
$response["error_msg"] = "Incorrect email or password!";
echo json_encode($response);
}`
和DB函数为:
` public function getUserByEmailAndPassword($email, $password) {
$result = mysqli_query("SELECT * FROM users WHERE email = '$email'")
or die(mysqli_error());
// check for result
$no_of_rows = mysqli_num_rows($result);
if ($no_of_rows > 0) {
$result = mysqli_fetch_array($result);
$salt = $result['salt'];
$encrypted_password = $result['encrypted_password'];
$hash = $this->checkhashSSHA($salt, $password);
// check for password equality
if ($encrypted_password == $hash) {
// user authentication details are correct
return $result;
}
} else {
// user not found
return false;
}
}`
我已经测试通过testmysql.php数据库连接,这是罚款。
把你jsonParser类,php脚本也 – 2014-10-08 05:56:47
我已经加入了要求的一部分。请参阅上面的更新。 – Puneet7nov 2014-10-08 18:48:51
在调试的时候,我发现用户函数loginUser没有获取电子邮件和密码的值。 params.add(新的BasicNameValuePair(“tag”,Custlogin_tag)); params.add(new BasicNameValuePair(“email”,email));请帮忙 !!! – Puneet7nov 2014-10-08 19:47:28