У меня есть сервер, на котором хранится файл 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>
Как правило, у вас будет форма в вашем приложении Android, а не веб-представление, и сервер (PHP) будет использоваться для логики (проверьте учетные данные, отправленные из формы Android с запросом).
@ Script47 хм, ладно, братан, можешь дать мне примеры или инструкции?
Нет. Написание примера вашего приложения потребует слишком много времени / кода. Вместо этого вы можете попробовать это, используя мое описание потока сверху, и задать другой вопрос, если возникнут какие-либо проблемы.






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