Android, PHP и MySQL: URLConnection нет маршрута к хосту

Я следил за этим основным руководство изучить Android, PHP и MySQL.

Поскольку я следовал, я также адаптировал код в соответствии со своими потребностями.

Пока что все работает отлично, и я предполагаю, что мой код корректен (в любом случае на стороне клиента), так как приложение работает нормально, и в logcat не появляются ошибки Java. Единственная проблема, с которой я столкнулся в данный момент, заключается в следующем:

libcore.io.ErrnoException: isConnected failed: EHOSTUNREACH (No route to host)

Когда я нажимаю кнопку входа в систему, она проходит через весь метод до конца.

Вот мой код LoginActivity.java:

public class LoginActivity extends AppCompatActivity {
public static final int CONNECTION_TIMEOUT = 10000;
public static final int READ_TIMEOUT = 15000;
EditText emailLogin, passwordLogin;
Button buttonLogin, buttonRegisterLink;
TextView numberAttemptsLeft;
int counter = 3;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
emailLogin = (EditText)findViewById(R.id.email_login);
passwordLogin = (EditText)findViewById(R.id.password_login);
buttonLogin = (Button)findViewById(R.id.button_login);
buttonRegisterLink = (Button)findViewById(R.id.button_register_link);
numberAttemptsLeft = (TextView)findViewById(R.id.numberAttemptsLeft);
numberAttemptsLeft.setVisibility(View.GONE);

// method calls
login();
linkToRegisterScreen();
}

public void login() {
final String email = emailLogin.getText().toString();
final String password = passwordLogin.getText().toString();

buttonLogin.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
new AsyncLogin().execute(email,password);
}
});
}

private class AsyncLogin extends AsyncTask<String, String, String>
{
ProgressDialog loading = new ProgressDialog(LoginActivity.this);
HttpURLConnection connection;
URL url = null;

@Override
protected void onPreExecute() {
super.onPreExecute();
loading.setMessage("\tLoading...");
loading.setCancelable(false);
loading.show();
}

@Override
protected String doInBackground(String... params) {
try {
url = new URL("http://myIPaddress/api/login.php");
} catch (MalformedURLException e) {
e.printStackTrace();
return "exception";
}
try {
connection = (HttpURLConnection)url.openConnection();
connection.setReadTimeout(READ_TIMEOUT);
connection.setConnectTimeout(CONNECTION_TIMEOUT);
connection.setRequestMethod("POST");
connection.setDoInput(true);
connection.setDoOutput(true);

Uri.Builder builder = new Uri.Builder()
.appendQueryParameter("email", params[0])
.appendQueryParameter("password", params[1]);
String query = builder.build().getEncodedQuery();

OutputStream os = connection.getOutputStream();
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8"));
writer.write(query);
writer.flush();
writer.close();
os.close();
connection.connect();
} catch (IOException e1) {
e1.printStackTrace();
return "exception";
}

try {
int response_code = connection.getResponseCode();

if (response_code == HttpURLConnection.HTTP_OK) {
InputStream input = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
StringBuilder result = new StringBuilder();
String line;

while ((line = reader.readLine()) != null) {
result.append(line);
}
return(result.toString());
}else{
return("unsuccessful");
}
} catch (IOException e) {
e.printStackTrace();
return "exception";
} finally {
connection.disconnect();
}
}

@Override
protected void onPostExecute(String result) {
loading.dismiss();

if(result.equalsIgnoreCase("true"))
{
Intent intent = new Intent(getApplicationContext(), DashboardActivity.class);
startActivity(intent);
finish();
} else if (result.equalsIgnoreCase("false")){
Toast.makeText(getApplicationContext(), "Invalid Email or Password.", Toast.LENGTH_LONG).show();
} else if (result.equalsIgnoreCase("exception") || result.equalsIgnoreCase("unsuccessful")) {
Toast.makeText(getApplicationContext(), "Something else went wrong.", Toast.LENGTH_LONG).show();
}
}
}

}

Я использую WAMP, и папка «api» сохраняется в папке «www». login.php сохраняется в папке «api».

Я попробовал решения, предложенные на этом сообщение но мне не повезло.

Заранее спасибо.

РЕДАКТИРОВАТЬ: код из моих двух файлов PHP на случай, если это поможет.

configuration.php (под api / include)

<?php
$servername = "localhost";
$username = "user";
$password = "pass";
$database = "db";

try {
$conn = new PDO("mysql:host = $servername; dbname = $db", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
die("Server Error.");
}
?>

login.php (под api)

<?php
include 'configuration.php';

// check whether or not the email or password is set from android
if(isset($_POST['email']) && isset($_POST['password']))
{
// initialize variables
$result='';
$email = $_POST['email'];
$password = $_POST['password'];

// query database
$sql = 'SELECT * FROM clients WHERE email = :email AND password = :password';
$stmt = $conn->prepare($sql);
$stmt->bindParam(':email', $email, PDO::PARAM_STR);
$stmt->bindParam(':password', $password, PDO::PARAM_STR);
$stmt->execute();

// if else statement
if($stmt->rowCount())
{
$result="true";
}
elseif(!$stmt->rowCount())
{
$result="false";
}

// send the result back to android
echo $result;
}
?>

0

Решение

Я полагаю, что-то не так с сервером, который делает его недоступным. Получаете ли вы ответ сервера или он выдает ошибку? Где выдается исключение?

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]