我怎样才能更新"我的活动?

时间:2014-09-30 07:37:41

标签: java android android-activity broadcastreceiver

嗨,大家好我是Android的新手,也许这个问题对你来说太愚蠢了。 我正在开发我的第一个Android应用程序,而我正在做一个检查连接服务状态的方法。一切正常,但我想做的是,当连接状态从"未连接"到"已连接"我想重新加载或更新或调用我的主要活动,以便从我的服务器更新应用程序下载的数据。这是我的代码:

仅限BroadcastReceiver的Java类:

public class NetworkStateReceiver extends BroadcastReceiver {



    private static final String TAG = "NetworkStateReceiver";
    @Override

    public void onReceive(final Context context, final Intent intent) {

        Log.d(TAG, "Network connectivity change");

        if (intent.getExtras() != null) {
            final ConnectivityManager connectivityManager =(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
            final NetworkInfo ni = connectivityManager.getActiveNetworkInfo();

            if (ni != null && ni.isConnectedOrConnecting()) {
                Log.i(TAG, "Network " + ni.getTypeName() + " connected");

            } else if (intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, Boolean.FALSE)) {
                Log.d(TAG, "There's no network connectivity");
            }
        }
    }
}

"应用程序中的片段"清单中的标签:

<receiver android:name="com.example.findmyclients.NetworkStateReceiver">
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
    </intent-filter>
</receiver>

通过调试我已经看到一切正常,日志由&#34; onReceive&#34; java类中的方法但是如果我试着回忆起我的活动我的应用程序崩溃:(我该怎么办才能解决?非常感谢你们所有人。

2 个答案:

答案 0 :(得分:0)

如果我理解你的正确,你需要查看Activity Lifecycle: AndroidDevDocs 并调用更新或重新加载数据的方法。例如,您一次又一次地调用onStart()来重新加载TextView中的数据或类似的东西。但这取决于你的应用:也许你应该创建一个你更新&#34;您应用的所有字段。每次状态更改为&#34;已连接&#34;

答案 1 :(得分:0)

如果我是你,我会做以下事情。
我会通过Singleton访问这个类(您的网络类),我会创建一个活动池,以便在有连接时通知。每个想要监听此活动的活动都可以注册到您的此类课程,当您进行网络更改时,您会通知活动(可以是1或2 ... 100)。

您所要做的就是创建一个类似的界面:

public class NetworkStateReceiver extends BroadcastReceiver {
private static NetworkStateReceiver instance = null;
private List<INetworkNotify> list = new ArrayList<INetworkNotify>();
protected NetworkStateReceiver(){}
public static NetworkStateReceiver getInstance()
{
  //standard code for initializing the instance;
}
public void registerListener(INetworkNotify listener)
{
   //add it to the list pool.
}

public void deregisterListener(INetworkNotify listener)
{
   //remove it from the pool.
} 

private static final String TAG = "NetworkStateReceiver";
@Override

public void onReceive(final Context context, final Intent intent) {

    Log.d(TAG, "Network connectivity change");

    if (intent.getExtras() != null) {
        final ConnectivityManager connectivityManager =(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
        final NetworkInfo ni = connectivityManager.getActiveNetworkInfo();

        if (ni != null && ni.isConnectedOrConnecting()) {
            Log.i(TAG, "Network " + ni.getTypeName() + " connected");

        } else if (intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, Boolean.FALSE)) {
            Log.d(TAG, "There's no network connectivity");
        }
        notifyListeners("Something, anything.");
    }
}

private void notifyListeners(String msg)
{
   //e.g
   for(INetworkListener listener:list)
   {
       listener.onUpdate(msg);
   }
   //notify the listeners;
}    

您可以在下面看到INetworkNotify界面

Interface INetworkNotify
{
   void onUpdate(String msg);
}

在活动中,您所要做的就是实现监听器。