0

私はsmthを行うアプリケーションを持っています...メインクラスの開始時に次のことを行います:

myCommunicator = new Communicator();
    // LOAD DB
    dbAdapter = new ToDoDBAdapter(this);
    dbAdapter.open();
    // CHECK CHANNEL CHANGES
    try {
      dbHandler = dbAdapter.getAllChannelNames();
      startManagingCursor(dbHandler);
      String md5Channels = "";
      while (dbHandler.moveToNext()) 
      {
          String xy = dbHandler.getString(0);
          md5Channels += xy;
      }
      // 2. Make MD5 string
      md5Channels = myCommunicator.md5(md5Channels); 

      // 3. Compare MD5
      ChannelsArray = myCommunicator.getChannels(md5Channels);
      // 4. Update if needed
      if(ChannelsArray.length() > 0)
      {
          dbAdapter.populateDB(ChannelsArray);
      }

      dbHandler = dbAdapter. getAllToDoItemsCursor();

    } 
    catch (JSONException e) {
            Log.d(" - PopulateChannels - ", "Napaka: " + e.toString());
        }

myCommunicator、dbAdapter、dbHandler、ChannelsArray が定義されています...

私が持っているよりも

public Cursor getChannelCursor()
{
    return dbHandler;
}
public ToDoDBAdapter getDBAdapter()
{
    return dbAdapter;
}
public Communicator getCommunicator()
{
    return myCommunicator;
}
public JSONArray getChannelsArray()
{
    return ChannelsArray;
}

このクラスには tabhost があります * それを Activity1 と呼びます...そして、別のクラスから * 呼び出すと * Activity2 と呼びます... (tabost 内で) 結果は null です ...

したがって、Activity1.getChannelsArray();Activity2 から (または他の関数を) 実行すると、常に null になります...解決方法がわかりません...


こんにちは、情報不足で申し訳ありません...

主なアクティビティがあります...最初に呼び出されます(Activity1)...そこにDBを移入し(変更があれば)、DB Cursorを作成します...このアクティビティはTabHostを保持します...

説明する最も簡単な方法は、いくつかのコードを記述することです。

これがActivity1(主な活動)です

package com.Avtivity1;
public class activity1 extends Activity
{

  public void onCreate(Bundle savedInstanceState) { 
  ...
     dbAdapter = new ToDoDBAdapter();
  }
  public ToDoDBAdapter getDBAdapter()
  {
    return dbAdapter;
  }
}

そして今、別のもの:

package com.Avtivity1;
public class activity1 extends TabActivity implements OnTabChangeListener 
{
  private ToDoDBAdapter dbAdapter;
  @Override
  public void onCreate(Bundle icicle) { 
  ...
     Activity1 Activity1 = new Activity1();
     Activity1.getDBAdapter();
  }
  public ToDoDBAdapter getDBAdapter()
  {
    return dbAdapter;
  }
}

そして、この部分Activity1.getDBAdapter();は常にnullを返します...

4

1 に答える 1

1

Activity一般に、アプリケーションの他の部分で使用する必要があるデータを に保持しないでください。システムはメモリ不足などのニーズに基づいてリソースを再利用する可能性があるため、アクティビティの寿命は信頼できません。

代わりに、Activity 以外のシングルトン クラスに値を格納します。

于 2011-04-12T13:06:02.990 に答える