PHP-аутентификация в Android и получение json

У меня есть сервер, на котором хранится файл Json, и он защищен простой авторизацией php, и когда я ввожу пароль и логин, файл Json открывается сразу, но вот вопрос, который я хочу проанализировать этот Json в приложении Android и для этого мне нужно сделать метод авторизации, чтобы иметь доступ к файлу json. Я хочу сделать так, чтобы при входе в приложения я авторизовался и показывал JSon в ListView. Как я могу это сделать? Помогите, пожалуйста.

Вот мой код Activity_Main.java

public class Activity_Main extends AppCompatActivity implements NetworkMainAdapter.ContactsAdapterListener {
    private static final String TAG = MainActivity.class.getSimpleName();
    private RecyclerView recyclerView;
    private List<NetworkMAIN> contactList;
    private NetworkMainAdapter mAdapter;
    private SearchView searchView;

    // url to fetch contacts json
    private static final String URL = "http://site.ru/json.php";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        // toolbar fancy stuff
        //getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setTitle(R.string.toolbar_title);

        recyclerView = findViewById(R.id.recycler_view);
        contactList = new ArrayList<>();
        mAdapter = new NetworkMainAdapter(this, contactList, this);

        // white background notification bar
        whiteNotificationBar(recyclerView);

        RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
        recyclerView.setLayoutManager(mLayoutManager);
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        recyclerView.addItemDecoration(new MyDividerItemDecoration(this, DividerItemDecoration.VERTICAL, 36));
        recyclerView.setAdapter(mAdapter);

        fetchContacts();
    }

    /**
     * fetches json by making http calls
     */
    private void fetchContacts() {
        JsonArrayRequest request = new JsonArrayRequest(URL,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        if (response == null) {
                            Toast.makeText(getApplicationContext(), "Couldn't fetch the contacts! Pleas try again.", Toast.LENGTH_LONG).show();
                            return;
                        }

                        List<NetworkMAIN> items = new Gson().fromJson(response.toString(), new TypeToken<List<NetworkMAIN>>() {
                        }.getType());

                        // adding contacts to contacts list
                        contactList.clear();
                        contactList.addAll(items);

                        // refreshing recycler view
                        mAdapter.notifyDataSetChanged();
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                // error in getting json
                Log.e(TAG, "Error: " + error.getMessage());
                Toast.makeText(getApplicationContext(), "Error: " + error.getMessage(), Toast.LENGTH_SHORT).show();
            }
        });

        MyApplication.getInstance().addToRequestQueue(request);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.search, menu);

        // Associate searchable configuration with the SearchView
        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        searchView = (SearchView) menu.findItem(R.id.action_search)
                .getActionView();
        searchView.setSearchableInfo(searchManager
                .getSearchableInfo(getComponentName()));
        searchView.setMaxWidth(Integer.MAX_VALUE);

        // listening to search query text change
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                // filter recycler view when query submitted
                mAdapter.getFilter().filter(query);
                return false;
            }

            @Override
            public boolean onQueryTextChange(String query) {
                // filter recycler view when text is changed
                mAdapter.getFilter().filter(query);
                return false;
            }
        });
        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_search) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }



    private void whiteNotificationBar(View view) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            int flags = view.getSystemUiVisibility();
            flags |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
            view.setSystemUiVisibility(flags);
            getWindow().setStatusBarColor(Color.WHITE);
        }
    }

    @Override
    public void onContactSelected(NetworkMAIN contact) {
        //Toast.makeText(getApplicationContext(), "Selected: " + contact.getLocation() + ", " + contact.getMain(), Toast.LENGTH_LONG).show();
    }
}

и вот мой PHP-код index.php, а data.php - это файл JSon

<?php
    session_start();
    echo isset($_SESSION['login']);
    if (isset($_SESSION['login'])) {
      header('LOCATION:index.php'); die();
    }
?>
<!DOCTYPE html>
<html>
   <head>
     <meta http-equiv='content-type' content='text/html;charset=utf-8' />
     <title>Login</title>
     <meta charset = "utf-8">
     <meta name = "viewport" content = "width=device-width, initial-scale=1">
     <link rel = "stylesheet" href = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
   </head>
<body>
  <div class = "container">
    <h3 class = "text-center">Login</h3>
    <?php
      if (isset($_POST['submit'])){
        $username = $_POST['username']; $password = $_POST['password'];
        if ($username === 'admin' && $password === 'admin'){
          $_SESSION['login'] = true; header('LOCATION:data.php'); die();
        } {
          echo "<div class='alert alert-danger'>Username and Password do not match.</div>";
        }

      }
    ?>
    <form action = "" method = "post">
      <div class = "form-group">
        <label for = "username">Username:</label>
        <input type = "text" class = "form-control" id = "username" name = "username" required>
      </div>
      <div class = "form-group">
        <label for = "pwd">Password:</label>
        <input type = "password" class = "form-control" id = "pwd" name = "password" required>
      </div>
      <button type = "submit" name = "submit" class = "btn btn-default">Login</button>
    </form>
  </div>
</body>
</html>

Отправьте запрос к файлу, который проверяет учетные данные, и, если они действительны, верните файл JSON в качестве ответа и в своем Java проанализируйте его new JSONObject или new JSONArray или любой другой метод, который у вас есть для чтения JSON.

Script47 20.09.2018 10:34

Как правило, у вас будет форма в вашем приложении Android, а не веб-представление, и сервер (PHP) будет использоваться для логики (проверьте учетные данные, отправленные из формы Android с запросом).

Script47 20.09.2018 10:37

@ Script47 хм, ладно, братан, можешь дать мне примеры или инструкции?

Sergey Petrosyan 20.09.2018 10:45

Нет. Написание примера вашего приложения потребует слишком много времени / кода. Вместо этого вы можете попробовать это, используя мое описание потока сверху, и задать другой вопрос, если возникнут какие-либо проблемы.

Script47 20.09.2018 10:48
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
70
0

Другие вопросы по теме