2012-04-02 6 views
0
E/AndroidRuntime(2886): FATAL EXCEPTION: main 
E/AndroidRuntime(2886): java.lang.NullPointerException 
E/AndroidRuntime(2886):  at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:394) 
E/AndroidRuntime(2886):  at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362) 
E/AndroidRuntime(2886):  at android.widget.AbsListView.obtainView(AbsListView.java:2033) 
E/AndroidRuntime(2886):  at android.widget.GridView.onMeasure(GridView.java:1026) 
E/AndroidRuntime(2886):  at android.view.View.measure(View.java:12728) 
E/AndroidRuntime(2886):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698) 
E/AndroidRuntime(2886):  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1369) 
E/AndroidRuntime(2886):  at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1017) 
E/AndroidRuntime(2886):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:555) 
E/AndroidRuntime(2886):  at android.view.View.measure(View.java:12728) 
E/AndroidRuntime(2886):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698) 
E/AndroidRuntime(2886):  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1369) 
E/AndroidRuntime(2886):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:660) 
E/AndroidRuntime(2886):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:553) 
E/AndroidRuntime(2886):  at android.view.View.measure(View.java:12728) 
E/AndroidRuntime(2886):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698) 
E/AndroidRuntime(2886):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:293) 
E/AndroidRuntime(2886):  at android.view.View.measure(View.java:12728) 
E/AndroidRuntime(2886):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:812) 
E/AndroidRuntime(2886):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:553) 
E/AndroidRuntime(2886):  at android.view.View.measure(View.java:12728) 
E/AndroidRuntime(2886):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698) 
E/AndroidRuntime(2886):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:293) 
E/AndroidRuntime(2886):  at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2092) 
E/AndroidRuntime(2886):  at android.view.View.measure(View.java:12728) 
E/AndroidRuntime(2886):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1064) 
E/AndroidRuntime(2886):  at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442) 
E/AndroidRuntime(2886):  at android.os.Handler.dispatchMessage(Handler.java:99) 
E/AndroidRuntime(2886):  at android.os.Looper.loop(Looper.java:137) 
E/AndroidRuntime(2886):  at android.app.ActivityThread.main(ActivityThread.java:4424) 
E/AndroidRuntime(2886):  at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(2886):  at java.lang.reflect.Method.invoke(Method.java:511) 
E/AndroidRuntime(2886):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
E/AndroidRuntime(2886):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
E/AndroidRuntime(2886):  at dalvik.system.NativeStart.main(Native Method) 

を見つけることができないのですが、ここでLogcatnullポインタ例外を取得しておいてください、ソース

だと(たぶん)関連するコード。私は、問題はここ

public class Main extends Activity { 
    private static final int REQUEST_CODE = 0; 
    List<String> custom1 = new ArrayList<String>(); 
    List<String> custom2 = new ArrayList<String>(); 
    List<String> custom3 = new ArrayList<String>(); 
    String title = null; 
    ArrayAdapter<String> a1; 
    ArrayAdapter<String> a2; 
    ArrayAdapter<String> a3; 
    Button b_1; 
    Button b_2; 
    Button b_3; 
    NotesDataSource dataSource; 
    MySQLiteHelper dbHelper; 
    SQLiteDatabase db; 
    int id; 
    int position; 
    boolean newNote; 

    static int ADAPTER = 1; 

    GridView gv; 

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

     String savedText = null; 

     Bundle extras = getIntent().getExtras(); 
     id = extras.getInt("id"); 
     position = extras.getInt("pos"); 
     newNote = !extras.getBoolean("load"); 

     dataSource = new NotesDataSource(this); 

     final EditText tv = (EditText)findViewById(R.id.textArea); 
     final EditText title_tv = (EditText)findViewById(R.id.noteTitle); 

