Android:如何在主要活动上定义Cursor,DBHandler ...并从另一个活动中调用它?

时间:2011-04-12 12:24:57

标签: android tabactivity

我有一个应用程序,它可以实现......在主要课程开始时我会做以下事情:

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 ...

所以,当我从Activity2执行Activity1.getChannelsArray();(或任何其他功能)时,它始终为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 ...

1 个答案:

答案 0 :(得分:1)

通常,不要将数据保留在需要在应用程序的其他部分中使用的Activity中。不能依赖活动的生命周期,因为系统可能会根据内存不足等需求回收资源。

相反,请将您的值存储在单个非Activity类中。