2014-05-24 3 views
0

Je suis nouveau à android et je veux me connecter aux fichiers json, mais quand j'essaye ce code, mais il ne se connecte pas, et quand je l'exécute dans mon téléphone quand je veux travailler, il obtient moi nooo dans logcat selon que j'ai dit de le faire quand il a un problème de connexion au serveur, merciconnexion au serveur avec android

public class LastFMHelper { 

public static final String LastFMMetroTrackChartUrl= 
     "http://ws.audioscrobbler.com/2.0/?method=geo.getmetrotrackchart&country=united+states&metro=denver&format=json&api_key=bc8ae5008414312b31e8c23f684d67cc"; 
private static final int HTTP_STATUS_OK = 200; 
private static byte[] buff = new byte[1024]; 
private static final String logTag="LastFMHelper"; 


public static class ApiException extends Exception 
{ 
    private static final long serialVersionUID= 1L; 

    public ApiException (String msg) 
    { 
     super(msg); 
    } 

    public ApiException(String msg, Throwable thr) 
    { 
     super(msg, thr); 
    } 

} 

protected static synchronized String downlaodFromServer (String ...params) throws ApiException { 
    String retval= null; 
    String metro = params[0]; 

    String url= LastFMMetroTrackChartUrl + "&metro" +metro; 

    Log.d(logTag,"Fetching"+url); 

    HttpClient client= new DefaultHttpClient(); 
    HttpGet request = new HttpGet(url); 

    try{ 

     HttpResponse responce = client.execute(request); 
     StatusLine status = responce.getStatusLine(); 
     if(status.getStatusCode()!=HTTP_STATUS_OK) 
     { 
      throw new ApiException("Invalid responce from last.fm"+status.toString()); 
     } 

     HttpEntity entity = responce.getEntity(); 
     InputStream ist = entity.getContent(); 
     ByteArrayOutputStream content = new ByteArrayOutputStream(); 

     int readcount =0; 
     while((readcount= ist.read(buff)) != -1) 
     { 
      content.write(buff,0,readcount); 
     } 
     retval= new String (content.toByteArray()); 
    }catch(Exception e){ 
        Log.d(logTag,"noo!!"); 
     throw new ApiException("problem connecting to server " + e.getMessage(),e); 
    } 

    return retval; 



} 

} 
+0

ce que fait l'impression ApiException dans le journal? s'il n'y a rien, essayez de consigner l'exception et de publier le journal. par exemple, au lieu de 'Log.d (logTag," noo !! ");' essayer 'Log.d (logTag, e.getMessage());' – katzenhut

+0

Je fais qu'il a dit 05-25 12: 14: 37.882 : D/LastFMHelper (22953): Autorisation refusée (permission INTERNET manquante?) – amirhtk

Répondre

0

bien theres votre problème. Vous n'avez pas d'autorisation Internet, votre application ne peut donc pas se connecter au serveur. Ajoutez cette ligne en haut de la <manifest> - balise dans votre fichier AppManifest:

<uses-permission android:name="android.permission.INTERNET"></uses-permission> 

Je vous suggère de lire ces guides au sujet de la AppManifest et la façon dont il gère les autorisations:

http://developer.android.com/guide/topics/manifest/manifest-intro.html http://developer.android.com/guide/topics/security/permissions.html#permissions

0

Il y a beaucoup de raisons pourraient être prédites si vous ne nous donnez pas les journaux. Je prédis tout le mal: peut-être vous devez mettre cet extrait avant la demande au serveur:

if (android.os.Build.VERSION.SDK_INT > 9) { 
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
        StrictMode.setThreadPolicy(policy); 
       } 
+0

le problème est avec l'autorisation internet (voir les commentaires sur la question). mais cela semble intéressant. a-t-il soin d'élaborer un peu? qu'est-ce que ça fait? – katzenhut

+0

StrictMode pour l'accès au réseau entraîne une erreur fatale comme pour Android 3.0 (Honeycomb) ou plus tard, sauf si votre application cible une version de l'API avant Honeycomb.t permet de configurer des stratégies dans votre application pour éviter de faire des choses incorrectes. Par exemple, la configuration suivante plantera votre application si elle viole certaines des règles Android. StrictMode ne doit être utilisé que pendant le développement et non dans votre application en direct. Ref: Vogella –

+0

merci. Je n'en avais aucune idée. – katzenhut