Faits:
A. Par décision du 25 octobre 2007, l'Office cantonal de l'assurance-invalidité du canton de Genève a rejeté la demande de prestations de l'AI formée par C._, née en 1967, faute d'atteinte à la santé invalidante.
B. C._ a déféré cette décision au Tribunal des assurances sociales de la République et canton de Genève, en concluant à l'octroi de prestations de l'AI.
La juridiction cantonale l'a déboutée par jugement du 27 janvier 2009.
C. C._ interjette un recours en matière de droit public contre ce jugement dont elle demande l'annulation, avec suite de dépens, en concluant au versement d'une rente entière d'invalidité.
Il n'a pas été ordonné d'échange d'écritures.
Par ordonnance du 7 avril 2009, le Tribunal fédéral a rejeté la demande d'assistance judiciaire présentée par la recourante.
Considérant en droit:
1. Le recours en matière de droit public peut être formé pour violation du droit, tel qu'il est délimité par les art. 95 et 96 LTF. Le Tribunal fédéral applique le droit d'office (art. 106 al. 1 LTF), sans être limité par les arguments du recourant ou par la motivation de l'autorité précédente. Le Tribunal fédéral n'examine en principe que les griefs invoqués, compte tenu de l'exigence de motivation prévue à l'art. 42 al. 2 LTF, et ne peut aller au-delà des conclusions des parties (art. 107 al. 1 LTF). Il fonde son raisonnement sur les faits retenus par la juridiction de première instance (art. 105 al. 1 LTF) sauf s'ils ont été établis de façon manifestement inexacte ou en violation du droit au sens de l'art. 95 LTF (art. 105 al. 2 LTF). Le recourant qui entend s'écarter des faits constatés doit expliquer de manière circonstanciée en quoi les conditions de l'art. 105 al. 2 LTF sont réalisées sinon un état de fait divergent ne peut être pris en considération.
2. Les premiers juges ont exposé correctement les règles applicables à la solution du litige (droit à une rente d'invalidité). Il suffit de renvoyer au jugement attaqué.
3. A l'appui de ses conclusions, la recourante reproche au tribunal cantonal de ne pas s'être exprimé sur le caractère invalidant de ses problèmes dermatologiques, alors que ceux-ci avaient fait l'objet d'une étude par le SMR X._, lequel avait admis l'existence d'une maladie de Verneuil (infection des glandes apocrines). Elle soutient que ses droits d'être entendue et de participer à une instruction complète de l'incidence de la maladie de Verneuil n'ont pas été respectés. De l'avis de la recourante, les aspects décrits par son médecin n'ont pas été pris au sérieux et la juridiction cantonale s'est ralliée arbitrairement au point de vue de l'administration.
4. En l'espèce, les problèmes de santé psychosomatiques et dermatologiques dont la recourante fait état, en particulier la maladie de Verneuil et les furonculoses, étaient connus du tribunal cantonal (p. 6 ch. 7, et p. 7 ch. 12 de l'état de fait du jugement attaqué) et sont documentés dans le dossier cantonal (voir les rapports du docteur N._, médecin au SMR X._, des 8 juillet et 9 septembre 2008; rapport du docteur H._, médecin à l'Hôpital Y._, du 9 juin 2008; rapport du docteur S._, du 8 avril 2008).
Le tribunal cantonal a tenu compte de la surcharge pondérale et des troubles somatiques qui en résultent; il a constaté que ces troubles ne sont pas de nature, en tant que tels, à entraîner une incapacité de travail (p. 11 consid. 7 du jugement). La recourante ne démontre toutefois pas que ce constat de fait serait manifestement erroné ou qu'il aurait été établi en violation du droit; quant au grief tiré de la violation de son droit d'être entendue, on peine à saisir en quoi il consiste concrètement, tant il manque de substance.
A défaut d'incapacité de travail, le tribunal n'a pas violé le droit fédéral en niant l'existence d'une invalidité. Le recours est manifestement mal fondé.
5. La recourante, qui succombe, supportera les frais judiciaires (art. 66 al. 1 LTF).
Par ces motifs, le Tribunal fédéral prononce:
1. Le recours est rejeté.
2. Les frais judiciaires, arrêtés à 500 fr., sont mis à la charge de la recourante.
3. Le présent arrêt est communiqué aux parties, au Tribunal cantonal des assurances sociales de la République et canton de Genève et à l'Office fédéral des assurances sociales.
Lucerne, le 30 juin 2009
Au nom de la IIe Cour de droit social
du Tribunal fédéral suisse
Le Président: Le Greffier:
Meyer Berthoud