2013-05-01 4 views
0

J'ai 2 appareils. Droid x3 w/Gingerbread et un Nexus 7 w/Jellybean 4.2.2. Je compile et exécute ce code sur mon Droid x3 et il fonctionne parfaitement. Pourtant, le même code que je cours sur le Nexus 7 et il casse.Android code fonctionne très bien sur Gingerbread, mais se brise sur Nexus 7 w/4.2.2

Tracé de code et de pile inclus.

Merci pour l'aide!

package com.jacobschellenbergflickrsearch; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.URI; 
import java.net.URISyntaxException; 

import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.DefaultHttpClient; 

public class DataDownloader { 

    String apiKey = "bc370c6386192bf6e2f950cdfddfda48"; 
    //String url = "http://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=bc370c6386192bf6e2f950cdfddfda48&nojsoncallback=1&text=monkey&format=json&per_page=10"; 


    public String buildUrl(String searchMethod, String searchQuery, int perpage){ 

     String url = String.format("http://api.flickr.com/services/rest/?method=%s&api_key=%s&nojsoncallback=1&text=%s&format=json&per_page=%s", searchMethod, this.apiKey, searchQuery, perpage); 

     String result = null; 

     try{ 
      HttpClient client = new DefaultHttpClient(); 
      HttpGet request = new HttpGet(); 
      request.setURI(new URI(url)); 
      HttpResponse response = client.execute(request); 
      InputStream ips = response.getEntity().getContent(); 
      BufferedReader buf = new BufferedReader(new InputStreamReader(ips,"UTF-8")); 

      StringBuilder sb = new StringBuilder(); 
      String s; 

      while(true) 
      { 
       s = buf.readLine(); 
       if(s==null || s.length()==0){ 
        break; 
       } 
       sb.append(s); 
      } 
      buf.close(); 
      ips.close(); 
      result = sb.toString(); 
     } 
     catch (IllegalStateException e) { 
      e.printStackTrace(); 
      result = "IllegalStateException"; 
     } 
     catch (IOException e) { 
      e.printStackTrace(); 
      result = "IOException"; 
     } catch (URISyntaxException e) { 
      e.printStackTrace(); 
      result = "URISyntaxException"; 
     } 

     return "Query: " + url + " : Result: " + result; 
    } 
} 

05-01 13: 47: 04,742: D/AndroidRuntime (4526): Arrêt VM 01/05 13: 47: 04,742: W/dalvikvm (4526): threadid = 1: fil sortie avec exception non interceptée (groupe = 0x41377930) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): FATAL EXCEPTION: principal 05-01 13: 47: 04.752: E/AndroidRuntime (4526): java. lang.IllegalStateException: Impossible d'exécuter la méthode de l'activité 05-01 13: 47: 04.752: E/AndroidRuntime (4526): au android.view.View $ 1.onClick (View.java:3599) 05-01 13 : 47: 04.752: E/André oidRuntime (4526): à android.view.View.performClick (View.java:4204) 05-01 13: 47: 04,752: E/AndroidRuntime (4526): à android.view.View $ PerformClick.run (View.java:17355) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): au android.os.Handler.handleCallback (Handler.java:725) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): au android.os.Handler.dispatchMessage (Handler.java:92) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): au android.os.Looper.loop (Looper .java: 137) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): au android.app.ActivityThread.main (ActivityThread.java:5041) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): au java.lang.reflect.Method.invokeNative (méthode native) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): à java.lang.reflect.Method.invoke (Method.java:511) 05 -01 13: 47: 04.752: E/AndroidRuntime (4526): au com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:793) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): au com.android.internal.os.ZygoteInit.main (ZygoteInit.java:560) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): au dalvik.system.NativeStart. main (Méthode native) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): Causée par: java.lang.reflect.InvocationTargetException 05-01 13: 47: 04.752: E/AndroidRuntime (4526): à java.lang.reflect.Method.invokeNative (Méthode native) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): à java.lang.reflect.Method.invoke (Method.java:511) 05 -01 13: 47: 04.752: E/AndroidRuntime (4526): au android.view.View $ 1.onClick (View.java:3594) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): E/AndroidRuntime (4526): Causé par: android.os.NetworkOnMainThreadException 05-01 13: 47: 04.752: E/AndroidRuntime (4526): à android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork (StrictMode.java:1117) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): à java.net.InetAddress.lookupHostByName (InetAddress.j ava: 385) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): au java.net.InetAddress.getAllByNameImpl (InetAddress.java:236) 05-01 13:47:04.752: E/AndroidRuntime (4526): au java.net.InetAddress.getAllByName (InetAddress.java:214) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): au org.apache.http. impl.conn.DefaultClientConnectionOperator.openConnection (DefaultClientConnectionOperator.java:137) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): au org.apache.http.impl.conn.AbstractPoolEntry.open (AbstractPoolEntry.java : 164) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): au org.apache.http.impl.conn.AbstractPooledConnAdapter.open (AbstractPooledConnAdapter.java:119) 05-01 13:47: 04.752: E/AndroidRuntime (4526): au org.apache.http.impl.client.DefaultRequestDirector.execute (DefaultRequestDirector.java:360) 05-01 13: 47: 04.752: E/Et roidRuntime (4526): au org.apache.http.impl.client.AbstractHttpClient.execute (AbstractHttpClient.java:555) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): au org.apache. http.impl.client.AbstractHttpClient.execute (AbstractHttpClient.java:487) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): au org.apache.http.impl.client.AbstractHttpClient.execute (AbstractHttpClient .java: 465) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): au com.jacobschellenbergflickrsearch.DataDownloader.buildUrl (DataDownloader.java:31) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): au com.jacobschellenbergflickrsearch.MainActivity.searchImage (MainActivity.java:47) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): ... 14 plus 05-01 13: 47: 04,802: D/dalvikvm (4526): GC_CONCURRENT libéré 210K, 5% sans 7474K/7812K, en pause de 5 ms + 2 ms, 46ms totale

Répondre

6

causés par: android.os .NetworkOnMainThreadException

Vous effectuez des E/S réseau sur le thread d'application principal. C'est une idée particulièrement mauvaise sur n'importe quelle version d'Android, et cela soulève une véritable exception sur Android 4.0+.

Veuillez effectuer vos E/S réseau sur un fil d'arrière-plan, par exemple en utilisant un AsyncTask.

0

Réponse HttpResponse = client.exécute (requête);

C'est votre problème. N'appelez pas d'actions réseau sur le thread de l'interface utilisateur. Tu ne devrais pas faire ça jamais. Depuis ICS c'est interdit.

Utilisez une asyncTask et appelez le client.execute() dans doInBackground(). Cela va régler votre problème.

0

Comme l'erreur indique que vous effectuez un appel newtwork sur le thread principal ... vous ne pouvez pas faire cela, il doit être dans un thread séparé

Questions connexes