2

여기 내 문제가있는 코드입니다. 이벤트를 입력 한 후 ListView에 내 sqlite 데이터베이스 데이터를 업데이트하려고하지만 ListView이 보이지 않고 조각을 사용하는 데 문제가 있습니다. 여기서 내가 잘못하고있는 부분을 안내해 줄 수 있습니까? 안드로이드 애플 리케이션 개발에 새로운입니다. 고맙습니다. 다음안드로이드 - 조각 모음의 ListView가 표시되지 않습니다.

<RelativeLayout 
    android:id="@+id/relativeLayout1" 
    android:layout_width="fill_parent" 
    android:layout_height="40dp" 
    android:orientation="vertical" > 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/addevents" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" /> 

</RelativeLayout> 
<RelativeLayout 
    android:id="@id/relativeLayout1" 
    android:layout_width="fill_parent" 
    android:layout_height="match_parent" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/relativeLayout1" 
    android:orientation="vertical" 
    android:layout_marginTop="40dp"> 

<ListView 
    android:id="@+id/list" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true"> 
</ListView> 
</RelativeLayout> 
</RelativeLayout> 

내 데이터베이스를 설정하는 코드입니다 :

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.event, container, false); 
    show = (Button)rootView.findViewById(R.id.button1); 
    show.setOnClickListener(this); 
    return rootView; 
} 

public void onActivityCreated(int requestCode, int resultCode, Intent data) { 
    ArrayList<HashMap<String, String>> eventList = controller 
      .getAllEvents(); 
    if (eventList.size() != 0) { 
     ListView lv = (ListView) rootView.findViewById(R.id.list); 
     lv.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
       eventId = (TextView) view.findViewById(R.id.eventId); 
       String valEventId = eventId.getText().toString(); 
       Intent objIndent = new Intent(getActivity(), 
         EditEvent.class); 
       objIndent.putExtra("eventId", valEventId); 
       startActivity(objIndent); 
      } 
     }); 
     ListAdapter adapter = new SimpleAdapter(getActivity(), eventList, 
       R.layout.view_event_entry, new String[] { "eventId", 
         "eventName" }, new int[] { R.id.eventId, 
         R.id.eventName }); 
     lv.setAdapter(adapter); 
    } 

} 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    Intent objIntent = new Intent(getActivity(), AddEvent.class); 
    startActivity(objIntent); 
} 

여기 내 XML 코드입니다. 이것이 문제가 발생하는 곳인지 궁금합니다. 너희들 여기에서 그것을 확인할 수있다.

10-26 : 08 : 02 : 29.141 : E는/AndroidRuntime (22646) : 치명적인 예외 : 주요 10-26 08 : 여기

public EventController(Context applicationcontext) { 
    super(applicationcontext, "androidsqlite.db", null, 1); 
    Log.d(LOGCAT,"Created"); 
} 

@Override 
//create table for the database 
public void onCreate(SQLiteDatabase database) { 
    String query; 
    query = "CREATE TABLE events (eventId INTEGER PRIMARY KEY, eventName TEXT)"; 
    database.execSQL(query);  
    Log.d(LOGCAT,"events Created"); 
} 

@Override 
//drop the database and reset if required 
public void onUpgrade(SQLiteDatabase database, int version_old, int current_version) { 
    String query; 
    query = "DROP TABLE IF EXISTS events"; 
    database.execSQL(query); 
    onCreate(database); 
} 

public void insertEvent(HashMap<String, String> queryValues) { 
    SQLiteDatabase database = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
    values.put("eventName", queryValues.get("eventName")); 
    database.insert("events", null, values); 
    database.close(); 
} 

public int updateEvent(HashMap<String, String> queryValues) { 
    SQLiteDatabase database = this.getWritableDatabase();  
    ContentValues values = new ContentValues(); 
    values.put("eventName", queryValues.get("eventName")); 
    return database.update("events", values, "eventId" + " = ?", new String[] { queryValues.get("eventId") }); 
    //String updateQuery = "Update words set txtWord='"+word+"' where txtWord='"+ oldWord +"'"; 
    //Log.d(LOGCAT,updateQuery); 
    //database.rawQuery(updateQuery, null); 
    //return database.update("words", values, "txtWord = ?", new String[] { word }); 
} 

public void deleteEvent(String id) { 
    Log.d(LOGCAT,"delete"); 
    SQLiteDatabase database = this.getWritableDatabase();  
    String deleteQuery = "DELETE FROM events where eventId='"+ id +"'"; 
    Log.d("query",deleteQuery);  
    database.execSQL(deleteQuery); 
} 

