android — Retrofit 2.0 GET параметр @Query НЕ передается в PHP $ GET [& quot; & quot;];

Я новичок в Retrofit 2.0 и пытаюсь решить эту проблему в течение последних нескольких дней без какого-либо прогресса. У меня есть рабочий код, который использует Retrofit 2.0 для того, чтобы заполнить обзор повторов действий Android с помощью данных JSON, извлеченных из базы данных SQL с помощью сценария PHP.

Изучив множество различных постов и руководств, я изменил вышеописанный рабочий код, чтобы разрешить отправку выбранной даты datePicker в скрипт PHP через Retrofit’s GET @Query Parameter внутри класса интерфейса Retrofit и перехватывается $selected_date = $GET["date"]; внутри скрипта PHP.

Если я установлю значение внутри selected_date_lectures.php, как это => $selected_date = "2017-04-22"; данные успешно извлекаются обратно в просмотр при выборе datePicker. Также дата DatePicker также успешно отображается с помощью тоста при выборе.

Это заставляет меня поверить, что я должен делать что-то не так при выполнении запроса Retrofit Get @Query или при попытке получить параметр @query из PHP с помощью $GET["date"]; хотя я не вижу ничего, что могло бы быть неправильным в моем коде.

У меня закончились идеи для решения этой проблемы, и я был бы очень признателен за любые предложения.

Ниже приведен фрагмент кода из метода onDataSet DatePicker, который используется, когда HTTP-запрос запускается при выбранной дате.

@Override

public void onDateSet(DatePickerDialog view, int Year, int Month, int Day) {

// For some reason selected month's output is previous month
Month +=1;

// Selected date is formated in the same manner as DB's date which will be compared to find a match.
String date = Year + "-" + String.format("%02d", Month) + "-" + String.format("%02d", Day);

swipeRefreshLayout.setRefreshing(true);

ApiInterface apiService =
ApiClient.getClient().create(ApiInterface.class);

// Selected date from date picker is added to apiService.getSelectedDateLectures(date);

Call<List<Message>> call = apiService.getSelectedDateLectures(date);

call.enqueue(new Callback<List<Message>>() {

@Override
public void onResponse(Call<List<Message>> call, Response<List<Message>> response) {

// clear the inbox
messages.clear();

swipeRefreshLayout.setRefreshing(false);

// add all the messages
// messages.addAll(response.body());

// TODO - avoid looping
// the loop was performed to add colors to each message

for (Message message : response.body()) {
// generate a random color
// message.setColor(getRandomMaterialColor("400"));
messages.add(message);

}mAdapter.notifyDataSetChanged();
swipeRefreshLayout.setRefreshing(false);

}

@Override
public void onFailure(Call<List<Message>> call, Throwable t) {
Toast.makeText(getApplicationContext(), "Unable to fetch json: " + t.getMessage(), Toast.LENGTH_LONG).show();
swipeRefreshLayout.setRefreshing(false);
}});

Toast.makeText(MainActivity.this, date, Toast.LENGTH_LONG).show();
}

ApiClient.java — здесь создается HTTP-запрос интерфейса.

import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;public class ApiClient {

public static final String BASE_URL = "http://lankabentara.tech/FC6P01/android_sign_attendance/";

private static Retrofit retrofit = null;

public static Retrofit getClient() {
if (retrofit == null) {
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
}

ApiInterface.java — это то место, где пишутся все сетевые запросы.

import info.codex.app.model.Message;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Query;

public interface ApiInterface {

// HTTP OPERATION => Fetch today's lectures
@GET("today_lectures.php")
Call<List<Message>> getInbox();

// HTTP OPERATION => Fetch selected date's lectures
@GET("selected_date_lectures.php")
Call<List<Message>> getSelectedDateLectures(@Query("date") String date);
}

selected_date_lectures.php — Наконец, в третьей строке я пытаюсь получить параметр даты, используя $ GET [«date»];

<?php
ini_set('date.timezone', 'Europe/London');

$selected_date =  $GET["date"];

$host="localhost"; //replace with database hostname
$username="user"; //replace with database username
$password="password"; //replace with database password
$db_name="db_name"; //replace with database name

$con=mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
//include("user_control.php");
session_start();

$uid = $_SESSION['user'];

$sql = "select users.id,
degree.degree_id,
degree.degree_title,
modules.module_id,
modules.degree_id,
modules.title,
LectureRoom.code,
LectureRoom.date,
LectureRoom.time,
LectureRoom.end_time
from LectureRoom
JOIN modules ON modules.module_id = LectureRoom.module_id
JOIN degree ON degree.degree_id = modules.degree_id
JOIN users ON users.degree_id = degree.degree_id
WHERE users.id = '32' AND DATE(LectureRoom.date)= '$selected_date'; ";

$result = mysql_query($sql);
$json = array();

if(mysql_num_rows($result)){
while($row=mysql_fetch_assoc($result)){
$json[]=$row;
}
}
mysql_close($con);
echo json_encode($json);
?>

На данный момент любая помощь будет высоко ценится. Заранее спасибо.

2

Решение

$ selected_date = $ GET [«date»];

Так должно быть $_GET не $GET, так:

$selected_date = $_GET["date"];

Обязательный RTM Вот. Также рассмотрим error_reporting(E_ALL); пока вы развиваетесь.

1

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

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

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