2011-10-03 75 views
2

我已經完成填充ImageAdapter與INT []


我在我的佈局中創建一個GridView。這GridView我想填寫我創建的Google文檔的ImageAdapter:Hello GridView

我的照片的圖片路徑,我保存到我的datbase,我想填寫它。因爲在我的數據庫中,一切都是我在我的Activity中寫入的一個String,它將String []更改爲Int [],但我無法通過ImageAdapter訪問它。之後,我申請了尼基塔夫人告訴我的變化。此外,我更改爲lil的東西,將String []更改爲int [](現在正在工作)。

問題


什麼我需要改變,以獲得INT []我ImageAdapter它導入我的照片,他們都顯示在GrindView。 現在我有一個空指針異常的:

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

驗證碼:


這是我SmileyConfigActivity.java的代碼:

package de.retowaelchli.filterit; 

import de.retowaelchli.filterit.database.SmileyDBAdapter; 
import de.retowaelchli.filterit.stats.ImageAdapter; 
import android.app.Activity; 
import android.content.Intent; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.GridView; 


public class SFilterConfigActivity extends Activity { 

    //Variablen deklarieren 
    private String name; 
    private String keyword; 
    private Integer[] info; 
    private SmileyDBAdapter SmileyHelper; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.sfilter_config); 

     SmileyHelper = new SmileyDBAdapter(this); 

     getImages(); 

    } 


public Integer[] getImages(){ 



    SmileyHelper.open(); 

    Cursor c = SmileyHelper.getAllSmileys(); 
    startManagingCursor(c); 

    String[] picture = new String[] { SmileyDBAdapter.INFO }; 

    int i; 
    for (i=0;i< picture.length-1;i++) { 
     info[i]=Integer.parseInt(picture[i+1]); 

    } 

    SmileyHelper.close(); 

    //Hier wird die Grindview gefüllt 
    GridView gridview = (GridView) findViewById(R.id.SmileyGrind); 
    gridview.setAdapter(new ImageAdapter(this, info)); 

    return info; 

} 



public void onClickSConfigSave(View v){ 

    EditText edtTextName = (EditText)findViewById(R.id.SFConfigName); 
    EditText edtTextKeyword = (EditText)findViewById(R.id.SFConfigKeyword); 

    name = edtTextName.getText().toString(); 
    keyword = edtTextKeyword.getText().toString(); 

    final Intent i = new Intent(this, SmileyActivity.class); 
    startActivity(i); 
    } 
} 

這是準則我的ImageAdapter.java:

package de.retowaelchli.filterit.stats; 

import android.content.Context; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.GridView; 
import android.widget.ImageView; 


import de.retowaelchli.filterit.SFilterConfigActivity; 

public class ImageAdapter extends BaseAdapter { 

    private Context mContext; 

    public ImageAdapter(Context c, Integer[] imageIds) { 
     mContext = c; 
     mThumbIds = imageIds; 
    } 

    //This Guy down here is giving me the NullpointerExcpetion now 
    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; 
} 

這是我的照片存儲到Datbase(我只保存到地方,他們所在的位置):

int drawableID = context.getResources().getIdentifier("angel", "drawable", getPackageName()); 
    iv.setImageResource(drawableID); 

    String info = String.valueOf(drawableID); 

    mDbHelper.open(); 

    mDbHelper.createSmiley("You have received a heavenly message", info); 
    mDbHelper.close(); 

這是錯誤日誌,我得到:

10-04 13:26:25.776: ERROR/AndroidRuntime(10099): FATAL EXCEPTION: main 
10-04 13:26:25.776: ERROR/AndroidRuntime(10099): java.lang.RuntimeException: Unable to start activity ComponentInfo{de.retowaelchli.filterit/de.retowaelchli.filterit.SFilterConfigActivity}: java.lang.NullPointerException 
10-04 13:26:25.776: ERROR/AndroidRuntime(10099):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1816) 
10-04 13:26:25.776: ERROR/AndroidRuntime(10099):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1837) 
10-04 13:26:25.776: ERROR/AndroidRuntime(10099):  at android.app.ActivityThread.access$1500(ActivityThread.java:132) 
10-04 13:26:25.776: ERROR/AndroidRuntime(10099):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1033) 
10-04 13:26:25.776: ERROR/AndroidRuntime(10099):  at android.os.Handler.dispatchMessage(Handler.java:99) 
10-04 13:26:25.776: ERROR/AndroidRuntime(10099):  at android.os.Looper.loop(Looper.java:143) 
10-04 13:26:25.776: ERROR/AndroidRuntime(10099):  at android.app.ActivityThread.main(ActivityThread.java:4196) 
10-04 13:26:25.776: ERROR/AndroidRuntime(10099):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-04 13:26:25.776: ERROR/AndroidRuntime(10099):  at java.lang.reflect.Method.invoke(Method.java:507) 
10-04 13:26:25.776: ERROR/AndroidRuntime(10099):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
10-04 13:26:25.776: ERROR/AndroidRuntime(10099):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
10-04 13:26:25.776: ERROR/AndroidRuntime(10099):  at dalvik.system.NativeStart.main(Native Method) 
10-04 13:26:25.776: ERROR/AndroidRuntime(10099): Caused by: java.lang.NullPointerException 
10-04 13:26:25.776: ERROR/AndroidRuntime(10099):  at de.retowaelchli.filterit.stats.ImageAdapter.getCount(ImageAdapter.java:25) 
10-04 13:26:25.776: ERROR/AndroidRuntime(10099):  at android.widget.GridView.setAdapter(GridView.java:131) 
10-04 13:26:25.776: ERROR/AndroidRuntime(10099):  at de.retowaelchli.filterit.SFilterConfigActivity.getImages(SFilterConfigActivity.java:54) 
10-04 13:26:25.776: ERROR/AndroidRuntime(10099):  at de.retowaelchli.filterit.SFilterConfigActivity.onCreate(SFilterConfigActivity.java:30) 
10-04 13:26:25.776: ERROR/AndroidRuntime(10099):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093) 
10-04 13:26:25.776: ERROR/AndroidRuntime(10099):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1780) 
10-04 13:26:25.776: ERROR/AndroidRuntime(10099):  ... 11 more 