     if(!newNote){ 
      savedText = extras.getString("textData"); 
      title = extras.getString("title"); 
      if(savedText.length() != 0){ 
       tv.append(savedText); 
      } 
      if(title.length() != 0){ 
       title_tv.append(title); 
      } 
     } 
     if(dataSource.getArray1() != null){ 
      custom1.addAll(dataSource.getArray1()); 
     } 
     else{ 
      custom1.addAll(Arrays.asList(getResources().getStringArray(R.array.SymbolArray))); 
     } 
     if(dataSource.getArray2() != null){ 
      custom2.addAll(dataSource.getArray2()); 
     } 
     else{ 
      custom2.addAll(Arrays.asList(getResources().getStringArray(R.array.SymbolArray))); 
     } 
     if(dataSource.getArray3() != null){ 
      custom3.addAll(dataSource.getArray3()); 
     } 
     else{ 
      custom3.addAll(Arrays.asList(getResources().getStringArray(R.array.SymbolArray))); 
     } 

     a1 = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,custom1); 
     a2 = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,custom2); 
     a3 = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,custom3); 

     gv = (GridView)findViewById(R.id.gridView); 
     gv.setAdapter(a1); 
     ADAPTER = 1; 
     gv.isFocusable(); 
     gv.isFocusableInTouchMode(); 

     gv.setOnItemClickListener(new OnItemClickListener(){ 
      public void onItemClick(AdapterView<?> parent, View v, int position, long id){ 
       switch(ADAPTER){ 
       case 1: 
        tv.append(custom1.get(position)); 
        break; 
       case 2: 
        tv.append(custom2.get(position)); 
        break; 
       case 3: 
        tv.append(custom3.get(position)); 
       default: 
        break; 
       } 
      } 
     }); 

     b_1 = (Button)findViewById(R.id.button1); 
     b_2 = (Button)findViewById(R.id.button2); 
     b_3 = (Button)findViewById(R.id.button3); 
     Button b_save = (Button)findViewById(R.id.save_button); 

     b_1.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       gv.setAdapter(a1); 
       ADAPTER = 1; 

      } 
     }); 

     b_2.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       gv.setAdapter(a2); 
       ADAPTER = 2; 
      } 
     }); 

     b_3.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       gv.setAdapter(a3); 
       ADAPTER = 3; 

      } 
     }); 

     b_save.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       if(newNote == false){ 
        dataSource.open(); 
        String text = tv.getText().toString(); 
        if(title.length() != 0){ 
         title = title_tv.getText().toString(); 
         dataSource.updateString(text,title,id); 
        } 
        else{ 
         dataSource.updateString(text, "no title", id); 
        } 
        dataSource.close(); 
       } 
       else{ 
        dataSource.open(); 
        String text = tv.getText().toString(); 
        title = title_tv.getText().toString(); 

        dataSource.createString(text, title); 
        newNote = false; 
        dataSource.close(); 
       } 
      } 
     });  

    } 

を発信する3つの配列方法

public List<String> getArray1(){ 
      ArrayList<String> array1 = new ArrayList<String>(); 

      open(); 
      Cursor cursor = db.query(MySQLiteHelper.TABLE_ARRAY, new String[]{MySQLiteHelper.COLUMN_ARRAY_1}, null, null, null, null, null); 
      cursor.moveToFirst(); 
      while(!cursor.isAfterLast()){ 
       String data = cursorToArrayString(cursor); 
       array1.add(data); 
       cursor.moveToNext(); 
      } 
      //make sure to close the cursor 
      close(); 
      return array1; 
     } 

     public List<String> getArray2(){ 
      ArrayList<String> array2 = new ArrayList<String>(); 

      open(); 
      Cursor cursor = db.query(MySQLiteHelper.TABLE_ARRAY, new String[]{MySQLiteHelper.COLUMN_ARRAY_2}, null,null,null,null,null); 
      cursor.moveToFirst(); 
      while(!cursor.isAfterLast()){ 
       String data = cursorToArrayString(cursor); 
       array2.add(data); 
       cursor.moveToNext(); 
      } 
      //make sure to close the cursor 
      close(); 
      return array2; 
     } 

     public List<String> getArray3(){ 
      ArrayList<String> array3 = new ArrayList<String>(); 

      open(); 
      Cursor cursor = db.query(MySQLiteHelper.TABLE_ARRAY, new String[]{MySQLiteHelper.COLUMN_ARRAY_3}, null,null,null,null,null); 
      cursor.moveToFirst(); 
      while(!cursor.isAfterLast()){ 
       String data = cursorToArrayString(cursor); 
       array3.add(data); 
       cursor.moveToNext(); 
      } 
      //make sure to close the cursor 
      close(); 
      return array3; 
     } 


