2011-04-02 66 views
2

我仍然是Android的新手,請有人幫忙。在android中使用類 - 使用上下文和幫助類

我想使用的方法從類,如下所示:

package com.test; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.Window; 
import android.widget.TextView; 

public class MyApp extends Activity { 

    /** Called when the activity is first created. */ 
    private Net wifi; 

    TextView textStatus;  

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.main); 

    wifi=new Net(this); 
    textStatus = (TextView) findViewById(R.id.text); 
    textStatus.append("Your online status is "); 

    if (wifi.isOnline()) { 
     textStatus.append("online "+wifi.getInfo()); 
    } else { 
     textStatus.append("offline "+wifi.getInfo()); 
    } 
    } 
} 

和我網類

import android.app.Service; 
import android.content.Context; 
import android.content.Intent; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.net.wifi.WifiInfo; 
import android.net.wifi.WifiManager; 
import android.os.IBinder; 

public class Net { 
    WifiManager wifi; 
    ConnectivityManager cm; 
    NetworkInfo netInfo; 

    public Net (Context ctx) { 
    cm = (ConnectivityManager) ctx.getSystemService(ctx.CONNECTIVITY_SERVICE); 
    netInfo = cm.getActiveNetworkInfo(); 
    wifi = (WifiManager) ctx.getSystemService(Context.WIFI_SERVICE); 
    } 

    public boolean isOnline() { 
    netInfo = cm.getActiveNetworkInfo(); 

    if (netInfo != null && netInfo.isConnectedOrConnecting()) { 
     return true; 
    } else { 
     return false; 
    } 
    } 

    public NetworkInfo[] getName() { 
    NetworkInfo[] name=cm.getAllNetworkInfo(); 
    return name;  
    } 

    public String getInfo() { 
    // Get WiFi status 
    WifiInfo info = wifi.getConnectionInfo(); 
    return info.getSSID().toString(); 
    } 
} 

我認爲我不應該延長我的網類活動?運行應用程序時出現源未找到錯誤。

+0

它看起來像你的第一個代碼示例缺少頂部幾行。 – harpo 2011-04-02 22:10:52

+0

哪些資源沒有找到?一般而言,您必須至少在班級中擴展活動。 – RoflcoptrException 2011-04-02 22:10:52

+0

您必須在應用程序的Android Manifest文件中定義代碼中的所有活動。 – 2011-04-02 22:20:19

回答

3

我相信我不應該用Activity擴展我的 網絡類?

正確!

類只是一個幫手所以可以簡單地定義爲:

public class Net { 

    public Net (Context ctx) { 
    cm = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE); 
    netInfo = cm.getActiveNetworkInfo(); 
    } 

    // Your other methods here... 
} 

當您創建wifi對象,使用wifi = new Net(this);

在Android的Activity類是用來爲視覺/交互元素(如按鈕,文本瀏覽等)提供UI框架 - 基本上用戶需要與之交互的任何東西。這不適用於您的Net類。

+0

如果我沒有從活動或服務擴展它,它不會識別getSystemService方法:( – Alanagh 2011-04-02 22:32:37

+0

@Alanagh:請參閱我編輯的代碼示例爲您的Net類如果您將活動上下文傳遞給Net類,您應該能夠使用ctx.getSystemService()。 – Squonk 2011-04-02 22:41:06

+0

事實上,MisterSquonk是正確的。因爲Activity類擴展了Context,所以你可以在當前對象上調用像getSystemService這樣的方法。在別的地方,你需要一個上下文 - 但你可以隨時把它提供給其他類+1 – 2011-04-02 23:01:53