Thx爲您提供幫助!

+0

我不太明白。在'getImages'方法中,您從數據庫獲取所有圖像並轉換爲整數。爲什麼你不能使用這個數組並將它作爲構造函數參數傳遞給'ImageAdapter'? –

+0

我試過了,但它沒有工作。我導入我的活動像這樣'import de.retowaelchli.filterit.SFilterConfigActivity;''事後我擴展像這樣'私人Integer [] mThumbIds = { SFilterConfigActivity.getImages(); };'但我沒有工作,我只是成爲這個錯誤:_Change getImages靜態Intger [] getImages,如果我這樣做不起作用.. – safari

+0

所以請錯過貝洛格拉佐夫,我做錯了什麼:( – safari

回答

1

似乎有很多相關的信息在這裏失蹤,但如果你填寫在空白處我會更新答案。第一個問題是你在getAllSmileys函數中檢索什麼?

你需要明白的是,遊標就像結果的內存表。所以你需要通過使用移動命令來告訴光標要從哪個記錄中讀取記錄,否則它將被刪除。因此,假設您的smilleys存儲在SmileyDBAdapter中。INFO列,那麼你可以像這樣進行檢索:

SmileyHelper.open(); 

Cursor c = SmileyHelper.getAllSmileys(); 

if(c!=null) 
{ 
    int i=0; 
    info = new int[c.getCount()](); 

    //get the column index 
    int infoIndex = c.getColumnIndex(SmileyDBAdapter.INFO); 

    while(c.moveToNext()){ 
     String infoItem = c.getString(infoIndex); 
     int infoItemInteger = Integer.parseInt(infoItem); 
     info[i++] =infoItemInteger; 
    } 
} 

c.close(); 

SmileyHelper.close(); 

您存儲圖像的ID數據庫作爲正在使事情更加複雜的字符串。沒有必要分析和確定可繪製資源ID是否進出數據庫中的文本列。只需將列類型更改爲整數,並始終使用圖像的整數。

您可以簡單地使用Cursor.getInt()來檢索值。

+0

這些'int'type在這裏被標記爲錯誤,我得到這個消息:int,Dimesions在這個標記之後除外。 -.- – safari

+0

對不起'布特那... int是一個簡單的數據類型。可能更好地堅持簡單的陣列 – Merlin

+0

順便說一句Integer是一個圍繞int的包裝類,所以你可以使用它。我已經調整了使用簡單int的答案,儘管 – Merlin

1

嘗試ImageAdapter

public ImageAdapter(Context c, Integer[] imageIds) { 
    mContext = c; 
    mThumbIds = imageIds; 
} 

創建構造函數,並在getImagesMethod取代

gridview.setAdapter(new ImageAdapter(this)); 

gridview.setAdapter(new ImageAdapter(this, info)); 
+0

對於'你爲我'改變了'Context c'right?和'mContexx = c;'你改變了'mContect = c;'對嗎?我改變了它,但它仍然無法工作我還在做什麼錯,對不起im pritty新的Android和Java – safari

+0

你好Misses Beloglazov,我更新了代碼aboth,並試圖使其工作幾個小時,我仍然沒有得到我做錯了什麼,我仍然無法編譯它...此外,我試圖設置私人整數[] mThumbIds'也沒有工作.... :( – safari

+1

@safari在'getImages'方法你創建數組'圖片'數組,其中包含字符串''信息'',然後你試着將它解析爲數字,這就是爲什麼它會拋出異常。 –

1

我正在嘗試這個,發現這個解決方案。唯一的工作。

public Integer[] getImages(){ 

     SmileyHelper.open(); 

     Cursor c = SmileyHelper.getAllSmileys();  

     ArrayList<Integer> infoList = new ArrayList<Integer>(); 

     c.getColumnIndex(SmileyDBAdapter.INFO); 
     int ColumnIndex = c.getColumnIndex(SmileyDBAdapter.INFO); 

     if(c!=null) 
     { 

      while(c.moveToNext()){ 
       String infoItem = c.getString(ColumnIndex); 
       infoList.add(Integer.parseInt(infoItem)); 
      } 
     } 

     info = infoList.toArray(new Integer[]{}); 

     c.close(); 


     SmileyHelper.close(); 

     //Hier wird die Grindview gefüllt 
     GridView gridview = (GridView) findViewById(R.id.SmileyGrind); 
     gridview.setAdapter(new ImageAdapter(this, info)); 

     return info; 

    } 
+1

+1用於自己制定最後一位 – Merlin

+0

在這種情況下,列表可能會矯枉過正。性能明智,你可能想要設置列表的初始大小,以確保內存管理不是在嘗試爲你調整大小。 – Merlin