【问题标题】:Access preferences from asynctask从 asynctask 访问首选项
【发布时间】:2012-12-17 20:31:36
【问题描述】:

我正在尝试从异步任务中访问已保存的首选项,但我总是收到错误“无法解决首选项”。有任何想法吗?以下是部分代码:

    public class Login extends SherlockActivity {
      SharedPreferences preferences;
    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        preferences = PreferenceManager.getDefaultSharedPreferences(this);

        new LongOperationLogin(this).execute();
    }
}

class LongOperationLogin extends AsyncTask<String, Void, String> {
    private Login longOperationContext = null;    

    public LongOperationLogin(Login context) {
        longOperationContext = context;
    }



    @Override
    protected String doInBackground(String... params) {
    //THIS IS WHERE I NEED THE VALUE
        String username = this.preferences.getString("username", "n/a");
        try {
        //JSON fetching
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
            Log.v("Error", "URL exc");
        } catch (IOException e) {
            e.printStackTrace();
            Log.v("ERROR", "IOEXECPTOIn");
        } catch (JSONException e) {
            e.printStackTrace();
            Log.v("Error", "JsonException");
        }
        return null;
    }


    @Override
    protected void onPostExecute(String result) {
        }
    }

    protected void onPreExecute() {
    }

 protected void onProgressUpdate(Void... values) {
    }
}

提前致谢! 罗伯特

【问题讨论】:

  • 尝试使用Login.this.preferences访问它
  • @Squonk 至少你有礼貌,我见过人们拿走我的 cmets 并将它们变成答案。即使我不确定自己是对的。
  • 你的 AsyncTask 是 inner 类吗?使其包含在 Login 类中。您可能还想将其修饰符更改为私有/受保护。这取决于您需要它的位置,但要访问该变量,您需要将它放在 Login
  • 将 Login 类的大括号放在代码最后一行的末尾。
  • 非常感谢 A-C 成功了!

标签: android variables scope android-asynctask preferences


【解决方案1】:

您应该使用Login.this.preferences 访问您的首选变量。还要确保您的 AsyncTask 是一个内部类(包含在 Login 中)。

【讨论】:

    【解决方案2】:

    试试这个

        String username = longOperationContext.preferences.getString("username", "n/a");
    

    并公开首选项字段

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-04
      • 1970-01-01
      • 1970-01-01
      • 2017-04-29
      • 1970-01-01
      • 2011-03-30
      相关资源
      最近更新 更多