2012-11-24 30 views
0

與現場的EditText提交按鈕我有一個網格佈局在屏幕的頂部選擇複選框的IDS。我正在實現基礎適配器來填充網格佈局的值。應用拋出空指針異常,當我們試圖捕捉在Android的

我使用的代碼如下。我的主要活動

public class MainActivityDynamic extends Activity{ 

GridView gridView; 
GridObject[] planets; 
ArrayList<GridObject> myObjects; 
Button Go; 
ImageAdapter adapter; 
int position; 
boolean[] itemChecked; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.gridlayout); 
    Go = (Button)findViewById(R.id.bGO); 
    gridView = (GridView) findViewById(R.id.gV); 
    String[] primarycontext = {"first","second","third","fourth","fifth","sixth","seventh","eighth","ninth","tenth","leventh","twelth","thirteenth","fouteenth","fifteenth","sixteenth","seventeenth","eighteenth","nineteenth","twenteth","twentyfirst","twentysecond", "twentythird","twentythird","twentyfouth"}; 

    gridView.setAdapter(new ImageAdapter(this, primarycontext)); 
    gridView.setOnItemClickListener(new GridView.OnItemClickListener(){ 

     public void onItemClick(AdapterView<?> arg0, View v, int position, 
       long id) { 
      // TODO Auto-generated method stub 
      //myObjects.get(position).setState(1); 
      //myAdapter.notifyDataSetChanged(); 

      Toast.makeText(getBaseContext(), "clicked on "+position, Toast.LENGTH_SHORT).show(); 
     } 

    }); 


    Go.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      //adapter.notifyDataSetChanged(); 
      int len = 10; 
      int cnt = 0; 
      String selectImages = ""; 
      for (int i = 0;i<len; i++){ 
       if (adapter.itemChecked[i]){ 
        cnt++; 
       } 
      } 
      if(cnt == 0){ 
       Toast.makeText(getBaseContext(), "please select atleast one", Toast.LENGTH_SHORT).show(); 
      }else 
      { 
       Toast.makeText(getBaseContext(), "you have selected" + cnt + "boxes", Toast.LENGTH_SHORT).show(); 
      } 
      String item = (String) adapter.getItem(position); 
      Toast.makeText(getBaseContext(), "selected fields"+item, Toast.LENGTH_SHORT).show(); 
     } 
    }); 
    } 

} 

public class ImageAdapter extends BaseAdapter 
{ 
    Context mContext; 
    public ImageAdapter(Context c,String[] primarycontext) 
    { 
     mContext = c; 
    this.primarycontext = primarycontext; 
    } 
    @Override 
    public int getCount() 
    { 
     // TODO Auto-generated method stub 
     return providers.length; 
    } 
public Object getItem(int position) { 
    // TODO Auto-generated method stub 
    return primarycontext[position]; 
} 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) 
    { 
     // TODO Auto-generated method stub 
     View v; 
    if(convertView==null){ 
    LayoutInflater li = (LayoutInflater) mContext 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    v = new View(mContext); 
    v = li.inflate(R.layout.icon, null); 
    } 
    else 
    { 
    v = convertView; 
     } 
     ImageView iv = (ImageView)v.findViewById(R.id.grid_item_image); 
    iv.setImageResource(R.drawable.folder_0); 
    CheckBox CBx = (CheckBox)v.findViewById(R.id.cBIon); 
    CBx.setText(primarycontext[position]); 
     CBx.setChecked(isItemChecked(position)); 
     return v; 
    } 
private boolean isItemChecked(int position) { 
    // TODO Auto-generated method stub 
    System.out.println("the returning items="+itemChecked); 
    return itemChecked; 
} 
} 
} 

在主要佈局我用文字和圖像一個複選框佔據一個gridview。我有一個Submit(Go)按鈕,點擊時應該捕獲在主要活動中選中的選中框的所有名稱。我怎樣才能做到這一點?當我運行此代碼並單擊Go時,應用程序崩潰並返回空指針異常。

錯誤

11-25 05:43:50.390: E/AndroidRuntime(519): FATAL EXCEPTION: main 
11-25 05:43:50.390: E/AndroidRuntime(519): java.lang.NullPointerException 
11-25 05:43:50.390: E/AndroidRuntime(519): at com.example.kam1.MainActivityDynamic$2.onClick(MainActivityDynamic.java:73) 
11-25 05:43:50.390: E/AndroidRuntime(519): at android.view.View.performClick(View.java:2408) 
11-25 05:43:50.390: E/AndroidRuntime(519): at android.view.View$PerformClick.run(View.java:8816) 
11-25 05:43:50.390: E/AndroidRuntime(519): at android.os.Handler.handleCallback(Handler.java:587) 
+0

總是張貼堆棧跟蹤 –

回答

1

我沒有看到你在任何地方初始化adapter變量。替換此:

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

adapter = new ImageAdapter(this, primarycontext); 
gridView.setAdapter(adapter); 

也不要使用getBaseContext()。您應該使用MainActivityDynamic.this

它看起來你用吐司用於調試目的 - 我建議切換到Logsee docs

+0

是啊我明白了。我試圖調試空指針的事情,發現它customadapter類返回null到主要活動。如果看一下對這些代碼行(INT I = 0; I ChanChow

+0

definetly複選框的標籤。讓我試試 – ChanChow

+0

我工作過。該應用程序現在不會崩潰。你能否給我幾分鐘的時間來快速處理返回所選複選框標籤的剩餘過程。我絕對需要你的幫助 – ChanChow