Java 共享偏好与上下文?

Java 共享偏好与上下文?,java,android,sharedpreferences,android-context,Java,Android,Sharedpreferences,Android Context,我在Android方面没有太多的经验,所以到目前为止我写的每一段代码都非常简单。现在我需要实现一个本地化和导航应用程序,所以我需要将代码分解成模块,这样我就可以单独更改每个组件。我有一些变量需要在不同的类之间共享。我使用了静态变量,但我在这里的一些帖子中读到,静态变量不是首选的。然后我发现一些其他的帖子在谈论上下文。因此,我创建了一个名为Globals的类,并在清单文件中添加了以下行: <application android:name="com.example.smartnav.Glo

我在Android方面没有太多的经验,所以到目前为止我写的每一段代码都非常简单。现在我需要实现一个本地化和导航应用程序,所以我需要将代码分解成模块,这样我就可以单独更改每个组件。我有一些变量需要在不同的类之间共享。我使用了静态变量,但我在这里的一些帖子中读到,静态变量不是首选的。然后我发现一些其他的帖子在谈论上下文。因此,我创建了一个名为Globals的类,并在清单文件中添加了以下行:

 <application android:name="com.example.smartnav.Globals" 
  package="com.example.smartnav"
 android:icon="@drawable/ic_launcher"
 android:allowBackup="true"

   android:label="@string/app_name"/>

下面是Globals课程:

    package com.example.smartnav;


import java.util.List;

import android.net.wifi.ScanResult;

import android.app.Application;

public class Globals extends Application {
      private Boolean Scanning=false;
      private String Logname;
      private int interval;
      private int numOfScans;
      private List<ScanResult> result;



      //getters
      public Boolean getScannig(){
        return Scanning;
      }
      public int getInterval()
      {
          return interval;
      }
      public int getScans()
      {
          return numOfScans;
      }
      public List<ScanResult> getRes()
      {
          return result;
      }
      public String getLog()
      {
          return Logname;
      }


    //setter

