2017-04-04 19 views
0

私はContentProviderを作成して、次の条件によって真または偽を返したいと思います。androidのcontentproviderの返り値(true/false)を決める方法

Context ctx = getContext(); 
dbhelper = new DBHelper(ctx); 
database = dbhelper.getWritableDatabase(); 

if (database == null) { 
    return false; 
} else { 
    return true; 
} 

ただし、oncreateでgetWritableDatabaseを実行すると、ANRになります。だから私は別のスレッドにこれを投稿する場合、どのように私はデータベース値がnullであるとしてoncreateの戻り値を決定します。

Thread mCreateOrOpenDatabaseThread = new Thread (new Runnable(){ 
    @Override 
    public void run() { 
    database = dbhelper.getWritableDatabase(); 
    } 
},"CreateOrOpenDatabaseThread"); 
mCreateOrOpenDatabaseThread.start(); 

明示的にtrueを返すことはできますか?私たちが真実か偽りかを返すとどうなり、それが私のアプリケーションにどのような影響を与えますか? oncreateでtrueまたはfalseを返すと、アンドロイドランタイムの内部ではどうなりますか?

+0

少しのアドバイス、文 'if(database == null){ return false; } else { がtrueを返します。 } 'あなたは' return database!= null;に変更できます。 – miljon

+0

'私の作成したContentProviderでは、trueまたはfalseを返すようにしたいですか?' trueまたはfalseを返すとどうなり、アプリケーションにどのような影響がありますか? '。 ???一致していません。まず、真実か偽であるかを返すことを伝えてください。 – greenapps

+0

onCreateメソッドの戻り値はbooleanなので、何かを返す必要があります。 – shrishti

答えて

0

おそらくこのようなものでしょうか?

public boolean func() { 
    FutureTask<Boolean> ft = new FutureTask<Boolean>(new Callable<Boolean>() { 
     @Override 
     public Boolean call() throws Exception { 
      database = dbhelper.getWritableDatabase(); 

      return true;//true or false.. 
     } 
    }); 
    new Thread(ft).start(); 
    try { 
     return ft.get(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return false; 
} 
+0

onCreate()でtrueまたはfalseを返すとどうなるか教えてください。私がコンテンツプロバイダがロードされていないことを意味するfalseを返すと、どのアクションがアンドロイドになるのですか?それで、それはまだ他のモジュールにデータベースを提供するように働くでしょうか? – shrishti

+0

私はアンドロイドのソースコードを見ています。あなたがfalseを返した場合、アンドロイドは何もしません。実際には、あなたの戻り値を照会したり保存したりすることはありません(私の英語はあまりにも悪いですか?): – w568w

+0

しかし、 /developer.android.com/reference/android/content/ContentProvider.html reurn値はcontentproviderが正常に読み込まれたかどうかを示します。だから私はちょうど私のコードにこの戻り値の影響を理解したいと思った – shrishti

関連する問題