Есть ли способ получить доступ к базе данных AWS RDS по URL-адресу StringRequest в приложении android? - PullRequest
0 голосов
/ 07 мая 2020

Я новичок в серверной системе и изо всех сил пытаюсь заставить систему входа работать в приложении android, которое я разрабатываю.

Я подключил базу данных RDS к серверу AWS EC2, но у меня нет идея, как получить доступ к базе данных RDS с помощью приложения.

Вот класс, который я использую для сервера:

publi c class ValidateRequest расширяет StringRequest {

final static private String URL = "https://localhost/UserValidate.php";
private Map<String, String> parameters;

//    send parameter values to database by posting method
public ValidateRequest(String userID, Response.Listener<String> listener) {
    super(Method.POST, URL, listener, null);
    parameters = new HashMap<>();
    parameters.put("userID",userID);
}

@Override
protected Map<String, String> getParams(){
    return parameters;
}

}

Когда программа выполняется, она не отображает никаких сообщений об ошибках. Я думаю, что моя переменная URL установлена ​​неправильно, но не знаю, как это исправить. Кто-нибудь может подсказать, что здесь делать?

мои php файлы находятся на удаленном сайте / var / www/html. Любая помощь будет оценена по достоинству.

1 Ответ

1 голос
/ 30 июня 2020

Я понимаю, что это опоздание на месяц, но я предполагаю, что это будет полезно для всех, у кого есть такая же проблема. В этом ответе предполагается, что вы выполнили необходимые настройки группы безопасности для экземпляра rds (например, сделали его общедоступным, хотя я бы рекомендовал сделать это только для целей разработки).

В этом ответе также используется залп, хотя и с использованием синглтона класс для очереди запросов.

Решение -

1. PHP файл констант. (Объявите константы базы данных)

define ('DB_HOST',  'aws rds access point goes here');

define ('DB_USER', 'rds user name goes here ' );

define ('DB_PASSWORD', 'rds password goes here ');

2. PHP Файл подключения. (Инициировать соединение)

require_once "constants.php";

$con = new mysqli(DB_HOST,DB_USER,DB_PASSWORD);
if($con)
{

 $sql = "SQL Query";

 $result = mysqli_query($con,$sql);

 //Whatever you echo here will be treated as the response at the android end
 //Can be JSON,string etc.

}

3. Java файл. (Инициировать строковый запрос в android)

Это пример того, как это выглядело бы, если бы вы пытались регистрировать пользователей в своем приложении.

 private void login(final String emailText, final String passText) {
        final StringRequest request = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Toast.makeText(getApplicationContext(),error.toString(),Toast.LENGTH_SHORT).show();
                System.out.println("Error is " + error.toString());
            }
        })
        {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map <String,String> params  = new HashMap<String,String>();

                params.put(Constants.KEY_EMAIL,emailText);
                params.put(Constants.KEY_PASSWORD,passText);

                return params;
            }
        };
        MySingleton.getInstance(this).addToRequestQueue(request);
    }

4. Java одноэлементный класс. (Рекомендуется использовать, если вы делаете много запросов)

public class MySingleton {
    private static MySingleton instance;
    private RequestQueue requestQueue;
    private ImageLoader imageLoader;
    private static Context ctx;

    private MySingleton(Context context) {
        ctx = context;
        requestQueue = getRequestQueue();

        imageLoader = new ImageLoader(requestQueue,
                new ImageLoader.ImageCache() {
                    private final LruCache<String, Bitmap>
                            cache = new LruCache<String, Bitmap>(20);

                    @Override
                    public Bitmap getBitmap(String url) {
                        return cache.get(url);
                    }

                    @Override
                    public void putBitmap(String url, Bitmap bitmap) {
                        cache.put(url, bitmap);
                    }
                });
    }

    public static synchronized MySingleton getInstance(Context context) {
        if (instance == null) {
            instance = new MySingleton(context);
        }
        return instance;
    }

    public RequestQueue getRequestQueue() {
        if (requestQueue == null) {
            // getApplicationContext() is key, it keeps you from leaking the
            // Activity or BroadcastReceiver if someone passes one in.
            requestQueue = Volley.newRequestQueue(ctx.getApplicationContext());
        }
        return requestQueue;
    }

    public <T> void addToRequestQueue(Request<T> req) {
        getRequestQueue().add(req);
    }

    public ImageLoader getImageLoader() {
        return imageLoader;
    }
}
...