2017-03-31 4 views
0

Ich habe eine Antwort auf diese Frage ziemlich lange gesucht, aber noch nicht gefunden. Ich mache Projekt mit SQLiteDatabase. Alles funktioniert gut, außer dass ich SQLiteOpenHelper meinem CustomAdapter zuweise. Ich bin ungefähr zwei Monate im Android Studio und all dem Java-Ding, also suche ich fast alles im Internet. Hier sind Fragmente meines Projekts.Wie Sie SQLiteOpenHelper in benutzerdefinierten Adapter zuweisen?

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"); 
 

 
    } 
 
}

kleiner Teil 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); 
 
    
 
    } 
 
}

Und hier ist meine Gewohnheit Adapter:

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; 
 
     
 
    } 
 
}

Also, ich würde wirklich gerne wissen, wie (wenn möglich) SQLiteOpenHelper in der kundenspezifischen Adapter zuweisen. Jede Hilfe ist erwünscht.

Also, das ist meine bearbeitete Version. Alles ist in Ordnung mit statischer Klasse duomenys, aber es gibt einige Unterstreichungen in diesem Teil:

@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

Ich habe das JavaScript-Tag für Ihre Frage mit dem Java-Tag ausgetauscht. Sie sind zwei sehr verschiedene Sprachen. Nur damit du es weißt :) –

+1

oh mein Gott! Ich fühle usles jetzt sowieso, danke –

+0

übrigens, Sie sind Typ, der Java, nicht javaScript, recht kennt? –

Antwort

0

hinzufügen Konstruktor duomenys Klasse

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); 
     } 

    } 

dann, wenn duomenys Objekt Pass Erstellung Kontext final Duomenys pavadinimas = new Duomenys(mContext)

+0

Danke, jetzt kann ich nicht versuchen, werde später versuchen –

+0

informieren Sie mich, wenn Sie versucht hätten –

+0

Yup ich werde es Tomoorrow tun –

0

Also, mit Hilfe von @AgiMaulana Ich löste das Problem. Code änderte sich erst in CustomAdapter, so ist es hier:

@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(); 
 
     }

Danke Jungs sehr viel!

Verwandte Themen