2010-12-28 12 views
4

3番目のアクティビティを開始すると、NULLポインタ例外が発生します。ここでLogCatメッセージは次のとおりです。ここで新しいアクティビティを開始するとヌルポインタ例外が発生する

 
12-28 04:38:00.350: ERROR/AndroidRuntime(776): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.acithium.main/com.acithium.rss.ShowDescription}: java.lang.NullPointerException 
12-28 04:38:00.350: ERROR/AndroidRuntime(776):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2401) 
12-28 04:38:00.350: ERROR/AndroidRuntime(776):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417) 
12-28 04:38:00.350: ERROR/AndroidRuntime(776):  at android.app.ActivityThread.access$2100(ActivityThread.java:116) 
12-28 04:38:00.350: ERROR/AndroidRuntime(776):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) 
12-28 04:38:00.350: ERROR/AndroidRuntime(776):  at android.os.Handler.dispatchMessage(Handler.java:99) 
12-28 04:38:00.350: ERROR/AndroidRuntime(776):  at android.os.Looper.loop(Looper.java:123) 
12-28 04:38:00.350: ERROR/AndroidRuntime(776):  at android.app.ActivityThread.main(ActivityThread.java:4203) 
12-28 04:38:00.350: ERROR/AndroidRuntime(776):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-28 04:38:00.350: ERROR/AndroidRuntime(776):  at java.lang.reflect.Method.invoke(Method.java:521) 
12-28 04:38:00.350: ERROR/AndroidRuntime(776):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 
12-28 04:38:00.350: ERROR/AndroidRuntime(776):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549) 
12-28 04:38:00.350: ERROR/AndroidRuntime(776):  at dalvik.system.NativeStart.main(Native Method) 
12-28 04:38:00.350: ERROR/AndroidRuntime(776): Caused by: java.lang.NullPointerException 
12-28 04:38:00.350: ERROR/AndroidRuntime(776):  at com.acithium.rss.ShowDescription.onCreate(ShowDescription.java:48) 
12-28 04:38:00.350: ERROR/AndroidRuntime(776):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123) 
12-28 04:38:00.350: ERROR/AndroidRuntime(776):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364) 
12-28 04:38:00.350: ERROR/AndroidRuntime(776):  ... 11 more 

は、私が活動を呼び出すコードのセクションです:

public void onItemClick(AdapterView parent, View v, int position, long id) 
{ 
    Log.i(tag,"item clicked! [" + feed.getItem(position).getTitle() + "]"); 

    Intent itemintent = new Intent(this,com.acithium.rss.ShowDescription.class); 
    //Intent itemintent = new Intent(); 
    //itemintent.setClassName("com.acithium.main", "com.acithium.rss.ShowDescription"); 
    Bundle b = new Bundle(); 
    b.putString("title", feed.getItem(position).getTitle()); 
    b.putString("description", feed.getItem(position).getDescription()); 
    b.putString("link", feed.getItem(position).getLink()); 
    itemintent.putExtra("android.intent.extra.INTENT", b); 

    startActivityForResult(itemintent,0); 
} 

そして、ここでは呼ばれている新しい活動クラスです:

ここ
public class ShowDescription extends Activity 
{ 

    public void onCreate(Bundle icicle) 
    { 
     super.onCreate(icicle); 
     setContentView(R.layout.showdescription); 

     String theStory = null; 


     Intent startingIntent = getIntent(); 


     if (startingIntent != null) 
     { 
      Bundle b = startingIntent.getBundleExtra("android.intent.extra.INTENT"); 
      if (b == null) 
      { 
       theStory = "bad bundle?"; 
      } 
      else 
      { 
       theStory = b.getString("title") + "\n\n" + b.getString("description") + "\n\nMore information:\n" + b.getString("link"); 
      } 
     } 
     else 
     { 
      theStory = "Information Not Found."; 

     } 
     TextView db= (TextView) findViewById(R.id.storybox); 
     db.setText(theStory); 

     Button backbutton = (Button) findViewById(R.id.back); 

     backbutton.setOnClickListener(new Button.OnClickListener() 
     { 
      public void onClick(View v) 
      { 
       finish(); 
      } 
     });   
    } 
} 

showdescription.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" 
    > 
    <ScrollView android:layout_width="fill_parent" 
      android:layout_height="fill_parent" > 
      <LinearLayout 
       android:orientation="vertical" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent"> 
     <TextView 
      android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:autoLink="all" 
       android:text="story goes here ...." 
      android:id="@+id/storybox" /> 
     <Button 
       android:layout_height="wrap_content" 
       android:text="Back" 
      android:id="@+id/back" 
      android:layout_width="100px" 
      android:layout_marginLeft="100px"/> 
     </LinearLayout> 
    </ScrollView> 
</LinearLayout> 
+0

まあ、回避策が見つかりました。最初はこれらのクラスを別々のパッケージに入れましたが、それらのクラスをすべて同じパッケージに移動し、そのパッケージに関連付けられた未使用のRファイルを削除しました。一度私はすべてが働き始めた。私はそれを回避策と呼ぶほど「解決済み」と呼んでいません。 – acithium

+0

ああ!それはそれを説明する!それが別のパッケージに含まれている場合、あなたが参照する "R"は必要なRではありません!うーん、ちょうど正しいかもしれない第二の考えに...それはコンパイルに失敗したでしょう。 –

+0

ええ、私もそれを取得しません。彼らが2秒のパッケージに入っていたとき、私はRファイルのインポートステートメントを追加しましたが、私はまだヌルポインタを取得していました。私はちょうど今のところそれをこのままにするだろうと思う。ありがとう – acithium

答えて

2

これは、スタックトレースから、あなたの手掛かりです:

12-28 03:47:21.670: ERROR/AndroidRuntime(862): Caused by: java.lang.NullPointerException 
12-28 03:47:21.670: ERROR/AndroidRuntime(862): at com.acithium.rss.ShowDescription.onCreate(ShowDescription.java:47) 

はShowDescription.javaにライン47は何ですか?

+0

//行47は、これら2行の間の空白行です。 db.setText(theStory); //空白行 ボタン戻るボタン=(ボタン)findViewById(R.id.back); – acithium

+0

acithium:それは意味をなさない。そのエラーが発生した後に、ソースを編集しておく必要があります。再構築して再度実行して、その行がどの行にあるかを正確に伝えることができます。 –

+0

さて、db.setText(theStory)と書かれています。問題の原因となっている行です。 – acithium

0

ShowDescriptionコードの47行は何ですか?あなたはヌルカーソルを渡していると思います。

+0

私は新しいlogcatを投稿しました。これは現在48行目にあることを示しています。そのコード行は次のとおりです。db.setText(theStory); – acithium

1

私がコードを正しく理解していれば、ボタンとテキストビューの両方がそのビューの一部であるように見えるので、アクティビティではなくアクティビティに対して設定したshowdescriptionビューのfindViewById()を呼び出す必要があります。

super.onCreate(icicle); 
View showdescription = this.findViewById(R.id.showdescription); 
setContentView(showdescription); 

// .. 

TextView db = (TextView)showdescription.findViewById(R.id.storybox); 
db.setText(theStory); 

Button backbutton = (Button)showdescription.findViewById(R.id.back); 
backbutton.setOnClickListener(new Button.OnClickListener() 
{ 
    public void onClick(View v) 
    { 
     finish(); 
    } 
}); 
関連する問題