2014-09-30 28 views
1

嗨,大家好我是Android新手,也許這個問題對你來說太笨了。 我正在開發我的第一個android應用程序,我正在做一個檢查連接服務狀態的方法。所有工作,但我想要做的是,當連接狀態從「未連接」切換到「連接」我想重新加載或更新或重新調用我的主要活動,以更新我的數據從我的服務器下載應用程序。這裏是我的代碼:清單中如何「更新」我的活動?

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"); 
      } 
     } 
    } 
} 

片段中的「應用程序」標籤:

Java類僅用於廣播接收器

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

隨着調試我已經看到了,所有的是工作,日誌是由java類「的onReceive」的方法寫的,但如果我回想一下我的活動我的應用程序崩潰:(我能做些什麼來解決?謝謝你這麼多,你的所有。

+0

Crash => LogCat。請。 – 2Dee 2014-09-30 07:43:14

+0

如何回憶我們的主要活動? – 2014-09-30 07:44:15

+0

@ 2Dee這段代碼粘貼我你不提供任何崩潰,但是當我嘗試把平時碼召回活動(意向意圖=新意圖...,startActivity(意向);)中的真實的陳述:如果(ni!= null && ni.isConnectedOrConnecting())使用Java空指針異常從應用程序崩潰。 – 2014-09-30 07:47:25

回答

0

如果我理解你改正,你需要看看活動週期: AndroidDevDocs 和呼叫到您更新或重新裝載數據的方法。例如,你一次又一次地調用onStart()來重載TextView中的數據或類似的東西。但這取決於您的應用程序:也許您應該創建一個功能,在其中「更新」應用程序的所有字段。每次如果我是你,我會做以下的狀態更改爲「連接」

0


我會做這個類(網絡類)訪問通過辛格爾頓和我將創建活動池被通知的情況下,是有聯繫的。每個想聽這個的活動都可以註冊到你的這一類,當有網絡變化時你通知活動(它可以是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); 
} 

活動中的所有你所要做的就是實施聽衆。

相關問題