mercredi 6 janvier 2016

How to catch a context within a class correctly?

I'm in a paser of a Webservice. With it, I picked up the dice and already gave Set In each of them (is working agreement). However, in time to insert the same in the database it displays the following error (null):

Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase$CursorFactory, android.database.DatabaseErrorHandler)' on a null object reference

The db needs a Context, but I can not in class because there extends an Activity or otherwise to the use of getBaseContext, getAplication among others ..

*parser:

public class WSParserSetValoresBD {

    private String text;
    public BDProgramacaoGetterSetter programacaoGetterSetter;


    boolean tabela = false;
    int contadorLinhas = 0;

    private Context ctx;
     public WSParserSetValoresBD(Context contextP){
          this.ctx=contextP; // I've checked here and not be null, it's all right
     }

    BDProgramacaoBancoDao inserir = new BDProgramacaoBancoDao(ctx);

    public void parse(InputStream is) {
        XmlPullParserFactory factory = null;
        XmlPullParser parser = null;

        try {
            factory = XmlPullParserFactory.newInstance();
            factory.setNamespaceAware(true);

            parser = factory.newPullParser();
            parser.setInput(is, null);

            int eventType = parser.getEventType();

            while (eventType != XmlPullParser.END_DOCUMENT ) {
                String tagname = parser.getName();
                switch (eventType) {
                    case XmlPullParser.START_TAG:
                        if(tagname.equalsIgnoreCase("Table")){
                            tabela = true;
                            programacaoGetterSetter = new BDProgramacaoGetterSetter();
                            contadorLinhas++;

                        }
                        else if (tagname.equalsIgnoreCase("DATA") || tagname.equalsIgnoreCase("ROTA") || tagname.equalsIgnoreCase("IWERK")
                                || tagname.equalsIgnoreCase("AUFNR")|| tagname.equalsIgnoreCase("VORNR")|| tagname.equalsIgnoreCase("POINT")
                                || tagname.equalsIgnoreCase("SEQUENCIA")|| tagname.equalsIgnoreCase("STATUS_PONTO")|| tagname.equalsIgnoreCase("FREQUENCIA")
                                || tagname.equalsIgnoreCase("PSORT")|| tagname.equalsIgnoreCase("PTTXT")|| tagname.equalsIgnoreCase("EQUNR")
                                || tagname.equalsIgnoreCase("EQKTX")|| tagname.equalsIgnoreCase("TPLNR")|| tagname.equalsIgnoreCase("PLTXT")
                                || tagname.equalsIgnoreCase("SIST_LUBRIFIC")|| tagname.equalsIgnoreCase("REF_LUBRIFIC")|| tagname.equalsIgnoreCase("COD_LUBRIFIC")
                                || tagname.equalsIgnoreCase("VOL_LUBRIFICCL")|| tagname.equalsIgnoreCase("QTD_CONSUMO")|| tagname.equalsIgnoreCase("DESCR_ROTA")
                                || tagname.equalsIgnoreCase("ID_PROGRAMACAO")|| tagname.equalsIgnoreCase("GRUPO")|| tagname.equalsIgnoreCase("OBSERVACAO")
                                || tagname.equalsIgnoreCase("ATIVI")|| tagname.equalsIgnoreCase("ARBPL")|| tagname.equalsIgnoreCase("ITEM_INSPEC")
                                || tagname.equalsIgnoreCase("VOL_LUBRIFCKG")|| tagname.equalsIgnoreCase("NRO_BOMBADAS")|| tagname.equalsIgnoreCase("LIMITE_INF")
                                || tagname.equalsIgnoreCase("LIMITE_SUP")|| tagname.equalsIgnoreCase("IDATE_ITIME")|| tagname.equalsIgnoreCase("VLR_MED")
                                || tagname.equalsIgnoreCase("COD_VALOR")|| tagname.equalsIgnoreCase("TEXTO_OBS")|| tagname.equalsIgnoreCase("MATRIC")
                                || tagname.equalsIgnoreCase("ATIVI")|| tagname.equalsIgnoreCase("STATUS_PROC")|| tagname.equalsIgnoreCase("MENSAGEM")
                                || tagname.equalsIgnoreCase("COL_NUMERIC")){

                        }
                        break;

                    case XmlPullParser.TEXT:

                        text = parser.getText();
                        break;

                    case XmlPullParser.END_TAG:
                        if (tagname.equalsIgnoreCase("DATA")) {
                            programacaoGetterSetter.setData(text);
                        } else if(tagname.equalsIgnoreCase("ROTA")){
                            programacaoGetterSetter.setRota(text);
                        } else if (tagname.equalsIgnoreCase("IWERK")) {
                            programacaoGetterSetter.setIwerk(text);
                        } else if (tagname.equalsIgnoreCase("AUFNR")) {
                            programacaoGetterSetter.setAufnr(text);
                        } else if (tagname.equalsIgnoreCase("VORNR")) {
                            programacaoGetterSetter.setVornr(text);
                        } else if (tagname.equalsIgnoreCase("POINT")) {
                            programacaoGetterSetter.setPoint(text);
                        } else if (tagname.equalsIgnoreCase("SEQUENCIA")) {
                            programacaoGetterSetter.setSequencia(Integer.parseInt(text));
                        } else if (tagname.equalsIgnoreCase("STATUS_PONTO")) {
                            programacaoGetterSetter.setStatus_proc(text);
                        } else if (tagname.equalsIgnoreCase("FREQUENCIA")) {
                            programacaoGetterSetter.setFrequencia(text);
                        } else if (tagname.equalsIgnoreCase("PSORT")) {
                            programacaoGetterSetter.setPsort(text);
                        } else if (tagname.equalsIgnoreCase("PTTXT")) {
                            programacaoGetterSetter.setPttxt(text);
                        } else if (tagname.equalsIgnoreCase("EQUNR")) {
                            programacaoGetterSetter.setEqunr(text);
                        } else if (tagname.equalsIgnoreCase("EQKTX")) {
                            programacaoGetterSetter.setEqktx(text);
                        } else if (tagname.equalsIgnoreCase("TPLNR")) {
                            programacaoGetterSetter.setTplnr(text);
                        } else if (tagname.equalsIgnoreCase("PLTXT")) {
                            programacaoGetterSetter.setPltxt(text);
                        } else if (tagname.equalsIgnoreCase("SIST_LUBRIFIC")) {
                            programacaoGetterSetter.setSist_lubrific(text);
                        } else if (tagname.equalsIgnoreCase("REF_LUBRIFIC")) {
                            programacaoGetterSetter.setRef_lubrific(text);
                        } else if (tagname.equalsIgnoreCase("COD_LUBRIFIC")) {
                            programacaoGetterSetter.setCod_lubrific(text);
                        } else if (tagname.equalsIgnoreCase("VOL_LUBRIFICCL")) {
                            programacaoGetterSetter.setVol_lubrificcl(Integer.parseInt(text));
                        } else if (tagname.equalsIgnoreCase("QTD_CONSUMO")) {
                            programacaoGetterSetter.setQtd_consumo(Integer.parseInt(text));
                        } else if (tagname.equalsIgnoreCase("DESCR_ROTA")) {
                            programacaoGetterSetter.setDescr_rota(text);
                        } else if (tagname.equalsIgnoreCase("ID_PROGRAMACAO")) {
                            programacaoGetterSetter.setId_programacao(Integer.parseInt(text));
                        } else if (tagname.equalsIgnoreCase("GRUPO")) {
                            programacaoGetterSetter.setGrupo(text);
                        } else if (tagname.equalsIgnoreCase("OBSERVACAO")) {
                            programacaoGetterSetter.setObservacao(text);
                        } else if (tagname.equalsIgnoreCase("ATIVI")) {
                            programacaoGetterSetter.setAtivi(text);
                        } else if (tagname.equalsIgnoreCase("ARBPL")) {
                            programacaoGetterSetter.setArbpl(text);
                        } else if (tagname.equalsIgnoreCase("ITEM_INSPEC")) {
                            programacaoGetterSetter.setItem_inspec(text);
                        } else if (tagname.equalsIgnoreCase("VOL_LUBRIFCKG")) {
                            programacaoGetterSetter.setVol_lubrifickg(Integer.parseInt(text));
                        } else if (tagname.equalsIgnoreCase("NRO_BOMBADAS")) {
                            programacaoGetterSetter.setNro_bombadas(Integer.parseInt(text));
                        } else if (tagname.equalsIgnoreCase("LIMITE_INF")) {
                            programacaoGetterSetter.setLimite_inf(Integer.parseInt(text));
                        } else if (tagname.equalsIgnoreCase("LIMITE_SUP")) {
                            programacaoGetterSetter.setlimite_sup(Integer.parseInt(text));
                        } else if (tagname.equalsIgnoreCase("IDATE_ITIME")) {
                            programacaoGetterSetter.setIdate_itime(text);
                        } else if (tagname.equalsIgnoreCase("VLR_MED")) {
                            programacaoGetterSetter.setVlr_med(Integer.parseInt(text));
                        } else if (tagname.equalsIgnoreCase("COD_VALOR")) {
                            programacaoGetterSetter.setCod_valor(text);
                        } else if (tagname.equalsIgnoreCase("TEXTO_OBS")) {
                            programacaoGetterSetter.setTexto_obs(text);
                        } else if (tagname.equalsIgnoreCase("MATRIC")) {
                            programacaoGetterSetter.setMatric(text);
                        } else if (tagname.equalsIgnoreCase("ATIVI")) {
                            programacaoGetterSetter.setAtivi(text);
                        } else if (tagname.equalsIgnoreCase("STATUS_PROC")) {
                            programacaoGetterSetter.setStatus_proc(text);
                        } else if (tagname.equalsIgnoreCase("MENSAGEM")) {
                            programacaoGetterSetter.setMensagem(text);
                        } else if (tagname.equalsIgnoreCase("COL_NUMERIC")) {
                            programacaoGetterSetter.setCol_numeric(Integer.parseInt(text));
                        } else if (tagname.equalsIgnoreCase("Table")){
                        if (programacaoGetterSetter != null && inserir != null){
                            inserir.open(); // HERE IS THE ERROR; database_prog is null
                            inserir.inserirDados(programacaoGetterSetter);
                        }
                    }

                        break;

                    default:
                        break;
                }
                eventType = parser.next();

            }

        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

*database

public class BDProgramacaoBancoDao {
    private SQLiteDatabase database_prog;

    public void open () throws SQLDataException{
         database_prog = sqliteOpenHelper_prog.getWritableDatabase();
    }

    private BDProgramacaoCustomSQLiteOpenHelper sqliteOpenHelper_prog;

    public BDProgramacaoBancoDao(Context context) {
        sqliteOpenHelper_prog = new BDProgramacaoCustomSQLiteOpenHelper(context);
    }


    public String insertDados(BDProgramacaoGetterSetter dadosProg) {
        ContentValues valores = new ContentValues();
        long resultado;          

        //valores.put(sqliteOpenHelper_prog.COLUMN_ID,dadosProg.getId());  ID eh auto increment
        valores.put(sqliteOpenHelper_prog.COLUMN_ARBPL, dadosProg.getArbpl());
        valores.put(sqliteOpenHelper_prog.COLUMN_ATIVI, dadosProg.getAtivi());
        valores.put(sqliteOpenHelper_prog.COLUMN_AUFNR, dadosProg.getAufnr());
        valores.put(sqliteOpenHelper_prog.COLUMN_COD_LUBRIFIC, dadosProg.getCod_lubrific());
        valores.put(sqliteOpenHelper_prog.COLUMN_COD_VALOR, dadosProg.getCod_valor());
        valores.put(sqliteOpenHelper_prog.COLUMN_DATA, dadosProg.getData()); // no banco esta como integer
        valores.put(sqliteOpenHelper_prog.COLUMN_COL_NUMERIC, dadosProg.getCol_numeric());
        valores.put(sqliteOpenHelper_prog.COLUMN_DESCR_ROTA, dadosProg.getDescr_rota());
        valores.put(sqliteOpenHelper_prog.COLUMN_EQKTX, dadosProg.getEqktx());
        valores.put(sqliteOpenHelper_prog.COLUMN_EQUNR, dadosProg.getEqunr());
        valores.put(sqliteOpenHelper_prog.COLUMN_FREQUENCIA, dadosProg.getFrequencia());
        valores.put(sqliteOpenHelper_prog.COLUMN_GRUPO, dadosProg.getGrupo());
        valores.put(sqliteOpenHelper_prog.COLUMN_IDATE_ITIME, dadosProg.getIdate_itime());
        valores.put(sqliteOpenHelper_prog.COLUMN_ITEM_INSPEC, dadosProg.getIdate_itime());
        valores.put(sqliteOpenHelper_prog.COLUMN_IWERK, dadosProg.getIwerk());
        valores.put(sqliteOpenHelper_prog.COLUMN_LIMITE_SUP, dadosProg.getlimite_sup());
        valores.put(sqliteOpenHelper_prog.COLUMN_LIMITE_INF, dadosProg.getLimite_inf());
        valores.put(sqliteOpenHelper_prog.COLUMN_MATRIC, dadosProg.getMatric());
        valores.put(sqliteOpenHelper_prog.COLUMN_MENSAGEM, dadosProg.getMensagem());
        valores.put(sqliteOpenHelper_prog.COLUMN_NRO_BOMBADAS, dadosProg.getNro_bombadas());
        valores.put(sqliteOpenHelper_prog.COLUMN_OBSERVACAO, dadosProg.getObservacao());
        valores.put(sqliteOpenHelper_prog.COLUMN_PLTXT, dadosProg.getPltxt());
        valores.put(sqliteOpenHelper_prog.COLUMN_POINT, dadosProg.getPoint());
        valores.put(sqliteOpenHelper_prog.COLUMN_PSORT, dadosProg.getPsort());
        valores.put(sqliteOpenHelper_prog.COLUMN_PTTXT, dadosProg.getPttxt());
        valores.put(sqliteOpenHelper_prog.COLUMN_QTD_CONSUMO, dadosProg.getQtd_consumo());
        valores.put(sqliteOpenHelper_prog.COLUMN_TEXTO_OBS, dadosProg.getTexto_obs());
        valores.put(sqliteOpenHelper_prog.COLUMN_TPLNR, dadosProg.getTplnr());
        valores.put(sqliteOpenHelper_prog.COLUMN_VLR_MED, dadosProg.getVlr_med());
        valores.put(sqliteOpenHelper_prog.COLUMN_VOL_LUBRIFCCL, dadosProg.getVol_lubrificcl());
        valores.put(sqliteOpenHelper_prog.COLUMN_VOL_LUBRIFCKG, dadosProg.getVol_lubrifickg());
        valores.put(sqliteOpenHelper_prog.COLUMN_VORNR, dadosProg.getVornr());
        valores.put(sqliteOpenHelper_prog.COLUMN_REF_LUBRIFIC, dadosProg.getRef_lubrific());
        valores.put(sqliteOpenHelper_prog.COLUMN_ROTA, dadosProg.getRota());
        valores.put(sqliteOpenHelper_prog.COLUMN_SEQUENCIA, dadosProg.getSequencia());
        valores.put(sqliteOpenHelper_prog.COLUMN_SIST_LUBRIFIC, dadosProg.getSist_lubrific());
        valores.put(sqliteOpenHelper_prog.COLUMN_STATUS_PONTO, dadosProg.getStatus_ponto());
        valores.put(sqliteOpenHelper_prog.COLUMN_STATUS_PROC, dadosProg.getStatus_proc());
        valores.put(sqliteOpenHelper_prog.COLUMN_ID_PROGRAMACAO, dadosProg.getId_programacao());

        resultado = database_prog.insert(BDProgramacaoCustomSQLiteOpenHelper.TABLE_PROGRAMACAO, null, valores);
        database_prog.close();

        if (resultado ==-1) return "Erro ao inserir registro";
        else return "Registro Inserido com sucesso";
    }
}

For some reason, the database_prog is null

*WSParserSetValoresBD in activity Opcoes_BaixarRotas (button "Yes" do AlertDialog):

   builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
     public void onClick(DialogInterface arg0, int arg1) {
            // nova query para o novo WS com as variaveis
            final Runnable gravandoDados = new Runnable() {
                    public void run() {

                             getTodosDados(rota, atividade, responsavel, dataSelecionada);

                             if (WSResultadoTodosDados != null) {                                         
                                   InputStream isTodosDados = new ByteArrayInputStream(WSResultadoTodosDados.getBytes());
                                   // call class
                                   WSParserSetValoresBD parserTodosDados = new WSParserSetValoresBD(Opcoes_BaixarRotas.this.getApplicationContext());
                                   parserTodosDados.parse(isTodosDados);                                                                                  
                        }
                     };
            Thread queryTodosDados = new Thread(gravandoDados);
            queryTodosDados.start();
     }

Aucun commentaire:

Enregistrer un commentaire