public ArrayList<HashMap<String, String>> getAllEvents() { 
    ArrayList<HashMap<String, String>> wordList; 
    wordList = new ArrayList<HashMap<String, String>>(); 
    String selectQuery = "SELECT * FROM events"; 
    SQLiteDatabase database = this.getWritableDatabase(); 
    Cursor cursor = database.rawQuery(selectQuery, null); 
    if (cursor.moveToFirst()) { 
     do { 
      HashMap<String, String> map = new HashMap<String, String>(); 
      map.put("eventId", cursor.getString(0)); 
      map.put("eventName", cursor.getString(1)); 
      wordList.add(map); 
     } while (cursor.moveToNext()); 
    } 

    // return contact list 
    return wordList; 
} 

public HashMap<String, String> getEventInfo(String id) { 
    HashMap<String, String> wordList = new HashMap<String, String>(); 
    SQLiteDatabase database = this.getReadableDatabase(); 
    String selectQuery = "SELECT * FROM events where eventId='"+id+"'"; 
    Cursor cursor = database.rawQuery(selectQuery, null); 
    if (cursor.moveToFirst()) { 
     do { 
       //HashMap<String, String> map = new HashMap<String, String>(); 
      wordList.put("eventName", cursor.getString(1)); 
       //wordList.add(map); 
     } while (cursor.moveToNext()); 
    }     
return wordList; 
} 

은 내가 가진 오류 02 : 29.141 : E/AndroidRuntime (22646) : java.lang.NullPointerException 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked (SQLiteOpenHelper.java:224) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : android.database.sqlite.SQLiteOpenHelper.getWritableDatabase (SQLiteOpenHelper.java:164) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : com.example.hapshare.EventController.getAllEvents (EventController.java:70) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : com.example.hapshare.Event.onCreateView (Event.java : 42) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : android.support.v4.app.Fragment.performCreateView (Fragment.java:1478) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:927) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : android.support.v4.app. FragmentManagerImpl.moveToState (FragmentManager.java:1104) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : android.support.v4.app.BackStackRecord.run (BackStackRecord.java:682) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : android.support.v4.app.FragmentManagerImpl.execPendingActions (FragmentManager.java : 1460) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : android.support.v4.app.FragmentManagerImpl.executePendingTransactions (FragmentManager.java:472) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : android.support.v4.app.FragmentPagerAdapter.finishUpdate (FragmentPagerAdapter.java:141) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : android.support.v4.view. ViewPager.populate (ViewPager.java:1068) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : android.support.v4.view.ViewPager.populate (ViewPager.java:914) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : android.support.v4.view.ViewPager.onMeasure (ViewPager.java:1436) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : at android.view.View.measure (View.java:15696) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : android.view.Vi eWGroup.measureChildWithMargins (ViewGroup.java:4851) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : android.widget.FrameLayout.onMeasure (FrameLayout.java:310) 10-26 08:02 : 29.141 : E/AndroidRuntime (22646) : android.view.View.measure (View.java:15696) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : android.widget.LinearLayout.measureVertical LinearLayout.java:847) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : android.widget.LinearLayout.onMeasure (LinearLayout.java:588) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : android.view.View.measure (View.java:15696) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : android.view.ViewGroup.measureChildWithMargins (ViewGroup.java : 4851) 10-26 08:02:29.141 : E/AndroidRuntime (22646) : android.widget.FrameLayout.onMeasure (FrameLayout.java:310) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : com.android.internal.policy. impl.PhoneWindow $ DecorView.onMeasure (PhoneWindow.java:2261) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : android.view.View.measure (View.java:15696) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : android.view.ViewRootImpl.performMeasure (ViewRootImpl.java:2221) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : android.view. ViewRootImpl.measureHierarchy (ViewRootImpl.java:1287) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:1524) 10-26 08:02 : 29.141 : E/AndroidRuntime (22646) : android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:1187) 10- 26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : android.view.ViewRootImpl $ TraversalRunnable.run (ViewRootImpl.java:4855) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : android (Choreographer.java : 576) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : android.view.Choreographer.doCallbacks (Choreographer.java:575) 26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : android.view.Choreographer.doFrame (Choreographer.java:542) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : android.view에서 .Choreographer $ FrameDisplayEventReceiver.run (Choreographer.java:751) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : android.os.Handler.handleCallback (Handler.java:725) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : android.os.Handler.dispatchMessage (Handler.java:92) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : android.os.Looper.loop (Looper.java:158) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : at android.app.ActivityThread.main (ActivityThread.java:5777) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : java.lang.reflect.Method.invokeNative (기본 메소드) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : java.lang.reflect.Method.invoke (Method.java:511) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : com.android .internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1083) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : com.android.internal.os.ZygoteInit.main (ZygoteInit.java) : 850) 10-26 08 : 02 : 29.141 : E/AndroidRuntime (22646) : dalvik.system.NativeStart.main (기본 메소드)

