【问题标题】:How can I "update" my activity?如何“更新”我的活动?
【发布时间】:2014-09-30 07:37:41
【问题描述】:

大家好,我是 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>

通过调试,我已经看到一切正常,日志是由 java 类中的“onReceive”方法编写的,但是如果我尝试回忆我的活动,我的应用程序崩溃:(我能做些什么来解决??谢谢你们这么多。

【问题讨论】:

  • 崩溃 => LogCat。请。
  • 如何回忆你的主要活动?
  • @2Dee 我粘贴的这段代码没有提供任何崩溃,但是当我尝试放置通常的代码来调用活动时(Intent intent = new Intent...,startActivity(intent);)在真正的陈述中:if (ni != null && ni.isConnectedOrConnecting()) 应用程序崩溃,日志中出现 Java 空指针异常。
  • @HarshaVardhan 观看 2Dee 的评论
  • 试试这个...在 mainactivity 中有广播接收器,当你在 Activity 中有任何更新时。刷新视图。

标签: java android android-activity broadcastreceiver


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    如果我是你,我会做以下事情。
    我会让这个类(你的网络类)可以通过 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);
    }
    

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

    【讨论】:

      猜你喜欢
      • 2011-04-09
      • 1970-01-01
      • 1970-01-01
      • 2018-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-28
      • 1970-01-01
      相关资源
      最近更新 更多