2014-04-07 119 views
0

我試圖從一個從BroadcastReceiver發佈到另一個類的類傳遞包含Wi-Fi信息的數組列表。我可以在兩個類之間傳遞一個正常的vriable與getter。但我得到一個空數組,因爲onReceive方法沒有執行。我想在另一個類中執行onReceive方法(但我不能實例化它),或者在另一個類中獲取以onReceive方法創建的數組與一個getter(但我不能得到列表)。請問我怎麼能得到這個數組在第二課。Android BroadcastReceiver:從onReceive方法獲取對象

這是WifiData類

public class WifiData extends BroadcastReceiver{ 
List<String[]> wifiValues = new ArrayList<String[]>(); 
WifiManager wifi; 
Button  enab; 
String resultsString ; 
String[] myStringArray; 
int aa = 10; 
int a=10 ; 
List<String[]> getWifi(){ 
    return wifiValues ; 
} 

@Override 
public void onReceive(Context context, Intent intent) { 


    if(intent.getAction().equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)){ 
     List<ScanResult> results = wifi.getScanResults(); 

     resultsString = results.toString() ; 


     for(int i=0;i<results.size();i++){ 

      Log.i("Wifi SSID",results.get(i).level+""); 
      wifiValues.add(new String[] { results.get(i).level +"" }); 
     } 

    } 

} 

} 

這是必須得到的WiFi信息來源和創建圖表SalesStackedBarChart類:

public class SalesStackedBarChart extends AbstractDemoChart { 

    public Intent execute(Context context) { 

     WifiData wi = new WifiData(); 

    // values.add(new double[] {wi.getWifi() }); 
     Log.i("aaaa",wi.getWifi()+""); 
    } 
} 

謝謝。

+0

這是否存在類作爲活動或片段的一部分? –

+0

SalesStackedBarChart類是一個活動,WifiData類是一個簡單的類,我想在後臺執行WifiData類@shimi_tap – Amina

回答

1

您正試圖使用​​AChartEngine在圖中顯示數據嗎? 創建一個新活動並將該圖表放入該佈局中。閱讀here如何使用AChartEngine。

現在,當您將數據從第一類(活動)傳遞到第二類(活動)時,可以使用意圖傳遞數據。使用intent.putExtras()向Intent添加額外內容。首先創建一個包。在該捆綁中,使用適當的方法(如​​)將數據放在第二個類(活動)中調用getIntent,並將該意圖捕獲到臨時變量中。

您可以使用intent.getExtras()。getSerializableExtra()等來檢索數據。您可以將數據加載到AChartEngine數據中以顯示爲圖形。

+0

正確的,我使用的是achartengine,但我想要從SalesData中的數據獲取SalesStackedBarChart類中的數據給他們看。我需要數據diplay它@upenpat – Amina

+0

我需要在buckground中執行onReceive方法,我只是使用一個佈局來顯示圖表。 – Amina

+0

這是你的onReceive方法應該如何
'@覆蓋 \t公共無效的onReceive(上下文語境,意圖意圖){ 如果(intent.getAction()。等於(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)){ 名單結果=無線網絡連接。 getScanResults(); \t \t Intent i = new Intent(context,SalesStackedBarChartActivity.class); \t \t Bundle b = new Bundle(); \t \t b。putSerializable(「data」,結果); \t \t i.putExtras(b); \t \t startActivity(i); } }' – upenpat

0

這是一個工作解決方案: 從WifiActivity活動開始,這將確定wifi掃描列表,並將其發送到TruitonAChartEngineActivity類。

WifiActivity活性

public class WifiActivity extends Activity { 
     /** Called when the activity is first created. */ 
    WifiManager wifi; 
    Button  enab; 
    String resultsString ; 
    String[] myStringArray; 
    int aa = 10; 
    //tableau pris à partir de http://www.radio-electronics.com/info/wireless/wi-fi/80211-channels-number-frequencies-bandwidth.php 
    int [ ] [ ] Center_Frequency_2 = { { 1,2,3,4,5,6,7,8,9,10,11,12,13,14 }, 
             { 2412, 2417, 2422, 2427, 2432,2437,2442,2447,2452 ,2457,2462,2467,2472,2484}, 
            }; 



    public class Receiver extends BroadcastReceiver{ 



     @Override 
     public void onReceive(Context context, Intent intent) { 



      if(intent.getAction().equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)){ 
       final List<ScanResult> results = wifi.getScanResults(); 

       resultsString = results.toString() ; 
       Log.i("resultsString*****************",resultsString); 
       final String [ ] [ ] chanelRssi = new String [results.size()][2]; 



      String[] tabResults = new String[results.size()]; 
      for(int i=0;i<results.size();i++){ 
       if (results.get(i).frequency /1000 == 2) { 
        for (int j =0;j<14;j++) 
        { if (Center_Frequency_2[1][j] == results.get(i).frequency) 
       tabResults[i]=results.get(i).SSID +" (" + results.get(i).BSSID + ") \n"+ results.get(i).frequency +"\n"+ results.get(i).level +"\n"+ results.get(i).capabilities +"\n"+"canal "+Center_Frequency_2[0][j] ; 
        chanelRssi[i][0]=Center_Frequency_2[0][j]+""; 
        chanelRssi[i][1]=results.get(i).level +""; 

        } 
        } 
       } 
      Button send = (Button) findViewById(R.id.barChartButton); 
      send.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Log.i("click","click"); 
        Toast.makeText(getApplicationContext(), 
          "Position :"+resultsString , Toast.LENGTH_LONG) 
          .show(); 

        Intent intent1 = new Intent (getApplicationContext(),TruitonAChartEngineActivity.class); 
        Bundle bundleObject = new Bundle(); 
        bundleObject.putSerializable("key", (Serializable) results); 
        intent1.putExtras(bundleObject); 
        startActivityForResult(intent1,0); 


       /* Intent intent1 = new Intent (getApplicationContext(),TruitonAChartEngineActivity.class); 
        startActivityForResult(intent1,0);*/ 

       } 
      }); 



      } 



     } 

     private void startActivities(Intent intent, int i) { 
      // TODO Auto-generated method stub 

     } 


    } 


    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_wifi); 
     ConnectivityManager cxMgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 
     wifi = (WifiManager)getSystemService(Context.WIFI_SERVICE); 

     Receiver receiver = new Receiver(); 
     registerReceiver(receiver,new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); 
     registerReceiver(receiver,new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)); 

    } 



} 

而TruitonAChartEngineActivity類

public class TruitonAChartEngineActivity extends ActionBarActivity { 

private static final int SERIES_NR = 2; 
String message1; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_truiton_achart_engine); 
    XYMultipleSeriesRenderer renderer = getTruitonBarRenderer(); 
    myChartSettings(renderer); 
    Bundle v = getIntent().getExtras(); 
    ArrayList<ScanResult> classObject = (ArrayList<ScanResult>) v.getSerializable("key"); 
    // message1 = v.getString("message1"); 
    /* Toast.makeText(getApplicationContext(), 
      "Position :" , Toast.LENGTH_LONG) 
      .show();*/ 
    /* Toast.makeText(getApplicationContext(), 
      "Position classObject :"+classObject , Toast.LENGTH_LONG) 
      .show();*/ 
    for(int index = 0; index < classObject.size(); index++){ 

      String Object = classObject.get(index).level+""; 
      Toast.makeText(getApplicationContext(), "Id is :"+Object, Toast.LENGTH_SHORT).show(); 
     } 

    Intent intent = ChartFactory.getBarChartIntent(this, getTruitonBarDataset(), renderer, Type.DEFAULT); 
     startActivity(intent); 

}} 
相關問題