2014-04-24 1 views
0

Je développe une application pour les étudiants et j'ai trouvé une erreur en la testant sur un appareil réel. Voici un morceau de code de mon application. J'utilise cette AsynTask pour récupérer des informations via une page Web et cela fonctionne très bien.Pourquoi je ne peux pas charger une image Internet sur une application Android à l'aide d'un vrai appareil?

protected void onPostExecute(PlaceRecord result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 

     // Refresh the values 
     ImageView imageFlag = (ImageView) findViewById(R.id.imageViewFlag); 

     try { 
      InputStream is = (InputStream) new URL(place.getFlagUrl()) 
        .getContent(); 
      Drawable d = Drawable.createFromStream(is, "src name"); 
      Log.i(TAG, "D: " + d.toString()); 
      if (d.toString() == "") { 
       imageFlag.setImageResource(R.drawable.logo_fondo); 
      } else { 
       imageFlag.setImageDrawable(d); 
      } 
     } catch (Exception e) { 
      Log.e(TAG, "que conho pasa: " + e); 
      e.printStackTrace(); 
     } TextView textVCountry = (TextView) findViewById(R.id.textViewCountryName); 
     textVCountry.setText(place.getCountryName()); 
     TextView textVPlace = (TextView) findViewById(R.id.textViewResolverPlace);  
     textVPlace.setText(place.getPlace());   

Voici la chose, quand je lance ceci sur mon émulateur fonctionne parfaitement. Le résultat est un objet qui possède String countryName, String place et FlagURL qui est l'URL d'une image sur le Web. Quand je lance ceci sur l'émulateur, je reçois l'image et les deux textes tous parfaits, mais quand je l'exécute sur un vrai périphérique (au début, j'ai utilisé un bitmap mais il s'est écrasé et je ne savais pas pourquoi ... et le logcat fenêtre pour le périphérique réel n'a pas donné e moi beaucoup d'aide) alors avec cette méthode il ne plante pas mais quand je l'exécute il ne montre rien .. sur l'émulateur il montre, si vous changez l'URL pour une autre image, il montre le nouveau, mais sur le réel non.

Je peux vous montrer plus de code si vous voulez, je ne voulais pas le remplir avec du code. Le problème est que la fenêtre logcat ne montre rien ...

Une chose importante est que mon appareil réel a android 4.2 mais l'émulateur 2.3

Tout invité?

Merci

Ceci est mon fichier manifeste

<?xml version="1.0" encoding="utf-8"?> 
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="advance.modelling.yourvistit" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="10" 
     android:targetSdkVersion="19" /> 

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

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="advance.modelling.yourvisit.MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 

     </application> 


    </manifest> 
+0

chat de chat et les détails du manifeste Android sera utile –

Répondre

0

Vous devez travailler avec Internet en fil d'arrière-plan. Déplacez le code qui télécharge l'image vers la fonction doInBackground() de votre classe AsyncTask. Dans onPostExecute vous devez définir l'image déjà téléchargée dans votre ImageView (Parce que vous pouvez travailler avec des vues uniquement dans le fil principal)

L'obtention d'image dans le fil principal ne peut fonctionner que sur les anciens appareils Android.

+0

Merci beaucoup! :) – neteot

Questions connexes