1

このフォーラムを何日も読んでいますが、私の問題に対する答えが見つかりません。

Toast を表示しようとすると、java.lang.NullPointerException が発生するという問題があります。

私のアンドロイドアプリケーションには、メインアクティビティである MyWorkActivity.java と、データベースからのデータに基づいていくつかの統計を計算することを目的とした Statistika.java があります。

クラス MyWorkActivity (パブリック クラス MyWorkActivity はアクティビティを拡張し、OnClickListener を実装します) の内部には、メニュー項目の統計情報があります。

その項目を押すと、次のように statistika.java からのデータを含むレイアウト Statistika.xml を表示したい:

public class MyWorkActivity extends Activity implements OnClickListener 
{
    //Menu item statistika
    else if(item.getItemId()==R.id.statistika)
    {
        //Layout statistika.xml
         setContentView(R.layout.statistika);

         Statistika nova_statistika = new Statistika();
         nova_statistika.rsatiDanasJuceMjesec(sDatumZaPrikaz);
    }
}

しかし、私は java.lang.NullPointerException を受け取っているdbJuceDanas = this.openOrCreateDatabase(DatabaseInfo.IME_BAZE, MODE_PRIVATE,null);ので、データベース部分にコメントして Toast だけを試しましたが、それでも java.lang.NullPointerException が発生します。

これは私の Statistika.java です:

public class Statistika extends Activity
{
 public void rsatiDanasJuceMjesec (String sDatumZaRacunanje)
   {
      Toast.makeText(getBaseContext(), "Toast is working! ", Toast.LENGTH_LONG).show();

    //Računanje radnih sati za prikazani dan
//      SQLiteDatabase dbJuceDanas = null;
//      dbJuceDanas = this.openOrCreateDatabase(DatabaseInfo.IME_BAZE, MODE_PRIVATE,null);
//          
//      //Filtriranje rekordseta po datumu
//      Cursor cJuceDanas = dbJuceDanas.rawQuery("SELECT * FROM " + DatabaseInfo.IME_TABELE + " WHERE " + DatabaseInfo.DATUM + " LIKE '%" + MyWorkActivity.sDatumZaPrikaz + "'", null);
//      
//      if (cJuceDanas !=null && cJuceDanas.getCount() > 0) 
//      {
//          //Ako postoje upisi za datum trenutnog upisa
//          int Column4 = cJuceDanas.getColumnIndex("r_vrijeme");
//
//          //Sumiranje svih radnih vremena od danas
//          fRVDanas=Float.valueOf(0);
//          do 
//          {
//              cJuceDanas.moveToFirst();
//              fRVDanas=fRVDanas+cJuceDanas.getFloat(Column4);
//          
//          }while (cJuceDanas.moveToNext());
//      }
    }
}

これは LogCat です。

04-25 12:33:15.020: E/AndroidRuntime(927): FATAL EXCEPTION: main
04-25 12:33:15.020: E/AndroidRuntime(927): java.lang.NullPointerException
04-25 12:33:15.020: E/AndroidRuntime(927):  at android.content.ContextWrapper.getResources(ContextWrapper.java:80)
04-25 12:33:15.020: E/AndroidRuntime(927):  at android.widget.Toast.<init>(Toast.java:89)
04-25 12:33:15.020: E/AndroidRuntime(927):  at android.widget.Toast.makeText(Toast.java:231)
04-25 12:33:15.020: E/AndroidRuntime(927):  at myWork.amicus.ba.Statistika.rsatiDanasJuceMjesec(Statistika.java:69)
04-25 12:33:15.020: E/AndroidRuntime(927):  at myWork.amicus.ba.MyWorkActivity.onOptionsItemSelected(MyWorkActivity.java:3028)
04-25 12:33:15.020: E/AndroidRuntime(927):  at android.app.Activity.onMenuItemSelected(Activity.java:2205)
04-25 12:33:15.020: E/AndroidRuntime(927):  at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:748)

私は次のことを試しました:

Toast.makeText(this, "Toast is working! ", Toast.LENGTH_LONG).show();

Toast.makeText(Statistika.this, "Toast is working! ", Toast.LENGTH_LONG).show();

他の多くの組み合わせがありますが、機能しません。

私が理解できるように、問題は文脈にあります。

Toast メッセージを表示し、Statistika.java からデータベースにアクセスできるようにするには、どうすればよいですか?

4

1 に答える 1

1
Try this code

public class MyWorkActivity extends Activity implements OnClickListener 
{
    //Menu item statistika
    else if(item.getItemId()==R.id.statistika)
    {
        //Layout statistika.xml
         setContentView(R.layout.statistika);

         Statistika nova_statistika = new Statistika(MyWorkActivity.this);
         nova_statistika.rsatiDanasJuceMjesec(sDatumZaPrikaz);
    }
}


public class Statistika extends Activity
{

Context context;

    public Statistika(MyWorkActivity mainActivity) {
        // TODO Auto-generated constructor stub

        context = mainActivity;
    }

 public void rsatiDanasJuceMjesec (String sDatumZaRacunanje)
   {
      Toast.makeText(context, "Toast is working! ", Toast.LENGTH_LONG).show();
}

}
于 2013-04-25T12:25:12.730 に答える