我需要你的帮助。 我的应用程序在GingerBread上工作正常,但在ICS和HC崩溃。 这是logcat
01-14 20:26:51.831: E/AndroidRuntime(698): FATAL EXCEPTION: main
01-14 20:26:51.831: E/AndroidRuntime(698): android.os.NetworkOnMainThreadException
01-14 20:26:51.831: E/AndroidRuntime(698): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
01-14 20:26:51.831: E/AndroidRuntime(698): at java.net.InetAddress.lookupHostByName(InetAddress.java:391)
01-14 20:26:51.831: E/AndroidRuntime(698): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)
01-14 20:26:51.831: E/AndroidRuntime(698): at java.net.InetAddress.getAllByName(InetAddress.java:220)
01-14 20:26:51.831: E/AndroidRuntime(698): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:71)
01-14 20:26:51.831: E/AndroidRuntime(698): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
01-14 20:26:51.831: E/AndroidRuntime(698): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:351)
01-14 20:26:51.831: E/AndroidRuntime(698): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:86)
01-14 20:26:51.831: E/AndroidRuntime(698): at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
01-14 20:26:51.831: E/AndroidRuntime(698): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308)
01-14 20:26:51.831: E/AndroidRuntime(698): at libcore.net.http.HttpEngine.connect(HttpEngine.java:303)
01-14 20:26:51.831: E/AndroidRuntime(698): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282)
01-14 20:26:51.831: E/AndroidRuntime(698): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232)
01-14 20:26:51.831: E/AndroidRuntime(698): at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80)
01-14 20:26:51.831: E/AndroidRuntime(698): at com.bozz.milaircraft.f23$ImageAdapter.getView(f23.java:125)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.widget.AbsSpinner.onMeasure(AbsSpinner.java:192)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.view.View.measure(View.java:12723)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1369)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.widget.LinearLayout.measureVertical(LinearLayout.java:660)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.widget.LinearLayout.onMeasure(LinearLayout.java:553)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.view.View.measure(View.java:12723)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.view.View.measure(View.java:12723)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1369)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.widget.LinearLayout.measureVertical(LinearLayout.java:660)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.widget.LinearLayout.onMeasure(LinearLayout.java:553)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.view.View.measure(View.java:12723)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.view.View.measure(View.java:12723)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1369)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.widget.LinearLayout.measureVertical(LinearLayout.java:660)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.widget.LinearLayout.onMeasure(LinearLayout.java:553)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.view.View.measure(View.java:12723)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.view.View.measure(View.java:12723)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.widget.LinearLayout.measureVertical(LinearLayout.java:812)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.widget.LinearLayout.onMeasure(LinearLayout.java:553)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.view.View.measure(View.java:12723)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
01-14 20:26:51.831: E/AndroidRuntime(698): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2092)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.view.View.measure(View.java:12723)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1064)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.os.Handler.dispatchMessage(Handler.java:99)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.os.Looper.loop(Looper.java:137)
01-14 20:26:51.831: E/AndroidRuntime(698): at android.app.ActivityThread.main(ActivityThread.java:4424)
01-14 20:26:51.831: E/AndroidRuntime(698): at java.lang.reflect.Method.invokeNative(Native Method)
01-14 20:26:51.831: E/AndroidRuntime(698): at java.lang.reflect.Method.invoke(Method.java:511)
01-14 20:26:51.831: E/AndroidRuntime(698): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
01-14 20:26:51.831: E/AndroidRuntime(698): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
01-14 20:26:51.831: E/AndroidRuntime(698): at dalvik.system.NativeStart.main(Native Method)
这是layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/linearLayout3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#000"
android:paddingBottom="5dp"
android:paddingTop="5dp" >
<Button
android:id="@+id/homebutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@drawable/homebutton" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:gravity="center"
android:text="@string/nomeF22Raptor"
android:textColor="#FFD800"
android:textSize="22dp"
android:textStyle="bold" />
<Button
android:id="@+id/searchbutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@drawable/searchbutton" >
</Button>
</LinearLayout>
<TabHost
android:id="@+id/tabhost"
android:layout_width="match_parent"
android:layout_height="420dp"
android:layout_weight="0.80"
android:background="@drawable/background" >
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TabWidget
android:id="@android:id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</TabWidget>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:id="@+id/tab1"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ScrollView
android:id="@+id/ScrollView01"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/datiF22Raptor" />
</LinearLayout>
</ScrollView>
</LinearLayout>
<LinearLayout
android:id="@+id/tab2"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ScrollView
android:id="@+id/ScrollView01"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/cartecF22Raptor" />
</LinearLayout>
</ScrollView>
</LinearLayout>
<LinearLayout
android:id="@+id/tab3"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ScrollView
android:id="@+id/ScrollView01"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/utilizzatoriF22Raptor" />
</LinearLayout>
</ScrollView>
</LinearLayout>
<LinearLayout
android:id="@+id/tab4"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Gallery
android:id="@+id/gallery"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
<ImageView
android:id="@+id/ImageView01"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_gravity="center" >
</ImageView>
</LinearLayout>
</FrameLayout>
</LinearLayout>
</TabHost>
</LinearLayout>
这是java代码
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;
public class f23 extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.f23);
Button bhome = (Button) findViewById(R.id.homebutton);
bhome.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
startActivity(new Intent("com.bozz.milaircraft.MENU"));
}
});
TabHost th = (TabHost) findViewById(R.id.tabhost);
th.setup();
TabSpec specs = th.newTabSpec("tag1");
specs.setContent(R.id.tab1);
specs.setIndicator("BRIEFING");
th.addTab(specs);
specs = th.newTabSpec("tag2");
specs.setContent(R.id.tab2);
specs.setIndicator("DESIGN");
th.addTab(specs);
specs = th.newTabSpec("tag3");
specs.setContent(R.id.tab3);
specs.setIndicator("USERS");
th.addTab(specs);
specs = th.newTabSpec("tag4");
specs.setContent(R.id.tab4);
specs.setIndicator("GALLERY");
th.addTab(specs);
Gallery ga = (Gallery) findViewById(R.id.gallery);
ga.setAdapter(new ImageAdapter(this));
}
public class ImageAdapter extends BaseAdapter {
/** The parent context */
private Context myContext;
int imageBackground;
/** URL-Strings to some remote images. */
private String[] myRemoteImages = {
"http://www.medicinarozzano.it/images/milair/f4_1.jpg",
"http://www.medicinarozzano.it/images/milair/f4_2.jpg",
"http://www.medicinarozzano.it/images/milair/f4_3.jpg",
"http://www.medicinarozzano.it/images/milair/f4_4.jpg",
"http://www.medicinarozzano.it/images/milair/f4_5.jpg",
"http://www.medicinarozzano.it/images/milair/f4_6.jpg",
"http://www.medicinarozzano.it/images/milair/f4_7.jpg",
"http://www.medicinarozzano.it/images/milair/f4_8.jpg",
"http://www.medicinarozzano.it/images/milair/f4_9.jpg",
"http://www.medicinarozzano.it/images/milair/f4_10.jpg"};
/** Simple Constructor saving the 'parent' context. */
public ImageAdapter(Context c) {
this.myContext = c;
}
/** Returns the amount of images we have defined. */
public int getCount() {
return this.myRemoteImages.length;
}
/* Use the array-Positions as unique IDs */
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
/**
* Returns a new ImageView to be displayed, depending on the position
* passed.
*/
public View getView(int position, View convertView, ViewGroup parent) {
ImageView i = new ImageView(this.myContext);
try {
/* Open a new URL and get the InputStream to load data from it. */
URL aURL = new URL(myRemoteImages[position]);
URLConnection conn = aURL.openConnection();
conn.connect();
InputStream is = conn.getInputStream();
/* Buffered is always good for a performance plus. */
BufferedInputStream bis = new BufferedInputStream(is);
/* Decode url-data to a bitmap. */
Bitmap bm = BitmapFactory.decodeStream(bis);
bis.close();
is.close();
/* Apply the Bitmap to the ImageView that will be returned. */
i.setImageBitmap(bm);
} catch (IOException e) {
i.setImageResource(R.drawable.f4_1);
Log.e("DEBUGTAG", "Remote Image Exception", e);
}
/* Image should be scaled as width/height are set. */
i.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
/* Set the Width/Height of the ImageView. */
i.setLayoutParams(new Gallery.LayoutParams(480, 640));
return i;
}
/**
* Returns the size (0.0f to 1.0f) of the views depending on the
* 'offset' to the center.
*/
public float getScale(boolean focused, int offset) {
/* Formula: 1 / (2 ^ offset) */
return Math.max(0, 1.0f / (float) Math.pow(2, Math.abs(offset)));
}
}
}
单击“图库”选项卡时,应用程序崩溃。
答案 0 :(得分:8)
在应用程序的主线程上执行(可能阻止)网络操作是一个坏主意,这就是您正在做的事情。在Honeycomb(Android 3.0)之前,这只是一个坏主意。从Android 3.0开始,它是禁止的,如果您尝试这样做,则会收到此异常。
请参阅http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html
您需要将此网络逻辑分配到单独的异步线程。或者,查看Handler
。您将需要更改代码体系结构;没有简单的解决方法。
答案 1 :(得分:4)
在Honeycomb网络中not allowed on the UI thread。原因是它会降低用户界面(UI)的速度。
相反,尝试在后台线程中下载图像,实现此目的的最简单方法是使用AsyncTask。
答案 2 :(得分:4)
使用它需要您自担风险:
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll()
.build();
StrictMode.setThreadPolicy(policy);
资源: 的 http://developer.android.com/reference/android/os/StrictMode.ThreadPolicy.Builder.html 强>
答案 3 :(得分:1)
您可以看到操作系统的版本,并根据它执行代码。
例如:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD)
答案 4 :(得分:-1)
这就是我解决问题的方法:
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.entity.BufferedHttpEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.TabHost;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.TabHost.TabSpec;
public class f24 extends Activity {
private ImageAdapter imageAdapter;
private ArrayList<String> PhotoURLS = new ArrayList<String>();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.f24);
Button bhome = (Button) findViewById(R.id.homebutton);
bhome.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
startActivity(new Intent ("com.bozz.milaircraft.MENU"));
}
});
TabHost th = (TabHost) findViewById(R.id.tabhost);
th.setup();
TabSpec specs = th.newTabSpec("tag1");
specs.setContent(R.id.tab1);
specs.setIndicator("BRIEFING");
th.addTab(specs);
specs = th.newTabSpec("tag2");
specs.setContent(R.id.tab2);
specs.setIndicator("DESIGN");
th.addTab(specs);
specs = th.newTabSpec("tag3");
specs.setContent(R.id.tab3);
specs.setIndicator("USERS");
th.addTab(specs);
specs = th.newTabSpec("tag4");
specs.setContent(R.id.tab4);
specs.setIndicator("GALLERY");
th.addTab(specs);
imageAdapter = new ImageAdapter(this);
final ImageView imgView = (ImageView) findViewById(R.id.GalleryView);
Gallery g = (Gallery) findViewById(R.id.Gallery);
g.setAdapter(imageAdapter);
g.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
imgView.setImageDrawable(LoadImageFromURL(PhotoURLS
.get(position)));
imgView.setScaleType(ImageView.ScaleType.FIT_CENTER);
}
});
// replace this code to set your image urls in list
PhotoURLS.add("http://www.medicinarozzano.it/images/milair/f4_1.jpg");
PhotoURLS.add("http://www.medicinarozzano.it/images/milair/f4_1.jpg");
new AddImageTask().execute();
}
class AddImageTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... unused) {
for (String url : PhotoURLS) {
String filename = url.substring(url.lastIndexOf("/") + 1,
url.length());
filename = "th_" + filename;
String thumburl = url.substring(0, url.lastIndexOf("/") + 1);
imageAdapter.addItem(LoadThumbnailFromURL(thumburl + filename));
publishProgress();
//SystemClock.sleep(200);
}
return (null);
}
@Override
protected void onProgressUpdate(Void... unused) {
imageAdapter.notifyDataSetChanged();
}
@Override
protected void onPostExecute(Void unused) {
}
}
private Drawable LoadThumbnailFromURL(String url) {
try {
URLConnection connection = new URL(url).openConnection();
String contentType = connection.getHeaderField("Content-Type");
boolean isImage = contentType.startsWith("image/");
if(isImage){
HttpGet httpRequest = new HttpGet(url);
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = (HttpResponse) httpclient
.execute(httpRequest);
HttpEntity entity = response.getEntity();
BufferedHttpEntity bufferedHttpEntity = new BufferedHttpEntity(entity);
InputStream is = bufferedHttpEntity.getContent();
Drawable d = Drawable.createFromStream(is, "src Name");
return d;
} else {
Bitmap b = BitmapFactory.decodeResource(getResources(), R.drawable.no_image);
Drawable d = new BitmapDrawable(b);
return d;
}
} catch (Exception e) {
Toast.makeText(getApplicationContext(), "Error", Toast.LENGTH_LONG)
.show();
Log.e(e.getClass().getName(), e.getMessage(), e);
return null;
}
}
private Drawable LoadImageFromURL(String url) {
try {
URLConnection connection = new URL(url).openConnection();
String contentType = connection.getHeaderField("Content-Type");
boolean isImage = contentType.startsWith("image/");
if(isImage){
HttpGet httpRequest = new HttpGet(url);
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = (HttpResponse) httpclient
.execute(httpRequest);
HttpEntity entity = response.getEntity();
BufferedHttpEntity bufferedHttpEntity = new BufferedHttpEntity(
entity);
InputStream is = bufferedHttpEntity.getContent();
// Decode image size
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(is, null, o);
// The new size we want to scale to
final int REQUIRED_SIZE = 150;
// Find the correct scale value. It should be the power of 2.
int width_tmp = o.outWidth, height_tmp = o.outHeight;
int scale = 1;
while (true) {
if (width_tmp / 2 < REQUIRED_SIZE
|| height_tmp / 2 < REQUIRED_SIZE)
break;
width_tmp /= 2;
height_tmp /= 2;
scale *= 2;
}
// Decode with inSampleSize
is = bufferedHttpEntity.getContent();
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
Bitmap b = BitmapFactory.decodeStream(is, null, o2);
Drawable d = new BitmapDrawable(b);
return d;
} else {
Bitmap b = BitmapFactory.decodeResource(getResources(), R.drawable.no_image);
Drawable d = new BitmapDrawable(b);
return d;
}
} catch (Exception e) {
Toast.makeText(getApplicationContext(), "Error", Toast.LENGTH_LONG)
.show();
Log.e(e.getClass().getName(), e.getMessage(), e);
return null;
}
}
public class ImageAdapter extends BaseAdapter {
int mGalleryItemBackground;
private Context mContext;
ArrayList<Drawable> drawablesFromUrl = new ArrayList<Drawable>();
public ImageAdapter(Context c) {
mContext = c;
TypedArray a = obtainStyledAttributes(R.styleable.Gallery1);
mGalleryItemBackground = a.getResourceId(
R.styleable.Gallery1_android_galleryItemBackground, 0);
a.recycle();
}
public void addItem(Drawable item) {
drawablesFromUrl.add(item);
}
public int getCount() {
return drawablesFromUrl.size();
}
public Drawable getItem(int position) {
return drawablesFromUrl.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView i = new ImageView(mContext);
i.setImageDrawable(drawablesFromUrl.get(position));
i.setLayoutParams(new Gallery.LayoutParams(150, 120));
i.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
i.setBackgroundResource(mGalleryItemBackground);
return i;
}
}
}
但现在我还有另一个问题:
如果我不在Android Manifest上声明任何SDK,该应用程序在姜饼和HC以及ICS上都能完美运行。但是,如果我声明最小SDK大于1或TargetSDK,该应用程序适用于姜饼,但不适用于HC和ISC。当我点击图库中的图像时,图像查看器上没有任何内容。然而,突然出现了一个toast错误。
此外,如果没有互联网连接,应用程序崩溃。
祝你好运 Tiberio Bozotti
编辑: 我可以删除SDK,但在蜂窝上,它不清楚。这意味着布局不兼容。