2016-08-05 2 views
-1

Я создаю галерею изображений, используя gridview и адаптер изображения. Когда я передаю статические значения из папки проекта в адаптер изображения, он отлично работает. Но когда я попытался получить список пути изображения из базы данных, а затем заполнить с той же процедурой, что дает ошибкуImageAdapter не работает со строковым массивом. Невозможно понять ошибку здесь

Это мой адаптер

public class ImageAdapter extends BaseAdapter { 

private Context context; 

GetData findData = new GetData(); 



public String[] images = findData.getImageList(1); 

public ImageAdapter(Context c){ 
    context = c; 
} 

@Override 
public int getCount() { 
    return images.length; 
} 

@Override 
public Object getItem(int position) { 
    return images[position]; 
} 

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

@Override 
public View getView(int position, View view, ViewGroup viewGroup) { 
    ImageView imageView = new ImageView(context); 
    imageView.setImageResource(Integer.parseInt(images[position])); 
    imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 
    imageView.setLayoutParams(new GridView.LayoutParams(240,240)); 
    return imageView; 
} 
} 

изображение И это функция, которую я звоню, чтобы получить Строка списка массив изображения путей:

public String[] getImageList(Integer schoolId) { 
    String[] imageList = new String[500]; 

    try { 

     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 

     Class.forName("com.mysql.jdbc.Driver"); 
     Connection conn = DriverManager.getConnection(DB_URL, DBuser, DBpassword); 


     Statement st = conn.createStatement(); 
     ResultSet rs = st.executeQuery("select `image_path` FROM `photo_gallery` WHERE `school_id`=" + schoolId); 

     //ResultSetMetaData rsmd = rs.getMetaData(); 

     int i = 0; 
     while (rs.next()) { 
      if (rs != null) { 
       imageList[i] = rs.getString("image_path"); 
       i++; 
      } else { 
       continue; 
      } 
     } 


    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return imageList; 
} 

и это мой журнал ошибок

08-05 12:29:45.458 12782-12782/com.adt.alphadev.itdp E/AndroidRuntime: FATAL EXCEPTION: main 
                       Process: com.adt.alphadev.itdp, PID: 12782 
                    java.lang.NumberFormatException: Invalid int: "null" 
                     at java.lang.Integer.invalidInt(Integer.java:138) 
                     at java.lang.Integer.parseInt(Integer.java:358) 
                     at java.lang.Integer.parseInt(Integer.java:334) 
                     at com.adt.alphadev.itdp.Hm.ImageAdapter.getView(ImageAdapter.java:60) 
                     at android.widget.AbsListView.obtainView(AbsListView.java:2347) 
                     at android.widget.GridView.onMeasure(GridView.java:1060) 
                     at android.view.View.measure(View.java:17547) 
                     at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:727) 
                     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:463) 
                     at android.view.View.measure(View.java:17547) 
                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535) 
                     at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:607) 
                     at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:674) 
                     at android.view.View.measure(View.java:17547) 
                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535) 
                     at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) 
                     at android.support.v7.internal.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:124) 
                     at android.view.View.measure(View.java:17547) 
                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535) 
                     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) 
                     at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) 
                     at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) 
                     at android.view.View.measure(View.java:17547) 
                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535) 
                     at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) 
                     at android.view.View.measure(View.java:17547) 
                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535) 
                     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) 
                     at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) 
                     at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) 
                     at android.view.View.measure(View.java:17547) 
                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535) 
                     at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) 
                     at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2615) 
                     at android.view.View.measure(View.java:17547) 
                     at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2015) 
                     at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1173) 
                     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1379) 
                     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061) 
                     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5885) 
                     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) 
                     at android.view.Choreographer.doCallbacks(Choreographer.java:580) 
                     at android.view.Choreographer.doFrame(Choreographer.java:550) 
                     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) 
                     at android.os.Handler.handleCallback(Handler.java:739) 
                     at android.os.Handler.dispatchMessage(Handler.java:95) 
                     at android.os.Looper.loop(Looper.java:135) 
                     at android.app.ActivityThread.main(ActivityThread.java:5254) 
                     at java.lang.reflect.Method.invoke(Native Method) 
                     at java.lang.reflect.Method.invoke(Method.java:372) 
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

Что здесь происходит ....

ответ

1

Проблема заключается здесь

imageView.setImageResource(Integer.parseInt(images[position])); 

Вы пытаетесь преобразовать строку (путь к изображению) к целому и предусмотреть, что целое число setImageResource. Это невозможно.

Во-первых, потому что setImageResource принимает обратный идентификатор (который должен находиться внутри apk).

Во-вторых, я ожидаю, что путь изображения может быть на SD, поэтому вы должны загружать изображения по-другому.

+0

изображение находится на сервере LOCALHOST, и я пытаюсь получить путь здесь. Путь находится в типе String, и я пытаюсь загрузить его по позиции индекса массива. Есть ли лучший способ получить список, а не массив String? – walimbeakshay

0

imageView.setImageResource (Integer.parseInt (images [position]));

В этом проблема. Во-первых, ваши изображения [позиция] - это нуль .Проверьте этот массив.

Во-вторых, код должен быть:

imageView.setImageResource(images[position]); 
+0

Первоначально я сделал это только, но затем андроид-студия попросила меня разобрать его на int value – walimbeakshay

Смежные вопросы