я пытаюсь сделать логин на Android с помощью loopj asynctask для ссылки на базу данных, но у меня есть проблемы. Похоже, что JSONObject не работает. Помоги мне проверить, если я делаю ошибку. Вот мой код
package com.truparsecreative.uimobile;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.RequestParams;
import org.json.JSONException;
import org.json.JSONObject;
public class login extends ActionBarActivity {
public EditText username, password;
public Button login_button;
ProgressDialog progress;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
username = (EditText) findViewById(R.id.username);
password = (EditText) findViewById(R.id.password);
//login_button = (Button) findViewById(R.id.login);
progress = new ProgressDialog(this);
progress.setMessage("Connecting...");
progress.setCancelable(false);
}
public void loginUser(View view) {
String user = username.getText().toString();
String pass = password.getText().toString();
RequestParams params = new RequestParams();
if (user != "" && pass != "") {
params.put("username", user);
params.put("password", pass);
invokeWS(params);
} else {
Toast.makeText(getApplicationContext(), "Matric and Password cannot be empty", Toast.LENGTH_LONG).show();
}
}
public void invokeWS(RequestParams params) {
progress.show();
AsyncHttpClient client = new AsyncHttpClient();
client.post("http://10.0.2.2/uimobile/app/android/login.php", params, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(String content) {
super.onSuccess(content);
progress.hide();
try {
JSONObject jsonObject = new JSONObject(content);
String mat = jsonObject.getString("matric");
if (mat !=null)
{
Intent loginIntent = new Intent(getApplicationContext(), profile.class);
loginIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(loginIntent);
finish();
}
} catch (JSONException e) {
Toast.makeText(getApplicationContext(), "Error Occured [Server's JSON response might be invalid]!", Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}
@Override
public void onFailure(int statusCode, Throwable error,String content) {
//super.onFailure(error, content);
progress.hide();
if (statusCode == 404) {
Toast.makeText(getApplicationContext(), "Requested resource not found", Toast.LENGTH_LONG).show();
} else if (statusCode == 500) {
Toast.makeText(getApplicationContext(), "Something went wrong at server end", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getApplicationContext(), "Unexpected Error occcured! [Most common Error: Device might not be connected to Internet or remote server is not up and running]", Toast.LENGTH_LONG).show();
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_login, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
и код login.php
<?php require_once('connect.php');
$username = $_POST['username'];
$password = $_POST['password'];
$c_login = mysql_query("SELECT * FROM users WHERE matric = '$username' AND password = '$password'");
if (mysql_num_rows($c_login)>0)
{
echo "Correct Details";
//$output = array();
$content = mysql_fetch_array($c_login);
$output = array(
'matric'=> $content['matric'],
'password'=> $content['password'],
'email'=> $content['email']
);
print json_encode($output);
}
else
{
echo "Username and password didn't match".mysql_error();
}
?>
В своем PHP-коде вы делаете это перед отправкой объекта JSON:
echo "Correct Details";
Из-за этой строки ваш PHP-код не отправляет допустимый объект JSON в приложение Android.
Результат из сценария PHP будет иметь следующий формат:
Correct Details
{
matric: "some value",
password: "some value",
email: "some value"}
Который не является допустимым объектом JSON из-за первой строки Correct Details
произведено echo "Correct Details";
Других решений пока нет …