2012-12-07 62 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

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

相关问题