2016-09-13 10 views
-1

私のアプリケーションでデータベースの更新を実行するには、AsyncTaskを使用する必要があります(主に追加と削除が必要です)。私は自分のプログラムでその機能をコーディングするために正確に何がわからないのですか?それは私の2番目のアクティビティファイルに書き込まれます。SQLiteデータベースでのAsyncTaskの使用

DatabaseActivity.java

package com.example.healthylife; 



import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.TextView; 


public class DatabaseActivity extends AppCompatActivity { 


TextView idView; 
EditText RecipeBox; 
EditText CategoryBox; 
EditText IngredientsBox; 
EditText InstructionsBox; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_database); 

    idView = (TextView) findViewById(R.id.Recipe_ID); 
    RecipeBox = (EditText) findViewById(R.id.edit_RecipeName); 
    CategoryBox = (EditText) findViewById(R.id.input_category); 
    IngredientsBox = (EditText) findViewById(R.id.edit_Ingredients); 
    InstructionsBox = (EditText) findViewById(R.id.edit_Instructions); 
} 

public void newRecipe (View view){ 
    MyDBHandler dbHandler = new MyDBHandler (this, null, null, 1); 

    Recipe recipe = new Recipe(); 

    dbHandler.addRecipe(recipe); 
    RecipeBox.setText(""); 
    CategoryBox.setText(""); 
    IngredientsBox.setText(""); 
    InstructionsBox.setText(""); 
} 

public void lookupRecipe (View view){ 
    MyDBHandler dbHandler = new MyDBHandler(this, null, null, 1); 

    Recipe recipe = dbHandler.findRecipe(RecipeBox.getText().toString()); 

    if (recipe != null){ 
     idView.setText(String.valueOf(recipe.getID())); 

     CategoryBox.setText(String.valueOf(recipe.getCategory())); 
     IngredientsBox.setText(String.valueOf(recipe.getIngredients())); 
     InstructionsBox.setText(String.valueOf(recipe.getInstructions())); 
    }else { 
     idView.setText("No Match Found"); 
    } 
} 

public void removeRecipe (View view){ 
    MyDBHandler dbHandler = new MyDBHandler(this, null, null, 1); 

    boolean result = dbHandler.deleteRecipe(RecipeBox.getText().toString()); 

    if (result){ 
     idView.setText("Record Deleted"); 
     RecipeBox.setText(""); 
     CategoryBox.setText(""); 
     IngredientsBox.setText(""); 
     InstructionsBox.setText(""); 
    }else 
     idView.setText("No Match Found"); 
} 

} 

任意の助けいただければ幸いです。ありがとう。

+0

私はそれを見ているようにそれに取り組んでいます。これまで私はそれがプライベートクラスで呼び出すことができるサブクラスだと知っていますが、内部で呼び出す変数が不明です。 – Mateo

+0

AsyncTaskの代わりにCursorLoaderを使用することをお勧めします。 –

答えて

0

あなたの質問は非常に幅広いです。私は、その操作を実行するために追加のアクティビティは必要ないと思います。

データベース接続ハンドラ、更新するデータ、および更新または削除操作を示すフラグを使用して、コンストラクタと同じアクティビティで非同期タスクを作成します。アクティビティにコールバック関数があります(ユーザーが「保存」または「削除」を押したときなど)。このトリガーが発生すると、それぞれの値で非同期タスクを開始します。

あなたのasynctaskクラスでは、上記のコードをそれぞれ実行します。

操作ごとに別々の非同期タスクを記述することができます。あなたのデザインによって異なります!

private class AsyncTaskSaveDelete extends AsyncTask<Void, Void, boolean> { 
    private DBHandler handler; 
    private Recipe recipe; 
    private boolean isDelete; 

    public AsyncTaskSaveDelete(DBHandler handler,Recipe recipe,boolean isDelete){ 
     this.handler = handler; 
     this.recipe = recipe; 
     this.isDelete = isDelete; 
    } 

    protected Long doInBackground({ 
     if(isDelete){ 
      return dbHandler.deleteRecipe(recipe); 
     }else{ 
      return dbHandler.addRecipe(recipe); 
     } 
    } 

    protected void onPostExecute(boolean result) { 
     runOnUiThread(new PostRunnable(){ 
      //update the UI 
     }) 
    } 
} 


public void newRecipe (View view){ 
... 
    new AsyncTaskSaveDelete(handler,recipe,false).execute(); 
... 
} 
+0

私に例を教えてください。 AsyncTaskが何であるかを調べると、私はそれをプライベートクラスとして宣言しています。私の中に宣言する値がわからないので、私を捨ててしまうのは実際のコードです。 – Mateo

+0

あなたはアイデアを持って、それを前進させてくれることを願っています! –

+0

ありがとう!これは多くの助けになります! – Mateo

関連する問題