+1

는'rootView'은 클래스 타다가 아니라 당신이 오류가 발생하지 않는 경우, 그것은 또한에 넣어 데이터가 없다는 것을 의미한다, 위의 코멘트 떨어져 목록보기 – Raghunandan

+0

건물을 초기화하기 위해 동일한를 사용하는 귀하의 목록, 그것은 비어있을 상관없이 의미합니다. –

+0

안녕하세요. 그들 중 한 명이 당신의 문제를 해결 한 경우 수락 된 대답을 확인하고 싶을 수도 있습니다. – Andy

답변

2

몇 가지 문제가 있습니다. 우선, onActivityCreated()을 잘못 overrode했습니다. 보유하고있는 내용 대신 다음 헤더가 있어야합니다.

public void onActivityCreated(Bundle savedInstanceStates) 

잘못된 헤더를 사용했기 때문에 절대로 호출되지 않습니다.

두 번째로 onActivityCreated() 메서드에서 rootView 메서드를 사용하면 오류가 발생할 수 있습니다. 그 메서드에서 선언되지 않았기 때문입니다. 대신 getView()을 호출하는 것이 좋습니다. 그러면 rootView가 반환됩니다.

3

코드에 빨간색 플래그를 발생시키는 몇 가지 사항이 있습니다. 어느 것이 나의 첫 번째 질문으로 이어집니다 : 당신은 일식이나 intellij를 사용하고 있습니까? 왜냐하면 그것은 나처럼 컴파일되지 않을 것입니다. 어쩌면 여기에서 이걸 편집 했겠지만 이제는 제대로 작동하도록 도와 줄 것입니다. 심지어 onActivityCreated을 사용하여 조각에 ListView을 초기화하지 마십시오. (앤드류도 제대로 사용하지 않았다는 점에서 올바르게 나타났습니다. 그렇다면 필자는 컴파일에 놀랐습니다.) onCreateView에서해야합니다. 이제 내가 편집 한 코드를 게시 할 것입니다. 나는 그것을 시험하지 않을 것이므로 그것이 어떻게 보이는지에 대한 더 나은 지침이된다. (잘하면 그것을 컴파일한다.)

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.event, container, false); 

    ArrayList<HashMap<String, String>> eventList = controller 
      .getAllEvents(); 
    if (eventList.size() != 0) { 
     ListView lv = (ListView) rootView.findViewById(R.id.list); 
     lv.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
       eventId = (TextView) view.findViewById(R.id.eventId); 
       String valEventId = eventId.getText().toString(); 
       Intent objIndent = new Intent(getActivity(), 
         EditEvent.class); 
       objIndent.putExtra("eventId", valEventId); 
       startActivity(objIndent); 
      } 
     }); 
     ListAdapter adapter = new SimpleAdapter(getActivity(), eventList, 
       R.layout.view_event_entry, new String[] { "eventId", 
         "eventName" }, new int[] { R.id.eventId, 
         R.id.eventName }); 
     lv.setAdapter(adapter); 
    } 
    show = (Button)rootView.findViewById(R.id.button1); 
    show.setOnClickListener(this); 

    return rootView; 
} 
... 
+0

이 설명은 그의 문제를 해결하는 것이 더 낫고 꼭해야합니다. 참고로 잘못된 헤더로 컴파일하는 이유는 자바가 오버로드 된 메소드처럼 취급하기 때문입니다.하지만 Android가 기대하는대로 따르지 않기 때문에 실행되지 않습니다. –

+0

Thanks @ AndrewSchuster 좋은 지적입니다. 'onActivityCreated' 컨텍스트에서 전역 적으로 보이지 않기 때문에'rootView'가 오류를 일으키지 않았던 것이 놀랍습니다. 적어도 나는 그것을 보지 못한다. 어느쪽으로 든 오버로드 된 메서드를 지적 해 주셔서 감사합니다. – Andy

+0

안녕하세요 @ 앤디 당신의 코드를 시도했지만 여전히 오류가 발생했습니다. 이번엔 널 포인터 예외 오류가 발생합니다. 내가 목록보기를 잘못 선언 한 것이 아닌가? (Eclipse를 사용하고 있습니다) – AndroidWorld12

관련 문제