2013-05-01 3 views
0

У меня есть 2 устройства. Droid x3 w/Gingerbread и Nexus 7 w/Jellybean 4.2.2. Я компилирую и запускаю этот код на своем Droid x3, и он работает отлично. Но тот же самый код, который я запускаю на Nexus 7, и он ломается.Android-код отлично работает на Gingerbread, но работает на Nexus 7 w/4.2.2

Код и следы стека включены.

Спасибо за помощь!

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): Выключение ВМ 05-01 13: 47: 04.742: Вт/dalvikvm (4526): ThreadId = 1: резьба выход с неперехваченное исключение (группа = 0x41377930) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): FATAL EXCEPTION: main 05-01 13: 47: 04.752: E/AndroidRuntime (4526): java. lang.IllegalStateException: Не удалось выполнить способ действия 05-01 13: 47: 04.752: E/AndroidRuntime (4526): at android.view.View $ 1.onClick (View.java:3599) 05-01 13 : 47: 04.752: E/Andr oidRuntime (4526): at android.view.View.performClick (View.java:4204) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): at android.view.View $ PerformClick.run (View.java:17355) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): at android.os.Handler.handleCallback (Handler.java:725) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): at android.os.Handler.dispatchMessage (Handler.java:92) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): at android.os.Looper.loop (Looper .java: 137) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): at android.app.ActivityThread.main (ActivityThread.java:5041) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): на java.lang.reflect.Method.invokeNative (родной метод) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): at java.lang.reflect.Method.invoke (Method.java:511) 05 -01 13: 47: 04.752: E/AndroidRuntime (4526): at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:793) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:560) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): at dalvik.system.NativeStart. main (Native Method) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): вызвано: java.lang.reflect.InvocationTargetException 05-01 13: 47: 04.752: E/AndroidRuntime (4526): в java.lang.reflect.Method.invokeNative (родной метод) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): at java.lang.reflect.Method.invoke (Method.java:511) 05 -01 13: 47: 04.752: E/AndroidRuntime (4526): at android.view.View $ 1.onClick (View.java:3594) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): ... 11 еще 05-01 13: 47: 04.752: E/AndroidRuntime (4526): вызвано: android.os.NetworkOnMainThreadException 05-01 13: 47: 04.752: E/AndroidRuntime (4526): at android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork (StrictMode.java:1117) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): at java.net.InetAddress.lookupHostByName (InetAddress.j ava: 385) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): at java.net.InetAddress.getAllByNameImpl (InetAddress.java:236) 05-01 13:47:04.752: E/AndroidRuntime (4526): at java.net.InetAddress.getAllByName (InetAddress.java:214) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): at org.apache.http. impl.conn.DefaultClientConnectionOperator.openConnection (DefaultClientConnectionOperator.java:137) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): at org.apache.http.impl.conn.AbstractPoolEntry.open (AbstractPoolEntry.java : 164) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open (AbstractPooledConnAdapter.java:119) 05-01 13:47: 04.752: E/AndroidRuntime (4526): at org.apache.http.impl.client.DefaultRequestDirector.execute (DefaultRequestDirector.java:360) 05-01 13: 47: 04.752: E/And roidRuntime (4526): at org.apache.http.impl.client.AbstractHttpClient.execute (AbstractHttpClient.java:555) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): at org.apache. http.impl.client.AbstractHttpClient.execute (AbstractHttpClient.java:487) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): at org.apache.http.impl.client.AbstractHttpClient.execute (AbstractHttpClient .java: 465) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): at com.jacobschellenbergflickrsearch.DataDownloader.buildUrl (DataDownloader.java:31) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): at com.jacobschellenbergflickrsearch.MainActivity.searchImage (MainActivity.java:47) 05-01 13: 47: 04.752: E/AndroidRuntime (4526): ... еще 14 05-01 13: 47: 04,802 D/dalvikvm (4526): GC_CONCURRENT освободил 210K, 5% бесплатно 7474K/7812K, приостановлена ​​5ms + 2 мсек, общая 46ms

ответ

6

Вызванный: android.os .NetworkOnMainThreadException

Вы используете сетевой ввод-вывод в основной прикладной нити. Это исключительно плохая идея для любой версии Android, и она действительно вызывает исключение на Android 4.0+.

Просьба выполнить сетевой ввод-вывод на фоновом потоке, например, с помощью AsyncTask.

0

HttpResponse response = client.execute (request);

Это ваша проблема. Не вызывайте сетевые действия в потоке пользовательского интерфейса. Вы не должны этого делать. С ICS это запрещено.

Используйте AsyncTask и вызывайте client.execute() внутри doInBackground(). Это исправит вашу проблему.

0

Как говорится в сообщении об ошибке, вы делаете новый вызов в главной теме ... вы не можете этого сделать, он должен быть в отдельной нити

Смежные вопросы