2017-03-31 4 views
0

私はこの質問に対する回答をかなり長く探していますが、まだ見つかりませんでした。 私はSQLiteDatabaseでプロジェクトをやっています。私のCustomAdapterにSQLiteOpenHelperを割り当てる以外は、すべて正常に動作します。私はAndroidスタジオとそのJavaのすべてで約2ヶ月ですので、私はちょうどインターネット上のほとんどすべてを検索しています。ここに私のプロジェクトの断片があります。カスタムアダプタでSQLiteOpenHelperを割り当てる方法は?

SQLiteOpenHelper:

public class ActivitiesDataBase extends SQLiteOpenHelper { 
 

 
    public static final String DATABASE_NAME = "database.db"; 
 
    public static final String ACTIVITIES_COLUMN_ID = "id"; 
 
    public static final String ACTIVITIES_TABLE_NAME = "create_activity"; 
 
    public static final String ACTIVITIES_COLUMN_NAME = "activity"; 
 
    public static final String ACTIVITIES_COLUMN_NUMBER = "number"; 
 
    public static final String ACTIVITIES_COLUMN_DESCRIPTION = "description"; 
 
    
 
    
 
    
 
    //Created command to create items 
 
    public void addactivity(String activity, String description, String number){ 
 

 
     SQLiteDatabase db = this.getWritableDatabase(); 
 
     ContentValues cv =new ContentValues(); 
 
     cv.put(ACTIVITIES_COLUMN_NAME, activity); 
 
     cv.put(ACTIVITIES_COLUMN_NUMBER, number); 
 
     cv.put(ACTIVITIES_COLUMN_DESCRIPTION, description); 
 

 
     db.insert(ACTIVITIES_TABLE_NAME, null, cv); 
 
     db.close(); 
 
    } 
 
    
 
    
 
    
 
    
 
    //Constructor 
 
     public ActivitiesDataBase(Context context) { 
 
     super(context, DATABASE_NAME, null, 1); 
 
    } 
 

 
    @Override 
 
    public void onCreate(SQLiteDatabase db) { 
 

 
     db.execSQL("CREATE TABLE create_activity" + 
 
       "(id INTEGER PRIMARY KEY, " + 
 
       "activity TEXT, " + 
 
       "number TEXT, " + 
 
       "description TEXT)"); 
 

 
    } 
 

 
    @Override 
 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
 

 
     db.execSQL("DROP TABLE IF EXISTS create_activity"); 
 

 
    } 
 
}

ActivityMainのごく一部:

public class MainActivity extends AppCompatActivity implements DrawerLocker { 
 

 
//Assigning SQLiteOpenHelper, no errors, result is fine. 
 
    final ActivitiesDataBase db = new ActivitiesDataBase(this); 
 
    
 
    private SQLiteDatabase sql; 
 
    
 
@Override 
 
    protected void onCreate(Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 
     setContentView(R.layout.activity_main); 
 

 
//Here I call command addactivity and it works fine, because I 
 
//assigned SQLiteOpenHelper well. 
 
    db.addactivity(activitysubject, activitydesc, activitynum); 
 
    
 
    } 
 
}

01ここ

そして、私のカスタムアダプタです:だから

public class CustomAdapter extends ArrayAdapter { 
 

 
    private List sarasas = new ArrayList(); 
 

 
    public CustomAdapter(Context context, int resource) { 
 
     super(context, resource); 
 
    } 
 

 
    @Override 
 
    public void add(Object object) { 
 
     super.add(object); 
 
     sarasas.add(object); 
 
    } 
 

 
    @Override 
 
    public int getCount() { 
 
     return this.sarasas.size(); 
 
    } 
 

 

 
    @Override 
 
    public Object getItem(int position) { 
 
     return this.sarasas.get(position); 
 
    } 
 

 

 
    @Override 
 
