2014-04-07 134 views
0

我有麻烦使用通用的图像加载程序库从自定义网址获取图像中的片段,这里是我使用的代码: 我不知道为什么它不工作,因为它应该工作。任何建议的帮助将不胜感激!加载图像

最好的问候,

public class Fragment2 extends Fragment { 

public Fragment2(){} 

String[] imageUrls; 
AbsListViewBaseActivity aa = new AbsListViewBaseActivity(); 

DisplayImageOptions options; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.fragment2, container, false); 

    Bundle bundle = getActivity().getIntent().getExtras(); 
    imageUrls = bundle.getStringArray(Extra.IMAGES); 

    options = new DisplayImageOptions.Builder() 
     .showImageOnLoading(R.drawable.ic_stub) 
     .showImageForEmptyUri(R.drawable.ic_empty) 
     .showImageOnFail(R.drawable.ic_error) 
     .cacheInMemory(true) 
     .cacheOnDisc(true) 
     .considerExifParams(true) 
     .bitmapConfig(Bitmap.Config.RGB_565) 
     .build(); 

    aa.listView = (GridView) rootView.findViewById(R.id.gridview); 
    ((GridView) aa.listView).setAdapter(new ImageAdapter()); 
    aa.listView.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      startImagePagerActivity(position); 
     } 

    }); 
    return rootView; 
} 

private void startImagePagerActivity(int position) { 
    Intent intent = new Intent(getActivity(), ImagePagerActivity.class); 
    intent.putExtra(Extra.IMAGES, imageUrls); 
    intent.putExtra(Extra.IMAGE_POSITION, position); 
    startActivity(intent); 
} 

public class ImageAdapter extends BaseAdapter { 
    @Override 
    public int getCount() { 
     return imageUrls.length; 
    } 

    @Override 
    public Object getItem(int position) { 
     return null; 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     final ViewHolder holder; 
     View view = convertView; 
     if (view == null) { 
      view = getActivity().getLayoutInflater().inflate(R.layout.item_grid_image, parent, false); 
      holder = new ViewHolder(); 
      assert view != null; 
      holder.imageView = (ImageView) view.findViewById(R.id.image); 
      holder.progressBar = (ProgressBar) view.findViewById(R.id.progress); 
      view.setTag(holder); 
     } else { 
      holder = (ViewHolder) view.getTag(); 
     } 

     aa.imageLoader.displayImage(imageUrls[position], holder.imageView, options, new SimpleImageLoadingListener() { 
            @Override 
            public void onLoadingStarted(String imageUri, View view) { 
             holder.progressBar.setProgress(0); 
             holder.progressBar.setVisibility(View.VISIBLE); 
            } 

            @Override 
            public void onLoadingFailed(String imageUri, View view, 
              FailReason failReason) { 
             holder.progressBar.setVisibility(View.GONE); 
            } 

            @Override 
            public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { 
             holder.progressBar.setVisibility(View.GONE); 
            } 
           }, new ImageLoadingProgressListener() { 
            @Override 
            public void onProgressUpdate(String imageUri, View view, int current, 
              int total) { 
             holder.progressBar.setProgress(Math.round(100.0f * current/total)); 
            } 
           } 
     ); 

     return view; 
    } 

    class ViewHolder { 
     ImageView imageView; 
     ProgressBar progressBar; 
    } 

} 

} 

代码布局:

<?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:gravity="center" 
android:horizontalSpacing="4dip" 
android:numColumns="3" 
android:stretchMode="columnWidth" 
android:verticalSpacing="4dip" 
android:padding="4dip" /> 

和清单文件:

<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.SET_DEBUG_APP"></uses-permission> 

<application 
    android:name="MyApplication" 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="com.example.loadimage.SplashScreen" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
     <activity 
     android:name="zeal.kingdom.koreamania.Fragment1" 
     android:label="@string/app_name" > 
    </activity> 
<activity 
     android:name="com.example.loadimage.Fragment2" 
     android:label="@string/app_name" > 
    </activity> 
    <activity 
     android:name="com.example.loadimage.Fragment3" 
     android:label="@string/app_name" > 
    </activity> 
    <activity 
     android:name="com.example.loadimage.Fragment4" 
     android:label="@string/app_name" > 
    </activity> 
      <activity 
     android:name="com.example.loadimage.Fragment5" 
     android:label="@string/app_name" > 
    </activity> 
    <activity 
     android:name="com.example.loadimage.Fragment6" 
     android:label="@string/app_name"  
android:configChanges="locale|orientation|keyboardHidden" 
android:noHistory="true" > 
    </activity> 

      <activity 
     android:name="com.example.loadimage.Fragment7" 
     android:label="@string/app_name" > 
    </activity> 


    <activity 
     android:name="com.example.loadimage.MainActivity" 
     android:label="@string/app_name" > 
    </activity> 

</application> 

日志猫:

Thread [<1> main] (Suspended (exception NullPointerException)) 
<VM does not provide monitor information> 
Fragment2.onCreateView(LayoutInflater, ViewGroup, Bundle) line: 42 
Fragment2(Fragment).performCreateView(LayoutInflater, ViewGroup, Bundle) line: 1700 
FragmentManagerImpl.moveToState(Fragment, int, int, int, boolean) line: 890 
FragmentManagerImpl.moveToState(int, int, int, boolean) line: 1062 
BackStackRecord.run() line: 684 
FragmentManagerImpl.execPendingActions() line: 1447 
FragmentManagerImpl$1.run() line: 443 
Handler.handleCallback(Message) line: 733 
Handler.dispatchMessage(Message) line: 95 
Looper.loop() line: 136 
ActivityThread.main(String[]) line: 5017  
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method] 
Method.invoke(Object, Object...) line: 515 
ZygoteInit$MethodAndArgsCaller.run() line: 779 
ZygoteInit.main(String[]) line: 595 
NativeStart.main(String[]) line: not available [native method] 

42: imageUrls = bundle.getStringArray(Extra.IMAGES); 
1700: return onCreateView(inflater, container, savedInstanceState); 
890: f.mView = f.performCreateView(f.getLayoutInflater(
moveToState(f, newState, transit, transitStyle, false); 
+0

任何答案里面片段欢迎从互联网加载的图片! –

+0

你如何设置你的'ImageLoader'实例和'RequestQueue'实例?有没有任何理由你不使用'NetworkImageView'? –

+0

嗨,亚当,我在此期间切换到通用图像加载器,希望修复,但仍然出现错误。我更新了我使用的代码:)非常感谢您的帮助! 尽管如此,任何在片段中使用gridview的代码都可以。 –

回答

0

我onCreateView

imageLoader = ImageLoader.getInstance(); 
imageLoader.init(ImageLoaderConfiguration.createDefault(getActivity())); 

imageUrls = IMAGES; 

添加该代码,并宣布

import static com.example........app.Constants.IMAGES; 
+0

你能解释一下你的答案,而不是仅仅将代码粘贴? – DavidG

1

连我自己都面临着同样的问题。这个问题与Fragment不同。问题是,我在那里试图加载图像的ImageView的宽度和高度为“WRAP_CONTENT”和环球图像装载机将不能接受。所以,我们需要指定宽度和ImageView的高度像“100dp”什么的。希望它能帮助:)