0

これはよくある質問ですが、間違いを見つけることができません。アクティビティのコンテキストを非アクティビティである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が何らかの理由でnullであるということです。それが何であるか教えてください?

4

3 に答える 3

1

次の方法でRestClientを作成します。

public class RestClient {
    Context context;

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

次に、restclientを次のように初期化します。

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

これにより、RestClientクラスのどこからでもコンテキストにアクセスできるようになります。

于 2012-12-07T11:26:52.277 に答える
0
  Intent i = new Intent(this.context, LoginActivity.class);

コンテキストだけでなくthis.contextにする必要があります

于 2012-12-07T10:53:10.547 に答える
0

おそらくそれは正しいデザインパターンと矛盾しますが、私はアクティビティにシングルトーンを使用し、それは正しく機能します。このような:

      public static Context getInstance(){
        if (instance == null)
        {
            instance = LoginActivity._context;
        }
        return instance;
    }
于 2012-12-07T11:29:07.420 に答える