Первый постер!
Я новичок в разработке для Android и без проблем следую учебным пособиям Google HelloView ... до учебного пособия HelloGridView. По некоторым причинам я не могу получить изображения для отображения, только черный фон. Первоначально я следовал этому уроку:
http://developer.android.com/resources/tutorials/views/hello-gridview.html
но перешел к этому почти идентичному:
http://developer.android.com/guide/tutorials/views/hello-gridview.html
, чтобы устранить некоторые дополнительные сложности, удалив код OnItemClickListener и сузив мои возможные проблемные области. Мой код точно такой же, как предоставленный код, буквально скопированный и вставленный. Я даже скачал исходные файлы примеров из учебника и поместил их в папку res \ drawable, и код R, похоже, успешно их распознал и соответствующим образом обновил сгенерированный код. Я использую Android target 1.5 и пробовал эту программу как на своем Droid X, так и на эмуляторе Android. У меня есть все мои импорта и код компилируется и работает нормально. Тем не менее, моя деятельность отображает только черный экран; изображения не отображаются. Когда я нажимаю на черный фон, появляются оранжевые квадраты там, где должны быть изображения. Я нашел одну или две публикации, в которых упоминалась эта проблема, но она всегда была связана с более крупной, более очевидной проблемой и никогда не решалась. Я перечислю свой код и LogCat ниже для справки.
Я заметил, что мой LogCat упоминал:
WARN/ImageView(364): Unable to find resource: 2130837507
что привело меня к этой теме:
Почему setImageResource ничего не отображает?
подробное описание возможного обходного пути с использованием setImageDrawable вместо setImageResource. Я реализовал это, используя следующую строку кода:
imageView.setImageDrawable(mContext.getResources().getDrawable(mThumbIds[position]));
однако, это просто привело к исключению Resources $ NotFoundException, которое приводило к сбою моего кода (также задокументировано ниже).
В заключение
Я считаю, что учебник по Android не должен требовать обходного пути, поэтому я предполагаю, что у меня возникли какие-то проблемы с конфигурацией. После нескольких часов поисков и попыток я не нашел решения, поэтому решил, что оно требует некоторого обсуждения. Кроме того, учитывая, что это мой первый пост, пожалуйста, дайте мне знать, если вы видите какие-либо вопиющие ошибки. Я заранее прошу прощения за предстоящий Wall-O-код, хотя я думаю, что слишком мало данных может быть хуже, чем слишком много. : D
Спасибо, ребята!
MarnBeast
UPDATE
Я попытался использовать R.drawable.icon в моих mThumbIds, чередуя это и одну из моих картинок. Ни одна из картинок не обнаружилась, но значки появились. Затем я попробовал версию моей картинки в формате .png, но это тоже не сработало. Я скопировал изображение icon.png и отредактировал его в виде краски (поместил усы на андроидного парня: D) и сохранил его как dummyicon.png. Я чередовал это и значок, но это тоже не сработало. Наконец, я избавился от всех ссылок на значки и просто использовал свое изображение в формате png, но, как ни странно, при запуске ВСЕ изображения показывались как значки, хотя я не ссылаюсь на них в mThumbIds! Это отличается от предыдущего поведения, когда вообще ничего не отображалось. Я поменял пару на dummyicon, и при запуске эти изображения просто не появлялись / были просто черными. Все остальные изображения (одно преобразованное в png изображение, повторенное в mThumbIds) по-прежнему отображаются в виде значков.
Наконец, я снова заменил мои преобразованные ссылки на изображения в формате png на значок, чередуя между значком и dummyicon, и теперь ни один из них не появился - снова просто черный экран. Таким образом, кажется, что dummyicon и icon оба не дают ничего, когда ссылаются, только черное пространство, но мое преобразованное изображение png - chloie1.png - выдает icon.png. Я добавил другое изображение - chloie2.png - и чередовал между chloie1 и chloie2, но только chloie1 показывает изображение значка. Таким образом, это состояние моих mThumbIds на данный момент:
private Integer[] mThumbIds = {
R.drawable.chloie1, R.drawable.chloie2,
R.drawable.chloie1, R.drawable.chloie2,
R.drawable.chloie1, R.drawable.chloie2,
R.drawable.chloie1, R.drawable.chloie2,
R.drawable.chloie1, R.drawable.chloie2,
R.drawable.chloie1, R.drawable.chloie2,
R.drawable.chloie1, R.drawable.chloie2,
R.drawable.chloie1, R.drawable.chloie2,
R.drawable.chloie1, R.drawable.chloie2,
R.drawable.chloie1, R.drawable.chloie2,
R.drawable.chloie1, R.drawable.chloie2
};
и это вывод эмулятора:
РЕШЕНИЕ!
Как оказалось, по какой-то причине этот урок не будет работать для меня с изображениями в формате JPEG. Кроме того, я сделал глупое предположение и просто изменил расширение с .jpg на .png, которое все еще работало в средствах просмотра изображений, но все еще было признано андроидом как jpg. Теперь, когда я отредактировал каждое изображение в рисовании, а затем сохранил его в формате PNG, кажется, все работает нормально.
ОДНАКО Я все еще чувствую, что здесь есть проблема. Я предполагаю, что Android должен обрабатывать изображения .jpg, учитывая, что они предоставили JPEG в качестве образцов изображений. Если у кого-то есть идея относительно того, почему PNG работает, а JPG нет, пожалуйста, ответьте. В то же время, это простое исправление отлично подойдет.
Спасибо за помощь!
СПИСОК ЛИТЕРАТУРЫ
main.xml:
<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:columnWidth="90dp"
android:numColumns="auto_fit"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:stretchMode="columnWidth"
android:gravity="center"
/>
HelloGridViewActivity.java
package com.marnbeast.android;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
public class HelloGridViewActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
GridView gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(new ImageAdapter(this));
}
}
ImageAdapter.java
package com.marnbeast.android;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
public class ImageAdapter extends BaseAdapter {
private Context mContext;
public ImageAdapter(Context c) {
mContext = c;
}
public int getCount() {
return mThumbIds.length;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) { // if it's not recycled, initialize some attributes
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
} else {
imageView = (ImageView) convertView;
}
imageView.setImageResource(mThumbIds[position]);
return imageView;
}
// references to our images
private Integer[] mThumbIds = {
R.drawable.sample_2, R.drawable.sample_3,
R.drawable.sample_4, R.drawable.sample_5,
R.drawable.sample_6, R.drawable.sample_7,
R.drawable.sample_0, R.drawable.sample_1,
R.drawable.sample_2, R.drawable.sample_3,
R.drawable.sample_4, R.drawable.sample_5,
R.drawable.sample_6, R.drawable.sample_7,
R.drawable.sample_0, R.drawable.sample_1,
R.drawable.sample_2, R.drawable.sample_3,
R.drawable.sample_4, R.drawable.sample_5,
R.drawable.sample_6, R.drawable.sample_7
};
}
LogCat Невозможно найти ресурс:
07-24 06:00:04.564: WARN/ResourceType(364): getEntry failing because entryIndex 3 is beyond type entryCount 1
07-24 06:00:04.564: WARN/ResourceType(364): Failure getting entry for 0x7f020003 (t=1 e=3) in package 0: 0x80000001
07-24 06:00:04.584: WARN/ImageView(364): Unable to find resource: 2130837507
07-24 06:00:04.584: WARN/ImageView(364): android.content.res.Resources$NotFoundException: Resource ID #0x7f020003
07-24 06:00:04.584: WARN/ImageView(364): at android.content.res.Resources.getValue(Resources.java:891)
07-24 06:00:04.584: WARN/ImageView(364): at android.content.res.Resources.getDrawable(Resources.java:579)
07-24 06:00:04.584: WARN/ImageView(364): at android.widget.ImageView.resolveUri(ImageView.java:485)
07-24 06:00:04.584: WARN/ImageView(364): at android.widget.ImageView.setImageResource(ImageView.java:270)
07-24 06:00:04.584: WARN/ImageView(364): at com.marnbeast.android.ImageAdapter.getView(ImageAdapter.java:41)
07-24 06:00:04.584: WARN/ImageView(364): at android.widget.AbsListView.obtainView(AbsListView.java:1274)
07-24 06:00:04.584: WARN/ImageView(364): at android.widget.GridView.onMeasure(GridView.java:934)
07-24 06:00:04.584: WARN/ImageView(364): at android.view.View.measure(View.java:7964)
07-24 06:00:04.584: WARN/ImageView(364): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3023)
07-24 06:00:04.584: WARN/ImageView(364): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
07-24 06:00:04.584: WARN/ImageView(364): at android.view.View.measure(View.java:7964)
07-24 06:00:04.584: WARN/ImageView(364): at android.widget.LinearLayout.measureVertical(LinearLayout.java:464)
07-24 06:00:04.584: WARN/ImageView(364): at android.widget.LinearLayout.onMeasure(LinearLayout.java:278)
07-24 06:00:04.584: WARN/ImageView(364): at android.view.View.measure(View.java:7964)
07-24 06:00:04.584: WARN/ImageView(364): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3023)
07-24 06:00:04.584: WARN/ImageView(364): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
07-24 06:00:04.584: WARN/ImageView(364): at android.view.View.measure(View.java:7964)
07-24 06:00:04.584: WARN/ImageView(364): at android.view.ViewRoot.performTraversals(ViewRoot.java:763)
07-24 06:00:04.584: WARN/ImageView(364): at android.view.ViewRoot.handleMessage(ViewRoot.java:1633)
07-24 06:00:04.584: WARN/ImageView(364): at android.os.Handler.dispatchMessage(Handler.java:99)
07-24 06:00:04.584: WARN/ImageView(364): at android.os.Looper.loop(Looper.java:123)
07-24 06:00:04.584: WARN/ImageView(364): at android.app.ActivityThread.main(ActivityThread.java:4363)
07-24 06:00:04.584: WARN/ImageView(364): at java.lang.reflect.Method.invokeNative(Native Method)
07-24 06:00:04.584: WARN/ImageView(364): at java.lang.reflect.Method.invoke(Method.java:521)
07-24 06:00:04.584: WARN/ImageView(364): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
07-24 06:00:04.584: WARN/ImageView(364): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
07-24 06:00:04.584: WARN/ImageView(364): at dalvik.system.NativeStart.main(Native Method)
LogCat Resource Not Fount Exception после обхода проблемы с .setImageDrawable:
07-24 07:02:50.234: ERROR/AndroidRuntime(390): Uncaught handler: thread main exiting due to uncaught exception
07-24 07:02:50.245: ERROR/AndroidRuntime(390): android.content.res.Resources$NotFoundException: Resource ID #0x7f020003
07-24 07:02:50.245: ERROR/AndroidRuntime(390): at android.content.res.Resources.getValue(Resources.java:891)
07-24 07:02:50.245: ERROR/AndroidRuntime(390): at android.content.res.Resources.getDrawable(Resources.java:579)
07-24 07:02:50.245: ERROR/AndroidRuntime(390): at com.marnbeast.android.ImageAdapter.getView(ImageAdapter.java:40)
07-24 07:02:50.245: ERROR/AndroidRuntime(390): at android.widget.AbsListView.obtainView(AbsListView.java:1274)
07-24 07:02:50.245: ERROR/AndroidRuntime(390): at android.widget.GridView.onMeasure(GridView.java:934)
07-24 07:02:50.245: ERROR/AndroidRuntime(390): at android.view.View.measure(View.java:7964)
07-24 07:02:50.245: ERROR/AndroidRuntime(390): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3023)
07-24 07:02:50.245: ERROR/AndroidRuntime(390): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
07-24 07:02:50.245: ERROR/AndroidRuntime(390): at android.view.View.measure(View.java:7964)
07-24 07:02:50.245: ERROR/AndroidRuntime(390): at android.widget.LinearLayout.measureVertical(LinearLayout.java:464)
07-24 07:02:50.245: ERROR/AndroidRuntime(390): at android.widget.LinearLayout.onMeasure(LinearLayout.java:278)
07-24 07:02:50.245: ERROR/AndroidRuntime(390): at android.view.View.measure(View.java:7964)
07-24 07:02:50.245: ERROR/AndroidRuntime(390): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3023)
07-24 07:02:50.245: ERROR/AndroidRuntime(390): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
07-24 07:02:50.245: ERROR/AndroidRuntime(390): at android.view.View.measure(View.java:7964)
07-24 07:02:50.245: ERROR/AndroidRuntime(390): at android.view.ViewRoot.performTraversals(ViewRoot.java:763)
07-24 07:02:50.245: ERROR/AndroidRuntime(390): at android.view.ViewRoot.handleMessage(ViewRoot.java:1633)
07-24 07:02:50.245: ERROR/AndroidRuntime(390): at android.os.Handler.dispatchMessage(Handler.java:99)
07-24 07:02:50.245: ERROR/AndroidRuntime(390): at android.os.Looper.loop(Looper.java:123)
07-24 07:02:50.245: ERROR/AndroidRuntime(390): at android.app.ActivityThread.main(ActivityThread.java:4363)
07-24 07:02:50.245: ERROR/AndroidRuntime(390): at java.lang.reflect.Method.invokeNative(Native Method)
07-24 07:02:50.245: ERROR/AndroidRuntime(390): at java.lang.reflect.Method.invoke(Method.java:521)
07-24 07:02:50.245: ERROR/AndroidRuntime(390): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
07-24 07:02:50.245: ERROR/AndroidRuntime(390): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
07-24 07:02:50.245: ERROR/AndroidRuntime(390): at dalvik.system.NativeStart.main(Native Method)
РЕДАКТИРОВАТЬ: Я включаю файл R, чтобы убедиться, что изображения правильно ссылки.
/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* This class was automatically generated by the
* aapt tool from the resource data it found. It
* should not be modified by hand.
*/
package com.marnbeast.android;
public final class R {
public static final class attr {
}
public static final class drawable {
public static final int icon=0x7f020000;
public static final int sample_0=0x7f020001;
public static final int sample_1=0x7f020002;
public static final int sample_2=0x7f020003;
public static final int sample_3=0x7f020004;
public static final int sample_4=0x7f020005;
public static final int sample_5=0x7f020006;
public static final int sample_6=0x7f020007;
public static final int sample_7=0x7f020008;
}
public static final class id {
public static final int gridview=0x7f050000;
}
public static final class layout {
public static final int main=0x7f030000;
}
public static final class string {
public static final int app_name=0x7f040001;
public static final int hello=0x7f040000;
}
}