2015-10-22 100 views
-3

我卡住了一個似乎很容易的問題..我見過很多關於我的問題的線程,但沒有人幫助我。這是爲了獲取共享Prefferences ..Android的AsyncTask,獲得SharedPreferences,卡住

的事情是我想從doInBackground方法的計算結果,但我只是不知道如何使用方法getSharedPreferences

我有我的主要活動MainActivity。我還創建了新的Java Class,應該在後臺執行某些操作。這裏是代碼:

package com.example.pablo.zad3; 

import android.content.SharedPreferences; 
import android.os.AsyncTask; 

public class Background extends AsyncTask<Integer,Void,String>{ 

    @Override 
    protected String doInBackground(Integer... params) { 
     Integer n = params[0]; 
     StringBuilder sb=new StringBuilder(); 
     for(int i=1;i<250;i++) 
     { 
      sb.append(i+ " "); 
      sb.append(n*i+"\n"); 
     } 
     return sb.toString(); 
    } 

    @Override 
    protected void onPostExecute(String s) { 
     super.onPostExecute(s); 

     SharedPreferences prefs = //WHAT NOW?? 
    } 
} 

然而,顯然有一些我不明白,因爲我不知道如何使用它。請爲我提供一些適用於我的案例的示例代碼。

回答

1

你的代碼需要像以下修改:根據您所提出的問題

package com.example.pablo.zad3; 

import android.content.SharedPreferences; 
import android.content.Context; 
import android.os.AsyncTask; 

public class Background extends AsyncTask<Integer,Void,String>{ 

    private Context context; 

    public Background(Context context) { 
     this.context = context; 
    } 

    @Override 
    protected String doInBackground(Integer... params) { 
     Integer n = params[0]; 
     StringBuilder sb=new StringBuilder(); 
     for(int i=1;i<250;i++) 
     { 
      sb.append(i+ " "); 
      sb.append(n*i+"\n"); 
     } 
     return sb.toString(); 
    } 

    @Override 
    protected void onPostExecute(String s) { 
     super.onPostExecute(s); 

     SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this.context); 
    } 
} 

(在主要問題與那些在評論一起),我猜你從未使用過SharedPreferences。這裏是供您參考的鏈接。 http://developer.android.com/reference/android/content/SharedPreferences.html http://developer.android.com/training/basics/data-storage/shared-preferences.html http://www.pcsalt.com/android/storing-data-in-sharedpreferences-android/

+0

或者只是將'SharedPreferences'對象傳遞給任務。它不需要整個上下文。 – TmKVU

+0

@TmKVU你能解釋一下嗎?我是Java/Android Studio中的新手,我真的不知道該怎麼做。 –

+0

與此答案相同,但是您傳遞'SharedPreferences'而不是整個上下文。你可以在'Activity'中獲得'SharedPreferences' – TmKVU

0
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 
+0

你說的'YourActivity'是什麼意思?我用'MainActivity'試過這個,但是我得到的錯誤是它不是封閉類。 –

+0

然後將您的活動傳遞給您的背景構造函數 –

+1

我沒有注意到您已經擁有Context。所以使用thr上下文,我編輯了答案 –

1

如果您的AsyncTask是一個內部類的一些活動,那麼你可以做什麼@Alex曾建議,並引用其作爲

ParentActivity.this 

如果住的AsyncTask自身,你將需要爲您的上下文提供它,或更好地使用回調來完成此任務,您可以從onPostExecute調用此任務。

Background task = new Background(this, ...); 
task.Run(); 

// Your Activity will need to have some callback methods that you've decided to create 
public interface BackgroundListener{ 
    void onBackgroundCompleted(String s); 
} 

,然後在onPostExecute:

@Override 
protected void onPostExecute(String s) { 
    super.onPostExecute(s); 
    mCallback.onBackgroundCompleted(s); 
}