and finally how they're updated 


public void updateArray(String[] array1, String[] array2, String[] array3){ 

     db.delete(MySQLiteHelper.TABLE_ARRAY, null, null); 

     ContentValues values1 = new ContentValues(); 
     for(int i = 0; i < array1.length; i++){ 
      values1.put(MySQLiteHelper.COLUMN_ARRAY_1, array1[i]); 
      int rows = db.update(MySQLiteHelper.TABLE_ARRAY, values1, MySQLiteHelper.COLUMN_ID + " = " + i, null); 
      if(rows == 0){ 
       db.insert(MySQLiteHelper.TABLE_ARRAY, null, values1); 
      } 
     } 


     ContentValues values2 = new ContentValues(); 
     for(int i = 0; i < array2.length; i++){ 
      values2.put(MySQLiteHelper.COLUMN_ARRAY_2, array2[i]); 
      int rows = db.update(MySQLiteHelper.TABLE_ARRAY, values2, MySQLiteHelper.COLUMN_ID + " = " + i, null); 
      if(rows == 0){ 
       db.insert(MySQLiteHelper.TABLE_ARRAY, null, values2); 
      } 
     } 

     ContentValues values3 = new ContentValues(); 
     for(int i = 0; i < array3.length; i++){ 
      values3.put(MySQLiteHelper.COLUMN_ARRAY_3, array3[i]); 
      int rows = db.update(MySQLiteHelper.TABLE_ARRAY, values3, MySQLiteHelper.COLUMN_ID + " = " + i, null); 
      if(rows == 0){ 
       db.insert(MySQLiteHelper.TABLE_ARRAY, null, values3); 
      } 
     } 
    } 

が私に簡単に行くことだと思う場合は、これが私の最初の時間は、データベースでの作業ですが、私は問題が何であるかを知ってみたいです私は今この問題を何日も働いています

+0

データベースで作業している間は、カーソル.moveToFirst();のような他の操作を実行した後、常に 'if(cursor!= null)'を使用します。 –

+0

あなたはちょっと推測しています...あなたは何かを宣言していますが、あなたは活動に設定しているxmlではない、任意のビューIDを使用しているかもしれません... – MKJParekh

+0

あなたのスタックトレースを見ると、データベースの問題ではありますが、メッセージをディスパッチしようとしている間はレイアウトの問題です。読みやすさの観点からすると、実際には変数の名前を変えること(a1とb_1は本当ですか?)と巨大なメソッドを消化可能な塊に分割し、 ;-) –

答えて

0

いつ例外が発生しますか?オンスクリーンロード?クリックで?

アダプタインスタンスを作成する直前に、デバッガを実行してブレークポイントを設定するだけです。配列内の文字列がnullでないことを確認してください。それは私の推測だろう。

+0

メイン画面から追加した最初のコードセットを含むファイルに例外が発生し、配列がNull値を動的に削除しているときに例外が発生します。 – Zacharias3960

+0

「配列が動的にヌル値を削除しています」ということを指摘してください。私はそれを見ない。 –

+0

私はそれを取って、array1の更新時にvalues1とfor文の間にif(array1 [i]!= null)を追加しました – Zacharias3960

関連する問題