    public View getView(int position, View convertView, ViewGroup parent) { 
 

 
     View v = convertView; 
 

 
     final Duomenys pavadinimas; 
 

 

 

 
     if (v == null){ 
 
      LayoutInflater inflater = (LayoutInflater) this.getContext() 
 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
 

 
      v = inflater.inflate(R.layout.listview_layout, parent, false); 
 

 
      pavadinimas = new Duomenys(); 
 
//I have missed some unnecessary text here, hope it doesn't change 
 
//contex a lot 
 

 

 

 
//So, crap starts here. Don't mind that pavadinimas after dots. 
 
//Basically it's written here similarly to MainActivity, but it 
 
//shows errors because assigning is different :(
 

 
//   (SQLiteOpenHelper assigning is below) 
 
pavadinimas.plus.setOnClickListener(new View.OnClickListener() { 
 
       @Override 
 
       public void onClick(View v) { 
 
        pavadinimas.db.addactivity(name, description, number); 
 
       } 
 
      }); 
 

 

 

 
      v.setTag(pavadinimas); 
 
     }else { 
 
      pavadinimas = (Duomenys) v.getTag(); 
 
     } 
 

 

 
     DataActivity perdavimas = (DataActivity) this.getItem(position); 
 
     pavadinimas.txt1.setText(perdavimas.getNamee()); 
 

 
     return v; 
 

 
    } 
 

 
    static class Duomenys{ 
 

 
     SQLiteDatabase sql; 
 
     
 
     //Here i don't know how to assign my SQLiteOpenHelper, 
 
     // so actually, I NEED HELP HERE 
 
     ActivitiesDataBase db; 
 
     
 
    } 
 
}

、私は本当に、カスタムアダプタで(可能であれば)SQLiteOpenHelperを割り当てる方法を、知っていただきたいと思います。どんな援助も感謝する。

これは私の編集版です。すべては静的クラスDuomenysと罰金ですが、いくつかの下線は、その部分にあります:

@Override 
 
    public View getView(int position, View convertView, ViewGroup parent) { 
 

 
     View v = convertView; 
 

 
//Here it underlines mContext and i really don't know from where to get it 
 
     final Duomenys pavadinimas = new Duomenys(mContext); 
 

 
     if (v == null){ 
 
      LayoutInflater inflater = (LayoutInflater) this.getContext() 
 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
 

 
      v = inflater.inflate(R.layout.listview_layout, parent, false); 
 

 
//Then it underlines() after Duomenys 
 
      pavadinimas = new Duomenys(); 
 
pavadinimas.plus.setOnClickListener(new View.OnClickListener() { 
 
       @Override 
 
       public void onClick(View v) { 
 
       
 
pavadinimas.db.assactivity(name, description, number); 
 

 
       } 
 
      }); 
 

 
      v.setTag(pavadinimas); 
 
     }else { 
 
     
 
//And it underlines pavadinimas, saying 
 
//"Cannot assign a value to final variable 'pavadinimas' " 
 
      pavadinimas = (Duomenys) v.getTag(); 
 
     }

+0

質問のJavaScriptタグをJavaタグと入れ替えました。彼らは2つの非常に異なる言語です。ちょうどそう知っている:) –

+1

ああ私の神!とにかく、uslesを感じるとにかく、ありがとう –

+0

ところで、あなたはJavaを知っている人、javaScriptではないですか? –

答えて

0

Duomenysオブジェクトのパスを作成するときにDuomenysクラスに

static class Duomenys{ 

     SQLiteDatabase sql; 

     //Here i don't know how to assign my SQLiteOpenHelper, 
     // so actually, I NEED HELP HERE 
     ActivitiesDataBase db; 
     public Duomenys(Context context){ 
      this.db = new ActivitiesDataBase(context); 
     } 

    } 

をコンストラクタを追加します文脈final Duomenys pavadinimas = new Duomenys(mContext)

+0

ありがとう、今私は試してみることができません、後で試してみます –

+0

あなたが試してみたら –

+0

私はそれtomoorrow –

0

@AgiMaulanaの助けを借りて私は問題を解決しました。

@Override 
 
    public View getView(int position, View convertView, ViewGroup parent) { 
 

 
     View v = convertView; 
 

 
     final Duomenys pavadinimas; 
 

 
     if (v == null){ 
 
      LayoutInflater inflater = (LayoutInflater) this.getContext() 
 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
 

 
      v = inflater.inflate(R.layout.listview_layout, parent, false); 
 

 
      pavadinimas = new Duomenys(getContext()); 
 
      pavadinimas.plus.setOnClickListener(new View.OnClickListener() { 
 
       @Override 
 
       public void onClick(View v) { 
 
       
 
        pavadinimas.db.modifyNumber(name, newNumber); 
 
       } 
 
      }); 
 

 
     v.setTag(pavadinimas); 
 
     }else { 
 
      pavadinimas = (Duomenys) v.getTag(); 
 
     }

は非常に多くの皆さんありがとう:コードはそうここにある、CustomAdapterにのみ変更しました!

関連する問題