Вставка массива sqlite helper проблема вставка - PullRequest
0 голосов
/ 06 мая 2020

Мне нужна помощь для вставки данных в sqllite из ArrayList

Мой код:

@Override
public void onResponse(Call<List<Campos>> call, Response<List<Campos>> response) {
    if (!response.isSuccessful()){
        mJsonTxtView.setText("Codigo: " + response.code());
        return;
    }
    List<Campos> camposList = response.body();
    for (Campos campos: camposList){
        SQLiteDatabase db = null;
        String content = "";
        String Proyecto= campos.getsProyecto();
        String Nombre = campos.getsNombre();
        String Estado = campos.getsEstado();
        Integer Activo= campos.getnActivo();
        MyHelper helper = new MyHelper(this);
        helper.saveCampos(Proyecto, Nombre, Estado, Activo);
    }

}

Ошибка в MyHelper helper = new MyHelper (this);

error: incompatible types: <anonymous Callback<List<Campos>>> cannot be converted to Context
                    MyHelper helper = new MyHelper(this);

My helper create db

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE Proyecto (ProyectoId INTEGER PRIMARY KEY AUTOINCREMENT, ZoneName integer,ProyectoName text, ZoneStateId integer, EstadoName text, Codigo text)");
}

Моя вспомогательная функция вставки

public void saveCampos(String proyecto, String nombre, String estado,Integer activo) {
    SQLiteDatabase helper = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(proyecto, proyecto );
    values.put(nombre, nombre );
    values.put(estado, estado );
    values.put(estado, activo );

    helper.insert(proyecto,null, values);
    helper.close();
}

Не могли бы вы мне помочь, как я могу решить его для вставки.

MyHelper Classs, здесь я оставляю вспомогательный класс sqlite, где, если данные из массива достигают упомянутого класса savecampos:

public class MyHelper extends SQLiteOpenHelper {
private Cursor cursorLogs;
private String query = "";
SQLiteDatabase db;
Context context;
public static final String dbname ="datauser.db";
        private static final int version = 1;
public MyHelper(Context context){
    super(context, dbname, null, version);
   }
@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE Proyecto (ProyectoId INTEGER PRIMARY KEY AUTOINCREMENT, ZoneName integer,ProyectoName text, ZoneStateId integer, EstadoName text, Codigo text)");}

public void saveCampos(String proyecto, String nombre, String estado, Integer activo) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put("proyecto", proyecto );
    values.put("nombre", nombre );
    values.put("estado", estado );
    values.put("activo", activo );
    db.insert(proyecto,null, values);
    db.close();
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}

Код вызова моего класса для модернизации:

public class SplashActivity extends MainActivity {
Context mContext;
private static Context context;
public void onCreate() {
    super.onCreate();
    SplashActivity.context = getApplicationContext();
}
public static Context getAppContext() {
    return SplashActivity.context;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    init();
    setContentView(R.layout.activity_splash);
    MyHelper helper = new MyHelper(this);
    SQLiteDatabase database = helper.getReadableDatabase();

    retrofit retrofit = new retrofit();
    retrofit.getCampos();


    // 5 seconds pause on splash page
    Timer timer = new Timer();
    timer.schedule(new TimerTask() {
        @Override
        public void run() {
            if(isLoggedIn()){
                //Redirect to home page
                intent = new Intent(context,HomeActivity.class);
                startActivity(intent);
                finish();
            }else{
                //Redirect to Login Page
                intent = new Intent(context,LoginActivity.class);
                startActivity(intent);
                finish();
            }
        }
    },5000);
}
public void init() {
    context = this;
    sharedPreferences = context.getSharedPreferences(SHARED_PREF_NAME,MODE_PRIVATE);
}

вы можете мне помочь

1 Ответ

1 голос
/ 06 мая 2020

Retrofit onResponse() требует анонимного внутреннего класса, поэтому любой код внутри ссылается на этот внутренний класс; поэтому this относится к экземпляру, отличному от context, чтобы получить контекст, просто используйте getApplicationContext() или используйте MyActivity.this.

Итак, измените это

MyHelper helper = new MyHelper(this);

на:

MyHelper helper = new MyHelper(getApplicationContext());

Или на:

MyHelper helper = new MyHelper(MyActivity.this);

Замените MyActivity на имя вашей операции, которое окружает фрагмент кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...