2013-04-01 1 views
1

J'utilise BitNami pour tester mon projet django. Je crée une connexion à partir d'Android, en lui passant une URL pour récupérer des données de la base de données. Les données sont sous cette forme:Doctype renvoyé par le serveur au lieu de String?

{"apps": ["False", "Hello from notepade++", "My App", "Test"]} 

est ici que je suis aller chercher et de recevoir les données dans Android

public static ArrayList<String> getApps(){ 
    HttpClient httpclient = new DefaultHttpClient(); 
    HttpResponse responseCategories; 
    int categoriesStatusCode =0; 
    String responseCategoriesString = ""; 
    ArrayList<String> out = new ArrayList<String>(); 
    HttpGet httpgetCategories = new HttpGet("http://safwany/sampleproject/applications/fetch_apps"); 
    try { 
     responseCategories = httpclient.execute(httpgetCategories); 
     categoriesStatusCode = responseCategories.getStatusLine().getStatusCode(); 
     try { 
      responseCategoriesString = EntityUtils.toString(responseCategories.getEntity()); 
     } catch (ParseException e1) { 
      e1.printStackTrace(); 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } 
    } catch (ClientProtocolException e1) { 
     e1.printStackTrace(); 
    } catch (IOException e1) { 
     e1.printStackTrace(); 
    } 
    if(categoriesStatusCode==200){ 
     JSONObject object; 
     try { 
      System.out.println(responseCategoriesString); 
      object = new JSONObject(responseCategoriesString); 
      JSONArray Jarray = object.getJSONArray("apps"); 
      for(int i = 0; i < Jarray.length(); i++) 
      { 
       String s = (String) Jarray.get(i); 
       out.add(s); 
       //categoriesMap.put(s, 0); 
      } 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 
    return out; 
} 

Lorsque je tente d'imprimer responseCategoriesString, je reçois le texte suivant:

04-01 22:55:56.335: I/System.out(9325): <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head><meta http-equiv="refresh" content="0;url=http://search.tedata.net/main?InterceptSource=0&ClientLocation=eg&ParticipantID=esrkzqp9pwh62lmydaf4wsy3i92taus2&FailureMode=1&SearchQuery=&FailedURI=http%3A%2F%2Fsafwany%2Fsampleproject%2Fapplications%2Ffetch_apps&AddInType=4&Version=2.1.8-1.90base&Referer=&Implementation=0"/><script type="text/javascript">url="http://search.tedata.net/main?InterceptSource=0&ClientLocation=eg&ParticipantID=esrkzqp9pwh62lmydaf4wsy3i92taus2&FailureMode=1&SearchQuery=&FailedURI=http%3A%2F%2Fsafwany%2Fsampleproject%2Fapplications%2Ffetch_apps&AddInType=4&Version=2.1.8-1.90base&Referer=&Implementation=0";if(top.location!=location){var w=window,d=document,e=d.documentElement,b=d.body,x=w.innerWidth||e.clientWidth||b.clientWidth,y=w.innerHeight||e.clientHeight||b.clientHeight;url+="&w="+x+"&h="+y;}window.location.replace(url);</script></head><body></body></html> 
04-01 22:55:56.335: W/System.err(9325): org.json.JSONException: Value <!DOCTYPE of type java.lang.String cannot be converted to JSONObject 
+0

Comme vous pouvez le voir: vous récupérez html au lieu de json. Donc, d'une manière ou d'une autre, votre serveur renvoie des données erronées ou vous ne les demandez pas correctement. Lorsque vous avez également créé la partie django, vérifiez également s'il y a des erreurs et déboguez pourquoi la requête envoyée renvoie des données erronées. – WarrenFaith

+0

c'est la vue en django fetch_apps def (demande): applications = App.objects.all() apps_array = [] pour des applications dans: apps_array.append (a.name) apps_array.sort() res = json.dumps ({"apps": apps_array}) return HttpResponse (res, mimetype = 'application/json') Je pense que c'est correct car quand j'essaye l'url dans le navigateur, données correctement – omarsafwany

Répondre

0

Lorsque je regarde les données de réponse que vous obtenez, je pense que vous avez des problèmes avec un pare-feu ou similaire:

http://search.tedata.net/main?InterceptSource=0&ClientLocation=eg&ParticipantID=esrkzqp9pwh62lmydaf4wsy3i92taus2&FailureMode=1&SearchQuery=&FailedURI=http%3A%2F%2Fsafwany%2Fsampleproject%2Fapplications%2Ffetch_apps&AddInType=4&Version=2.1.8-1.90base&Referer=&Implementation=0 

COMPREND url demandée:

FailedURI=http%3A%2F%2Fsafwany%2Fsampleproject%2Fapplications%2Ffetch_apps 

Mais FailedURI sonne comme une entreprise Firefall/passerelle avec filtre ... vous devriez vérifier si votre émulateur/appareil peut vraiment accéder au safwany « domaine ». Peut-être que vous devriez essayer une adresse IP au lieu de safwany?

+0

J'y accède à partir d'un périphérique réel et non d'un émulateur. Quand j'ai essayé ip, localhost ou quoi que ce soit de ce genre, la connexion est toujours refusée – omarsafwany

+0

Reste encore la question: est-ce que le WIFI auquel votre appareil est connecté a l'information dont IP est derrière 'safwany'? Est-ce que votre réseau local DNS le sait? "J'en doute. – WarrenFaith

+0

Pourriez-vous expliquer un peu plus ?! – omarsafwany

Questions connexes