      public void setScanning(Boolean s){
        Scanning= s;
      }
      public void setRes(List<ScanResult> res)
      {
          result =res;
      }
      public void setInterval(int I)
      {
          interval = I;
      }
      public void setScans(int S)
      {
          numOfScans=S;
      }
      public void setLog(String s)
      {
          Logname= s;
      }

}
package com.example.smartnav;
导入java.util.List;
导入android.net.wifi.ScanResult;
导入android.app.Application;
公共类Globals扩展了应用程序{
私有布尔扫描=假;
私有字符串日志名;
私有整数间隔;
私人int NUMOF扫描;
私有列表结果;
//吸气剂
公共布尔getScannig(){
返回扫描;
}
公共整数getInterval()
{
返回间隔;
}
公共int getScans()
{
返回数字扫描;
}
公共列表getRes()
{
返回结果;
}
公共字符串getLog()
{
返回日志名;
}
//塞特
公共无效设置扫描(布尔值s){
扫描=s;
}
公共无效集合(列表集合)
{
结果=res;
}
公共无效设置间隔(int I)
{
间隔=I;
}
公共垃圾桶(内部垃圾桶)
{
numofs=S;
}
公共void setLog(字符串s)
{
Logname=s;
}
}
现在我有两个问题,第一个是每当我尝试使用Globals类时,我的应用程序总是崩溃,下面是代码:我是否错误地使用了上下文

    public class MainActivity extends Activity {

    private Context context;
    public WifiManager Wifi;
    private  WifiReceiver receiverWifi;
    private IntentFilter filter;
    private List<ScanResult> result;
    private File AppDir;
    private static String filename;
    private File file;
    private FileWriter writer;
    private Globals AppState ;
    private int Interval;
    private int numOfScans;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Log.d("Main ","activity created");
        //
       AppState = ((Globals)getApplicationContext());
       context= this;
       Wifi=(WifiManager) getSystemService(Context.WIFI_SERVICE);
       receiverWifi = new WifiReceiver();
        filter= new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
        registerReceiver(receiverWifi, filter);

      Log.d("Main   ","wifi registered");
        // create the application directory

        AppDir = new File(Environment.getExternalStorageDirectory()+"/SmartNavi/Log");
        if(AppDir.isDirectory())
        {
            filename=Environment.getExternalStorageDirectory()+"/SmartNavi/Log/log.txt";
            file = new File(filename);
            if(!file.exists())
                try {
                    file.createNewFile();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            else 
            {
                Date d= new Date();
                filename=Environment.getExternalStorageDirectory()+"/SmartNavi/Log/log"+d.getTime()+".txt";
                file = new File(filename);
                try {
                    file.createNewFile();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            }
        else
        {
            AppDir.mkdirs();
            filename=Environment.getExternalStorageDirectory()+"/SmartNavi/Log/log.txt";
            file = new File(filename);
            if(!file.exists())
                try {
                    file.createNewFile();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            else 
            {
                Date d= new Date();
                filename=Environment.getExternalStorageDirectory()+"/SmartNavi/Log/log"+d.getTime()+".txt";
                file = new File(filename);
                try {
                    file.createNewFile();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

        }

        //setting pars

        Interval=250;
        numOfScans=4;
        AppState.setInterval(Interval);
        AppState.setScans(numOfScans);
        AppState.setLog(filename);


        Wifi.startScan();

        try {
                writer = new FileWriter(file, true);
                writer.append("Smart Navigation. \n");
                writer.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
       // AsyncScanning.AsyncScan();
    }//on create



    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }



    class WifiReceiver extends BroadcastReceiver {

        public void onReceive(Context c, Intent intent) {

            result=Wifi.getScanResults();
    //      AppState.setRes(result);
             try {
                writer = new FileWriter(file, true);
                writer.append(result.size()+" s \n");
                writer.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }//end of on receive

    }// end of class
} // end of smartNav
公共类MainActivity扩展活动{
私人语境;
公共WifiManager-Wifi;
私人无线接收器无线;
专用过滤器;
私有列表结果;
私有文件AppDir;
私有静态字符串文件名;
私有文件;
私有文件编写器;
私人的国家;
私有整数间隔;
私人int NUMOF扫描;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
日志d(“主要”、“创建的活动”);
//
AppState=((全局)getApplicationContext());
上下文=这个;
Wifi=(WifiManager)getSystemService(Context.Wifi\u服务);
receiverWifi=新WifiReceiver();
过滤器=新的意向过滤器(WifiManager.SCAN\u RESULTS\u AVAILABLE\u ACTION);
注册接收者(接收者、过滤器);
Log.d(“主”、“wifi注册”);
//创建应用程序目录
AppDir=新文件(Environment.getExternalStorageDirectory()+“/SmartNavi/Log”);
if(AppDir.isDirectory())
{
filename=Environment.getExternalStorageDirectory()+“/SmartNavi/Log/Log.txt”;
文件=新文件(文件名);
如果(!file.exists())
试一试{
createNewFile();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
其他的
{
日期d=新日期();
filename=Environment.getExternalStorageDirectory()+“/SmartNavi/Log/Log”+d.getTime()+“.txt”;
文件=新文件(文件名);
试一试{
createNewFile();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}
其他的
{
AppDir.mkdirs();
filename=Environment.getExternalStorageDirectory()+“/SmartNavi/Log/Log.txt”;
文件=新文件(文件名);
如果(!file.exists())
试一试{
createNewFile();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
其他的
{
日期d=新日期();
filename=Environment.getExternalStorageDirectory()+“/SmartNavi/Log/Log”+d.getTime()+“.txt”;
文件=新文件(文件名);
试一试{
createNewFile();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}
//设置PAR
间隔=250;
numOfScans=4;
AppState.setInterval(Interval);
AppState.setScans(NUMOFScan);
AppState.setLog(文件名);
Wifi.startScan();
试一试{
writer=newfilewriter(file,true);
writer.append(“智能导航”。\n”);
writer.close();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
//AsyncScan.AsyncScan();
}//论创造
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.main,menu);
返回true;
}
类WifiReceiver扩展了BroadcastReceiver{
接收时公共无效(上下文c,意图){
结果=Wifi.getScanResults();
//AppState.setRes(结果);
试一试{
writer=newfilewriter(file,true);
writer.append(result.size()+“s\n”);
writer.close();
}捕获(IOE异常){
//