2012-03-30 6 views
1

JSON에서 GridView로 이미지를 표시 할 때 문제가 있습니다.JSON에서 GridView 이미지 표시 Android

GalleryActivity.java

public class GalleryActivity extends Activity { 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.gallery_layout); 

     Intent i = getIntent(); 

     String tempid = i.getStringExtra("tempid"); 

     GridView gridView = (GridView) findViewById(R.id.grid_view); 


     gridView.setAdapter(new ImageAdapter(this,tempid)); 


     gridView.setOnItemClickListener(new OnItemClickListener() { 

      public void onItemClick(AdapterView<?> parent, View v, 
        int position, long id) { 

      } 
     }); 
    } 
} 

ImageAdapter.java

public class ImageAdapter extends BaseAdapter { 
    private Context mContext; 

    public String[] mThumbIds; 

    private static String KEY_SUCCESS = "success"; 

    private static String KEY_IMAGES = "images"; 
    private static String KEY_IMAGE = "url_img"; 


    // Constructor 
    public ImageAdapter(Context c,String tempID){ 
     mContext = c; 
     final DealerFunctions dealerFunction = new DealerFunctions(); 
     JSONObject json = dealerFunction.getImages(tempID); 

     try { 

       if (json.getString(KEY_SUCCESS) != null) { 

        String res = json.getString(KEY_SUCCESS); 
        if (Integer.parseInt(res) == 1) { 


         JSONArray imagesFields = json 
           .getJSONArray(KEY_IMAGES); 


         for (int i = 0; i < imagesFields.length(); i++) { 
          JSONObject x = imagesFields.getJSONObject(i); 

          mThumbIds[i] = x.getString(KEY_IMAGE); 


         } 



        } else { 


        } 

       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

    } 


    public int getCount() { 
     return mThumbIds.length; 
    } 


    public Object getItem(int position) { 
     return mThumbIds[position]; 
    } 


    public long getItemId(int position) { 
     return 0; 
    } 


    public View getView(int position, View convertView, ViewGroup parent) {   
     ImageView imageView; 
     if (convertView==null){ 

      imageView = new ImageView(mContext); 
      imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      imageView.setLayoutParams(new GridView.LayoutParams(70, 70)); 

     }else{ 
      imageView = (ImageView) convertView; 
     } 

     imageView.setBackgroundDrawable(Drawable.createFromPath(mThumbIds[position])); 

     return imageView; 
    } 

} 

가 작동하지 않음 ... 내가 응용 프로그램을 실행할 때

는 즉시 문제가 이미지 뷰에서 오는 가정 닫힙니다 .setBackgroundDrawable (Drawable.createFromPath (mThumbIds [position]));

당신의 도움이 필요합니다

다음과 같은 오류가 발생했습니다.

03-27 10:50:12.658: D/AndroidRuntime(1782): Shutting down VM 
03-27 10:50:12.658: W/dalvikvm(1782): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
03-27 10:50:12.678: E/AndroidRuntime(1782): FATAL EXCEPTION: main 
03-27 10:50:12.678: E/AndroidRuntime(1782): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.montalvo.dealer/com.montalvo.dealer.GalleryActivity}: java.lang.NullPointerException 
03-27 10:50:12.678: E/AndroidRuntime(1782):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
03-27 10:50:12.678: E/AndroidRuntime(1782):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
03-27 10:50:12.678: E/AndroidRuntime(1782):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
03-27 10:50:12.678: E/AndroidRuntime(1782):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
03-27 10:50:12.678: E/AndroidRuntime(1782):  at android.os.Handler.dispatchMessage(Handler.java:99) 
03-27 10:50:12.678: E/AndroidRuntime(1782):  at android.os.Looper.loop(Looper.java:123) 
03-27 10:50:12.678: E/AndroidRuntime(1782):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
03-27 10:50:12.678: E/AndroidRuntime(1782):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-27 10:50:12.678: E/AndroidRuntime(1782):  at java.lang.reflect.Method.invoke(Method.java:521) 
03-27 10:50:12.678: E/AndroidRuntime(1782):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
03-27 10:50:12.678: E/AndroidRuntime(1782):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
03-27 10:50:12.678: E/AndroidRuntime(1782):  at dalvik.system.NativeStart.main(Native Method) 
03-27 10:50:12.678: E/AndroidRuntime(1782): Caused by: java.lang.NullPointerException 
03-27 10:50:12.678: E/AndroidRuntime(1782):  at com.montalvo.dealer.ImageAdapter.<init>(ImageAdapter.java:57) 
03-27 10:50:12.678: E/AndroidRuntime(1782):  at com.montalvo.dealer.GalleryActivity.onCreate(GalleryActivity.java:25) 
03-27 10:50:12.678: E/AndroidRuntime(1782):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
03-27 10:50:12.678: E/AndroidRuntime(1782):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
03-27 10:50:12.678: E/AndroidRuntime(1782):  ... 11 more 
03-27 10:50:15.501: I/Process(1782): Sending signal. PID: 1782 SIG: 9 

답변

0

현재 일을 믹싱의 ViewHolder의 당신이 사용했던이

public View getView(int position, View convertView, ViewGroup parent) {   
    ImageView imageView; 
    imageView = new ImageView(mContext); 
    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
    imageView.setLayoutParams(new GridView.LayoutParams(70, 70)); 


    imageView.setBackgroundDrawable(Drawable.createFromPath(mThumbIds[position])); 

    return imageView; 
} 

패턴입니다 사용하지만 당신은 어떤 뷰를 만들 수 없습니다. ViewHolder 모델을 사용하려면

  1. 먼저 ImageView로 xml을 만듭니다.
  2. ImageView를 사용하여 ImageAdapter에 ViewHolder 클래스를 만듭니다.
  3. getView() 메소드에서 xml을 확장합니다.
  4. convertview == null의 경우에 대한 viewholder 만들기
  5. convertholview를 TAG로 설정합니다.
  6. else condtion에서 이전에 작성된 뷰 소유자를 convertview에 할당하십시오.
+0

코드를 배치하여 viewHolder를 더 잘 이해할 수 있습니다. 감사합니다. – zetanova