Java / Android JSON-запрос не обновляет полученные данные

У меня небольшая проблема с запросом PHP-файла из Activity.
Кажется, что данные обычно извлекаются из JSON, но, в конце концов, он показывает более старые данные, которые были там.
Имея это в виду, например, я делаю запрос, чтобы получить имя всех строк в таблице (MySQL).
Вначале он заряжается без каких-либо ошибок, но если я изменю строки в таблице, JSON все равно получит старые данные строки. Я не знаю, похоже, что оно было сохранено где-то в кэше, но я понятия не имею, что происходит не так.

Это один из моих запросов JSON в действии (это происходит во всех действиях, в которых я использую JSON), он должен вернуть массив всех строк и составить список с ними:

public class EventsListActivity extends ListActivity {

// Progress Dialog
private ProgressDialog pDialog;

// Creating JSON Parser object
JSONParser jParser = new JSONParser();

ArrayList<HashMap<String, String>> EventsList;

// url to get all products list
final private static String url_all_events = "http://easee.es/android_test/get_event_list.php";

// JSON Node names
private static final String TAG_SUCCESS     = "success";
private static final String TAG_EVENTS      = "events";
private static final String TAG_ID_CAT      = "id_cat";
private static final String TAG_TITLE       = "title";
private static final String TAG_FINISHED    = "finished";
private static final String TAG_NUM_PPL     = "num_ppl";

// products JSONArray
JSONArray events = null;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_event_list);

// Hashmap for ListView
EventsList = new ArrayList<HashMap<String, String>>();

// Cargando eventos en el background
new LoadAllEvents().execute();

//Click en el botón add_event
ImageView add_event = (ImageView) findViewById(R.id.add_event);
add_event.setOnClickListener(new OnClickListener() {
public void onClick(View v) {

//Si presionamos el botón añadir...
Intent i = new Intent(getApplicationContext(), Add_EventActivity.class);
startActivity(i);

}
});

// Cargar listview
ListView lv = getListView();

// Al seleccionar un evento
//Abrir el evento...
lv.setOnItemClickListener(new OnItemClickListener() {@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// getting values from selected ListItem
String id_cat = ((TextView) view.findViewById(R.id.id_cat)).getText()
.toString();
String num_ppl = ((TextView) view.findViewById(R.id.num_ppl)).getText()
.toString();

// Starting new intent
Intent in = new Intent(getApplicationContext(),
Event_Details.class);
// sending pid to next activity
in.putExtra(TAG_ID_CAT, id_cat);
in.putExtra(TAG_NUM_PPL, num_ppl);

// starting new activity and expecting some response back
startActivityForResult(in, 100);
}});

}

// Response from Edit Product Activity
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// if result code 100
if (resultCode == 100) {
// if result code 100 is received
// means user edited/deleted product
// reload this screen again
Intent intent = getIntent();
finish();
startActivity(intent);
}

}

/**
* Background Async Task to Load all product by making HTTP Request
* */
class LoadAllEvents extends AsyncTask<String, String, String> {

/**
* Before starting background thread Show Progress Dialog
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(EventsListActivity.this);
pDialog.setMessage(getString(R.string.LoadingData_Events));
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}

/**
* getting All products from url
* */
protected String doInBackground(String... args) {
// Building Parameters
List<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>();
// getting JSON string from URL
JSONObject json = jParser.makeHttpRequest(url_all_events, "GET", params);

// Check your log cat for JSON reponse
Log.d("Todos los eventos: ", json.toString());

try {
// Checking for SUCCESS TAG
int success = json.getInt(TAG_SUCCESS);

if (success == 1) {
// products found
// Getting Array of Events
events = json.getJSONArray(TAG_EVENTS);

// looping through All Events
for (int i = 0; i < events.length(); i++) {
JSONObject c = events.getJSONObject(i);

// Storing each json item in variable
String id_cat = c.getString(TAG_ID_CAT);
String title = c.getString(TAG_TITLE);
String finished = c.getString(TAG_FINISHED);
String num_ppl = c.getString(TAG_NUM_PPL)+" "+ getString(R.string.People_Attending);

// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();

// adding each child node to HashMap key => value
map.put(TAG_ID_CAT, id_cat);
map.put(TAG_TITLE, title);
map.put(TAG_FINISHED, finished);
map.put(TAG_NUM_PPL, num_ppl);

// adding HashList to ArrayList
EventsList.add(map);
}
} else {
// no products found
// Launch Add New product Activity
/*
Intent i = new Intent(getApplicationContext(),
NewProductActivity.class);
// Closing all previous activities
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
*/
}
} catch (JSONException e) {
e.printStackTrace();
}

return null;
}

/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(String file_url) {
// dismiss the dialog after getting all events
pDialog.dismiss();
// updating UI from Background Thread
runOnUiThread(new Runnable() {
public void run() {
/**
* Updating parsed JSON data into ListView
* */
ListAdapter adapter = new SimpleAdapter(
EventsListActivity.this, EventsList,
R.layout.event_row, new String[] { TAG_ID_CAT, TAG_TITLE, TAG_NUM_PPL },
new int[] { R.id.id_cat, R.id.title, R.id.num_ppl });
// updating listview
setListAdapter(adapter);
}
});

}

}
}

вот файл PHP:

<?php
// Incluir la conexión:
require_once 'db_connect.php';

// Creamos el array que pasaremos por JSON
$response = array();

// Obtenemos todos los eventos de la tabla "eventos"$result = $con->query('SELECT * FROM events');
$num_rows = mysqli_num_rows($result);
// Comprobamos si existe (hay al menos un resultado)
if (mysqli_num_rows($result) > 0) {

// El array donde almacenaremos los datos del evento
$response['events'] = array();

// Creamos un bucle mientras hayan resultados, es decir, eventos disponibles.
while ($row = mysqli_fetch_array($result)) {
// Datos sobre el evento para la Aplicación
$event = array();
$event['id_cat']    = $row['id_cat'];
$event['title']     = $row['title'];
$event['finished']  = $row['finished'];
$event['group_id']  = $row['group_id'];
$event['num_ppl']   = $row['num_ppl'];

// Obtener el número de participantes
$search_group = mysqli_fetch_array($con->query("SELECT *FROM groups WHERE `group_id` =
'".$event['group_id']."'"));;
$participantes = explode(",", $search_group['participants']);
$event["num_ppl"] = count($participantes);

// Crear el array
array_push($response['events'], $event);
}
// Exito
$response['success'] = 1;

// Enviamos la respuesta por JSON
echo json_encode($response);
} else {
// No se ha encontrado ningún evento.
$response['success'] = 0;
$response['message'] = "Todavía no has creado ningún evento.";

// Devolvemos el error por JSON
echo json_encode($response);
}
?>

0

Решение

Попробуйте этот метод, который я использую. я не знаю как JSONObject json = jParser.makeHttpRequest(url_all_events, "GET", params); работает.

@Override
protected Void doInBackground(String... params) {
HttpPost postMethod = new HttpPost("http://easee.es/android_test/get_event_list.php");
String response;
try {
response = new DefaultHttpClient().execute(postMethod, new BasicResponseHandler());
} catch (ClientProtocolException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
}
JSONArray jsonArray;
try {
jsonArray = new JSONArray(response);
} catch (JSONException e) {
e.printStackTrace();
return null;
}
}

Надеюсь, поможет

0

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector