2012-03-26 4 views
1

InterServiceで起動しているスレッド内でアプリケーションクラスを使用する必要があります。私IntentServiceで 私は、次のコードを持っている:スレッド内のアンドロイドアプリケーションクラス

public class AppLoader extends Application{ 
private AppLoader newApp; 

public void onCreate() 
{ 
    super.onCreate(); 
} 

public AppLoader getNewApp() 
{ 
    if(newApp == null) 
    newApp = new AppLoader(); 
    return newApp;  
} 

iがjava.lang.NullPointerExceptionがを取得し、:これは私のアプリケーションである

public ConnectionThread (ResultReceiver receiver, Context context, AppLoader app) 
    { 

     this.receiver = receiver; 
     this.context = context; 
     this.activityManager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE); 
     this.app = app; 
    } 

    @Override 
    public void run() { 
    Log.d("ConnectionThread","Starting Server Connection"); 
     try { 
      while(isThereActivityRunning()) { 
       if(app.isInternetOn()) 
       { 
        Log.d("ConnectionThread", app.getText()); 
        results = sendGetMessage(); 
        b.putString("results", results); 
        receiver.send(2, b); 
       } 

:これは私のスレッドで

protected void onHandleIntent(Intent intent) { 
    final ResultReceiver receiver = intent.getParcelableExtra("receiver"); 
    context = getBaseContext(); 
    app = (AppLoader)getApplicationContext(); 
    ConnectionThread thread = new ConnectionThread(receiver, context, app.getNewApp()); 

を私は理由を理解できません..

+0

スタックトレースなしではお手伝いできません。 – WarrenFaith

+0

例外には、通常、例外がどこで発生したかを示す行があります。スレッドを開始する前に 'getNewApp()'を呼び出すことは決してない場合、私の頭の上から、 'app'はnullになる可能性がありますが、それはあなたが提供したものに基づいて伝えるのは難しいです。 – DeeV

+0

しかし、私はスレッドコンストラクタ内でgetNewAppを使用しました –

答えて

2

あなた自身のアプリケーションinstを作成することはできませんANCE、即ち

newApp = new AppLoader();

が呼び出されることを意味するものではありません。 Androidのは、あなたのためのアプリを作成し、あるいは少なくともそれはあなたがそれをコンパイルしますが、あなたは何もAndroidのインスタンス化アプリケーションにアクセスすることはできませんつまり

<application ... android:label="@string/app_name" android:name="AppLoader" android:debuggable="true">

、マニフェストでアプリケーションクラスを宣言した場合はありません通常はそうです。

あなたは上記のようにマニフェストを持っていると仮定すると、あなたはすでに呼び出すことにより、アプリケーションインスタンスへのアクセス権を持っている:

app = (AppLoader)getApplicationContext();

ので、それを使用してgetNewApp()メソッドを削除します。

+0

あなたは正しいです、私はそれをやっていなかったいくつかの理由の前に試してみました...私はそれを書き直して今、それはありがとう! –