嗨,大家好我是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类中的方法但是如果我试着回忆起我的活动我的应用程序崩溃:(我该怎么办才能解决?非常感谢你们所有人。
答案 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);
}
在活动中,您所要做的就是实现监听器。