私のアプリでは、データをロードするための接続を開いています。受話器デバイス(galaxy 2)とタブレットp1000(os2.2を搭載した古い7"タブレット)では問題なくデータを取得して解析できますが、別のタブレット(samsung 7" plus --Honeycomb)ではアプリケーションがクラッシュします。logcatは言う:
04-05 16:31:33.905: E/AndroidRuntime(4137): FATAL EXCEPTION: main
04-05 16:31:33.905: E/AndroidRuntime(4137): android.os.NetworkOnMainThreadException
04-05 16:31:33.905: E/AndroidRuntime(4137): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1077)
04-05 16:31:33.905: E/AndroidRuntime(4137): at java.net.InetAddress.lookupHostByName(InetAddress.java:477)
04-05 16:31:33.905: E/AndroidRuntime(4137): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:277)
04-05 16:31:33.905: E/AndroidRuntime(4137): at java.net.InetAddress.getAllByName(InetAddress.java:249)
04-05 16:31:33.905: E/AndroidRuntime(4137): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:136)
04-05 16:31:33.905: E/AndroidRuntime(4137): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
04-05 16:31:33.905: E/AndroidRuntime(4137): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
04-05 16:31:33.905: E/AndroidRuntime(4137): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
04-05 16:31:33.905: E/AndroidRuntime(4137): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
04-05 16:31:33.905: E/AndroidRuntime(4137): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
04-05 16:31:33.905: E/AndroidRuntime(4137): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
04-05 16:31:33.905: E/AndroidRuntime(4137): at cam.astro.mania.adapters.NewsAdapter.fetchImages(NewsAdapter.java:105)
04-05 16:31:33.905: E/AndroidRuntime(4137): at cam.astro.mania.adapters.NewsAdapter.setData(NewsAdapter.java:45)
04-05 16:31:33.905: E/AndroidRuntime(4137): at com.astro.mania.activities.NewsList.displayData(NewsList.java:359)
04-05 16:31:33.905: E/AndroidRuntime(4137): at com.astro.mania.activities.NewsList.access$4(NewsList.java:358)
04-05 16:31:33.905: E/AndroidRuntime(4137): at com.astro.mania.activities.NewsList$MyAsyncTask.onPostExecute(NewsList.java:199)
04-05 16:31:33.905: E/AndroidRuntime(4137): at com.astro.mania.activities.NewsList$MyAsyncTask.onPostExecute(NewsList.java:1)
04-05 16:31:33.905: E/AndroidRuntime(4137): at android.os.AsyncTask.finish(AsyncTask.java:590)
04-05 16:31:33.905: E/AndroidRuntime(4137): at android.os.AsyncTask.access$600(AsyncTask.java:149)
04-05 16:31:33.905: E/AndroidRuntime(4137): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:603)
04-05 16:31:33.905: E/AndroidRuntime(4137): at android.os.Handler.dispatchMessage(Handler.java:99)
04-05 16:31:33.905: E/AndroidRuntime(4137): at android.os.Looper.loop(Looper.java:132)
04-05 16:31:33.905: E/AndroidRuntime(4137): at android.app.ActivityThread.main(ActivityThread.java:4123)
04-05 16:31:33.905: E/AndroidRuntime(4137): at java.lang.reflect.Method.invokeNative(Native Method)
04-05 16:31:33.905: E/AndroidRuntime(4137): at java.lang.reflect.Method.invoke(Method.java:491)
04-05 16:31:33.905: E/AndroidRuntime(4137): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844)
04-05 16:31:33.905: E/AndroidRuntime(4137): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
04-05 16:31:33.905: E/AndroidRuntime(4137): at dalvik.system.NativeStart.main(Native Method)
私のコードは:
/*-------------------------------
* Downloading images from server
* ------------------------------*/
private Bitmap[] fetchImages(ArrayList<String> urlstr){
InputStream is= null;
Bitmap bm = null;
Bitmap[] bmList = new Bitmap[urlstr.size()];
try {
for(int i=0; i<urlstr.size(); i++){
HttpGet httpRequest = new HttpGet(urlstr.get(i));
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = (HttpResponse) httpclient.execute(httpRequest);
HttpEntity entity = response.getEntity();
BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity);
is = bufHttpEntity.getContent();
bm = BitmapFactory.decodeStream(is);
bmList[i] = bm;
}
}catch ( MalformedURLException e ){
Log.d( "RemoteImageHandler", "fetchImage passed invalid URL: " + urlstr );
}catch ( IOException e ){
Log.d( "RemoteImageHandler", "fetchImage IO exception: " + e );
}finally{
if(is!=null)try{
is.close();
}catch(IOException e){}
}
return bmList;
}
LogcatHttpResponse response = (HttpResponse) httpclient.execute(httpRequest);
は、エラーの意味がわからないことを指摘しています。何が問題ですか?
ご協力いただきありがとうございます。