2012-03-14 4 views
1

나는 이걸 짐작하기 위해 하루를 보냈습니다. (필자는 학습 곡선의 먼길에요 - 그러므로 도움을 청할 필요가 있습니다!) - 아래는 간단한 데이터베이스 프로그램 (나는 그들이 작동하는 다른 앱을 구현하는 방법을 이해하려고 노력하고있다).활동을 구체화 할 수 없습니다. ComponentInfo - Null 포인터 예외

나는 '보기'버튼을 클릭하면 - 내가 다음 실행 시간 오류 얻을 :

로그인 고양이

03-14 16:13:39.612: ERROR/AndroidRuntime(341): FATAL EXCEPTION: main 
03-14 16:13:39.612: ERROR/AndroidRuntime(341): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.android.dbtest/com.android.dbtest.ShowActivity}: java.lang.NullPointerException 
03-14 16:13:39.612: ERROR/AndroidRuntime(341):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1544) 
03-14 16:13:39.612: ERROR/AndroidRuntime(341):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1638) 
03-14 16:13:39.612: ERROR/AndroidRuntime(341):  at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
03-14 16:13:39.612: ERROR/AndroidRuntime(341):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:928) 
03-14 16:13:39.612: ERROR/AndroidRuntime(341):  at android.os.Handler.dispatchMessage(Handler.java:99) 
03-14 16:13:39.612: ERROR/AndroidRuntime(341):  at android.os.Looper.loop(Looper.java:123) 
03-14 16:13:39.612: ERROR/AndroidRuntime(341):  at android.app.ActivityThread.main(ActivityThread.java:3647) 
03-14 16:13:39.612: ERROR/AndroidRuntime(341):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-14 16:13:39.612: ERROR/AndroidRuntime(341):  at java.lang.reflect.Method.invoke(Method.java:507) 
03-14 16:13:39.612: ERROR/AndroidRuntime(341):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
03-14 16:13:39.612: ERROR/AndroidRuntime(341):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
03-14 16:13:39.612: ERROR/AndroidRuntime(341):  at dalvik.system.NativeStart.main(Native Method) 
03-14 16:13:39.612: ERROR/AndroidRuntime(341): Caused by: java.lang.NullPointerException 
03-14 16:13:39.612: ERROR/AndroidRuntime(341):  at android.app.Activity.findViewById(Activity.java:1647) 
03-14 16:13:39.612: ERROR/AndroidRuntime(341):  at com.android.dbtest.ShowActivity.<init>(ShowActivity.java:12) 
03-14 16:13:39.612: ERROR/AndroidRuntime(341):  at java.lang.Class.newInstanceImpl(Native Method) 
03-14 16:13:39.612: ERROR/AndroidRuntime(341):  at java.lang.Class.newInstance(Class.java:1409) 
03-14 16:13:39.612: ERROR/AndroidRuntime(341):  at android.app.Instrumentation.newActivity(Instrumentation.java:1021) 
03-14 16:13:39.612: ERROR/AndroidRuntime(341):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1536) 
03-14 16:13:39.612: ERROR/AndroidRuntime(341):  ... 11 more 

내 주요 활동 :

package com.android.dbtest; 




import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 


public class DatabaseTestActivity extends Activity { 
/** Called when the activity is first created. */ 


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


    } 

    public void handleClick(View v){ 
     Intent intent = new Intent(); 
     intent.setClass(this, AddActivity.class); 
     startActivity(intent); 
    } 

    public void showHandleClick(View v){ 
     Intent intent = new Intent(); 
     intent.setClass(this, ShowActivity.class); 
     startActivity(intent); 
    } 
    } 

내 공연 활동 (이 내가 어디에 (런타임 오류가 발생하는 쇼 단추를 누르면 때 하나 이상의 주요 오류가 아마 거짓말), 거짓말을 생각합니다 목록 작성과 관련이 있다고 생각합니다 :

package com.android.dbtest; 

import android.database.Cursor; 
import android.os.Bundle; 
import android.widget.ListView; 
import android.widget.SimpleCursorAdapter; 
import android.util.Log; 

public class ShowActivity extends DatabaseTestActivity{ 

private SQLiteAdapter mySQLiteAdapter; 
ListView listContent = (ListView)findViewById(R.id.contentlist); 

//TextView listContent = (TextView) findViewById(R.id.contentlist); 

SimpleCursorAdapter cursorAdapter; 
String cursor; 

public static final String LOG_TAG = "dbtest"; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.show); 
    // TODO Auto-generated method stub 

    Log.v(LOG_TAG, "step 1"); 


    //output.setText(String.valueOf(WHAT I GET FROM DATABASE)); 


    mySQLiteAdapter = new SQLiteAdapter(this); 
    mySQLiteAdapter.openToRead(); 

    Cursor cursor = mySQLiteAdapter.queueAll(); 
    startManagingCursor(cursor); 
    String[] from = new String[]{SQLiteAdapter.KEY_CONTENT}; 
    int[] to = new int[] {R.id.text}; 

    Log.v(LOG_TAG, "from value:" + from); 
    Log.v(LOG_TAG, "to value:" + to); 

    SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(this, R.layout.row, cursor, from, to); 
    listContent.setAdapter(cursorAdapter); 

    mySQLiteAdapter.close(); 

} 
} 

