何が原因かわからないという非常に厄介なバグがあります。インテントを使用して別のアクティビティからアクティビティを開始しようとすると、nullポインタ例外が発生していることがわかります。私は考えられるすべての可能な解決策を試し、構文を何百回もチェックし、新しいレイアウトの前にメインレイアウトでContentViewを設定しようとしました..何もありません!ここで緊急の助けが必要です。マニフェストとレイアウトxmlファイルですべてを宣言しました。問題は、(onItemClick()メソッドからの)メインアクティビティによって呼び出されるShowNoteActivityに依存しています。logcatからnullpointerexceptionを取得し、他のエラーの束が何であるかわかりません。
とにかく、これは関連するコードです。もっと必要な場合は教えてください。
public class MainActivity extends Activity implements OnClickListener ,OnItemClickListener{
public final static String EXTRA_MESSAGE = "assaf.notepad.MESSAGE";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DatabaseManager db = new DatabaseManager(this);
String[]notes = db.listNotes();
ArrayAdapter<String>adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,notes);
ListView lv = (ListView)findViewById(R.id.notes_list);
lv.setAdapter(adapter);
lv.setOnItemClickListener(this);
ImageButton addNoteBtn = (ImageButton)findViewById(R.id.add_note);
addNoteBtn.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
public void onClick(View view) {
Intent intent = new Intent(this, AddNoteActivity.class);
startActivity(intent);
}
@Override
public void onItemClick(AdapterView adapter, View view, int position, long id) {
DatabaseManager db = new DatabaseManager(this);
String[]notesContent = db.getNoteContent();
Intent intent = new Intent(this,ShowNoteActivity.class);
intent.putExtra(EXTRA_MESSAGE, notesContent[position]);
startActivity(intent);
}
}
これが問題のある活動です!!
public class ShowNoteActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
String text = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
TextView textView = (TextView)findViewById(R.id.show_note);
textView.setText(text);
setContentView(R.layout.activity_show_note);
}
}
これはlogcatです
02-19 03:18:07.861: E/AndroidRuntime(829): FATAL EXCEPTION: main
02-19 03:18:07.861: E/AndroidRuntime(829): java.lang.RuntimeException: Unable to start activity ComponentInfo{assaf.notepad/assaf.notepad.ShowNoteActivity}: java.lang.NullPointerException
02-19 03:18:07.861: E/AndroidRuntime(829): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
02-19 03:18:07.861: E/AndroidRuntime(829): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
02-19 03:18:07.861: E/AndroidRuntime(829): at android.app.ActivityThread.access$600(ActivityThread.java:141)
02-19 03:18:07.861: E/AndroidRuntime(829): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
02-19 03:18:07.861: E/AndroidRuntime(829): at android.os.Handler.dispatchMessage(Handler.java:99)
02-19 03:18:07.861: E/AndroidRuntime(829): at android.os.Looper.loop(Looper.java:137)
02-19 03:18:07.861: E/AndroidRuntime(829): at android.app.ActivityThread.main(ActivityThread.java:5039)
02-19 03:18:07.861: E/AndroidRuntime(829): at java.lang.reflect.Method.invokeNative(Native Method)
02-19 03:18:07.861: E/AndroidRuntime(829): at java.lang.reflect.Method.invoke(Method.java:511)
02-19 03:18:07.861: E/AndroidRuntime(829): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
02-19 03:18:07.861: E/AndroidRuntime(829): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
02-19 03:18:07.861: E/AndroidRuntime(829): at dalvik.system.NativeStart.main(Native Method)
02-19 03:18:07.861: E/AndroidRuntime(829): Caused by: java.lang.NullPointerException
02-19 03:18:07.861: E/AndroidRuntime(829): at assaf.notepad.ShowNoteActivity.onCreate(ShowNoteActivity.java:19)
02-19 03:18:07.861: E/AndroidRuntime(829): at android.app.Activity.performCreate(Activity.java:5104)
02-19 03:18:07.861: E/AndroidRuntime(829): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
02-19 03:18:07.861: E/AndroidRuntime(829): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
02-19 03:18:07.861: E/AndroidRuntime(829): ... 11 more
問題のあるtextViewを含む関連するxml、「ShowNoteActivity」xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/board"
android:scaleType="fitXY"/>
<Button
android:id="@+id/edit_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginRight="10dp"
android:layout_marginTop="10dp"
android:text="@string/edit_btn"
android:textColor="@color/white"/>
<Button
android:id="@+id/delete_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/edit_btn"
android:layout_marginTop="10dp"
android:layout_marginRight="10dp"
android:text="@string/delete_btn"
android:textColor="@color/white"/>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/paper"
android:layout_below="@id/edit_btn"
android:layout_marginTop="10dp"
android:layout_marginRight="20dp"
android:layout_marginLeft="20dp"
android:layout_marginBottom="30dp"/>
<TextView
android:id="@+id/show_note"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/edit_btn"
android:layout_marginTop="110dp"
android:layout_marginRight="40dp"
android:layout_marginLeft="45dp"
android:layout_marginBottom="80dp"
android:typeface="sans"
android:textSize="10sp"/>
</RelativeLayou
t>
これはデータベースの問題などではありません。新しいアクティビティに「helloworld」文字列を渡そうとしても、問題は引き続き存在します。新しいアクティビティを呼び出すと、プログラムは常にクラッシュします。
これはxmlマニフェストです
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="assaf.notepad"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="9"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="assaf.notepad.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="assaf.notepad.AddNoteActivity">
</activity>
<activity
android:name="assaf.notepad.ShowNoteActivity">
</activity>
</application>
</manifest>