2012-12-07 61 views
0

我知道這是常見問題,但無法找到我的錯誤。 我需要將Activity的上下文傳遞給RestClient類,它是非活動的。我不喜歡這樣寫道:從非活動類開始活動並將上下文傳遞給它

public class RestClient { 
public void setContextRest(Context ctx) 
    { 
     this.context = ctx; 
    } 
    public Context getContextRest() 
    { 
     return this.context; 
    } 
    public RestClient(Context context) 
    { 
     this.context = context; 
    } 
} 

,並在我的活動類:

RestClient helper = new RestClient(LoginActivity.this); 
helper.setContextRest(LoginActivity.this); 

,這是我如何得到它的RESTClient實現:

Intent i = new Intent(context, LoginActivity.class); 
i.putExtra("relogin", true); 
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
context.startActivity(i); 

,我得到

java.lang.NullPointerException 
    at android.content.ComponentName.<init>(ComponentName.java:75) 
    at android.content.Intent.<init>(Intent.java:2823) 
    at com.library.RestClient.Execute(RestClient.java:276) 
    at com.library.JSONParser.getJSONFromUrl(JSONParser.java:46) 
at com.library.UserFunctions.loginUser(UserFunctions.java:76) 
    at com.assignmentexpert.LoginActivity$LoginTask.doInBackground(LoginActivity.java:318) 
    at com.assignmentexpert.LoginActivity$LoginTask.doInBackground(LoginActivity.java:1) 
    at android.os.AsyncTask$2.call(AsyncTask.java:185) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
    at java.lang.Thread.run(Thread.java:1019) 
    threadid=9: thread exiting with uncaught exception (group=0x40018578) 

Intent i = new Intent(context, LoginActivity.class);。問題是context由於某種原因而爲空。請告訴我,它是什麼?

+0

你肯定傳遞null。 –

+0

如果您使用RestClient構造函數來初始化上下文變量,則無需從LoginActivity活動中調用setContextRest –

+0

在應用程序中傳遞上下文時,應儘可能使用Activity.getApplicationContext()。將活動用作上下文可能會導致該活動在內存中保存的時間比它需要的時間長得多,從而導致內存問題。 – TofferJ

回答

0

也許它違背了正確的設計模式,但我使用Singletone作爲我的活動並且它正常工作。像這樣:

 public static Context getInstance(){ 
     if (instance == null) 
     { 
      instance = LoginActivity._context; 
     } 
     return instance; 
    } 
0
Intent i = new Intent(this.context, LoginActivity.class); 

應該this.context,而不是隻是一個上下文

1

以這種方式創建您的RESTClient實現:

public class RestClient { 
    Context context; 

    public RestClient(Context mcontext) { 
     context = mcontext; 
    } 
    .... 
    .... 
} 

現在,初始化RESTClient實現這樣的:

RestClient client; 
client = new RestClient(getApplicationContext()); 

它將允許您訪問RestClient類中的任何位置的上下文。

+0

最佳答案。我將提供相同的答案。 –

相關問題