내 SQLiteAdapter : 쇼

package com.android.dbtest; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.database.sqlite.SQLiteDatabase.CursorFactory; 

public class SQLiteAdapter { 
public static final String MYDATABASE_NAME = "MY_DATABASE"; 
public static final String MYDATABASE_TABLE = "MY_TABLE"; 
public static final int MYDATABASE_VERSION = 1; 
public static final String KEY_CONTENT = "Content"; 
public static final String KEY_ID = "_id";   //primary key 


//create table MY_DATABASE (ID integer primary key, Content text not null); 
private static final String SCRIPT_CREATE_DATABASE = "create table " 
+ MYDATABASE_TABLE + " (" 
+ KEY_ID + " integer primary key autoincrement, "   
+ KEY_CONTENT + " text not null " + 
     ");"; 

private SQLiteHelper sqLiteHelper; 
private SQLiteDatabase sqLiteDatabase; 
private Context context; 
public SQLiteAdapter(Context c) 
{ 
    context = c; 
} 

public SQLiteAdapter openToRead() throws android.database.SQLException 
{ 
    sqLiteHelper = new SQLiteHelper(context, MYDATABASE_NAME, null, MYDATABASE_VERSION); 
    sqLiteDatabase = sqLiteHelper.getReadableDatabase(); 
    return this; 
} 
public SQLiteAdapter openToWrite() throws android.database.SQLException { 
    sqLiteHelper = new SQLiteHelper(context, MYDATABASE_NAME, null, MYDATABASE_VERSION); 
    sqLiteDatabase = sqLiteHelper.getWritableDatabase(); return this; 
    } 
public void close(){ 
    sqLiteHelper.close(); 
    } 
public long insert(String content){ 
    ContentValues contentValues = new ContentValues(); 
    contentValues.put(KEY_CONTENT, content); 
    return sqLiteDatabase.insert(MYDATABASE_TABLE, null, contentValues); 
    } 

public int deleteAll(){ 
    return sqLiteDatabase.delete(MYDATABASE_TABLE, null, null); 
    } 



public Cursor queueAll(){ 
    String[] columns = new String[]{KEY_ID, KEY_CONTENT}; 
    Cursor cursor = sqLiteDatabase.query(MYDATABASE_TABLE, columns,  null, null, null, null, null); 
    return cursor; 
} 


public class SQLiteHelper extends SQLiteOpenHelper 
{ 
    public SQLiteHelper(Context context, String name, CursorFactory factory, int version) 
    { 
     super(context, name, factory, version); 
     } 
    @Override public void onCreate(SQLiteDatabase db) 
    { 
     // TODO Auto-generated method stub 
     db.execSQL(SCRIPT_CREATE_DATABASE); 
     } 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    { 
     // TODO Auto-generated method stub } } } 
} 
} 
} 

마지막으로 XML 파일 :

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <TextView android:layout_height="wrap_content" 
    android:text="TextView" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:layout_width="wrap_content" 
    android:id="@+id/textView1"></TextView>  

    <ListView android:id="@android:id/android:list" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"/> 

</LinearLayout> 

답변

2

당신은 당신의 활동과 정적 초기화처럼 수행 할 수 없습니다

ListView listContent = (ListView)findViewById(R.id.contentlist); 

그 이유는 아직 nto가 있기 때문입니다. 활동에 대한 레이아웃을로드 했으므로이 호출은 findViewById(R.id.contentlist)을 실패합니다. 당신이 setContentView(R.layout.show); 전화 후 onCreate에서 목록보기를 초기화 : 여전히 <init>.

수정에서 오류가 발생, 클래스의 생성자를 선언하지 않기 때문에 귀하의 오류는, 클래스의 정적 초기화에서 온다.

+0

감사합니다 - 그것은 OnCreate(), 내가 당신의 대답을 understate 때까지 ListView를 움직이지 못했습니다. 여러분 모두에게 감사드립니다! – CornishDibley

+0

나는 다른 런타임 오류가 발생했지만 다음과 같은 열 : _id : 컴파일 중 : SELECT _id, Content FROM MY_TABLE - 좀 더 오랫동안 계속 사용해야합니다! – CornishDibley

+0

다른 질문으로 더 많은 정보를 게시하십시오! 나는 데이터베이스 오류를 좋아한다! 나의 최고! –

1

귀하의 ShowActivity 활동은 ID @android:id/listListView을 포함하는 레이아웃을 가지고 있지만 ID R.id.contentlist으로 목록보기를 검색합니다. 또한 레이아웃을 설정 한 후에 onCreate() 메서드에서보기를 초기화해야합니다.

관련 문제