Bom, antes de tudo obrigado pela leitura e possível ajuda.
Estou tentando criar um app, que leia de um banco de dados uma lista de componentes (com suas características), e “plote” em várias guias.
Já criei uma classe que eu imaginava que faria o serviço de “plotagem”:
[code]public class Componentes {
private Context context;
private int proporcaoWidth;
private int proporcaoHeight;
private RelativeLayout layout;
public Componentes(Context context, RelativeLayout layout, int layoutWidht, int layoutHeight){
this.context = context;
this.layout = layout;
proporcaoWidth = layoutWidht/233;
proporcaoHeight = layoutHeight/233;
}
public void plotar(LaudoComponente laudoComponente){
if(laudoComponente.tipoComp.equals("TRzEdit")){edit(laudoComponente);}else{
if(laudoComponente.tipoComp.equals("TLabel")){label(laudoComponente);}else{
if(laudoComponente.tipoComp.equals("TRzCheckBox")){checkBox(laudoComponente);}else{
if(laudoComponente.tipoComp.equals("TRzCheck")){check(laudoComponente);}else{
if(laudoComponente.tipoComp.equals("TRzMemo")){memo(laudoComponente);}else{
if(laudoComponente.tipoComp.equals("TRzDateTimeEdit")){dateTimeEdit(laudoComponente);}else{
if(laudoComponente.tipoComp.equals("TRzNumericEdit")){numericEdit(laudoComponente);}else{
if(laudoComponente.tipoComp.equals("TRzComboBox")){comboBox(laudoComponente);}else{
if(laudoComponente.tipoComp.equals("TRzSpinEdit")){spinEdit(laudoComponente);}}}}}}}}}
}
public void edit(LaudoComponente laudoComponente){
EditText TRzEdit = new EditText(context);
int width = laudoComponente.xWidth * proporcaoWidth ;
int height = laudoComponente.xHeigth * proporcaoHeight ;
int left = laudoComponente.xLeft * proporcaoWidth;
int top = laudoComponente.xTop * proporcaoHeight;
TRzEdit.setText(laudoComponente.xCaption);
TRzEdit.setHint(laudoComponente.xHint);
TRzEdit.setTag(laudoComponente.xDataField);
plotarRelativeLayout(this.context, TRzEdit, width, height, left, top);
}
public void dateTimeEdit(LaudoComponente laudoComponente){
int width = laudoComponente.xWidth * proporcaoWidth ;
int height = laudoComponente.xHeigth * proporcaoHeight ;
int left = laudoComponente.xLeft * proporcaoWidth;
int top = laudoComponente.xTop * proporcaoHeight;
EditText TRzDateTimeEdit = new EditText(context);
TRzDateTimeEdit.setText(laudoComponente.xCaption);
TRzDateTimeEdit.setHint(laudoComponente.xHint);
TRzDateTimeEdit.setTag(laudoComponente.xDataField);
TRzDateTimeEdit.setInputType(InputType.TYPE_DATETIME_VARIATION_NORMAL);
plotarRelativeLayout(this.context, TRzDateTimeEdit, width, height, left, top);
}
public void memo(LaudoComponente laudoComponente){
int width = laudoComponente.xWidth * proporcaoWidth ;
int height = laudoComponente.xHeigth * proporcaoHeight ;
int left = laudoComponente.xLeft * proporcaoWidth;
int top = laudoComponente.xTop * proporcaoHeight;
EditText TRzEdit = new EditText(context);
TRzEdit.setText(laudoComponente.xCaption);
TRzEdit.setHint(laudoComponente.xHint);
TRzEdit.setTag(laudoComponente.xDataField);
plotarRelativeLayout(this.context, TRzEdit, width, height, left, top);
}
public void numericEdit(LaudoComponente laudoComponente){
int width = laudoComponente.xWidth * proporcaoWidth ;
int height = laudoComponente.xHeigth * proporcaoHeight ;
int left = laudoComponente.xLeft * proporcaoWidth;
int top = laudoComponente.xTop * proporcaoHeight;
EditText TRzNumericEdit = new EditText(context);
TRzNumericEdit.setText(laudoComponente.xCaption);
TRzNumericEdit.setHint(laudoComponente.xHint);
TRzNumericEdit.setTag(laudoComponente.xDataField);
TRzNumericEdit.setInputType(InputType.TYPE_NUMBER_FLAG_SIGNED);
plotarRelativeLayout(this.context, TRzNumericEdit, width, height, left, top);
}
public void spinEdit(LaudoComponente laudoComponente){
int width = laudoComponente.xWidth * proporcaoWidth ;
int height = laudoComponente.xHeigth * proporcaoHeight ;
int left = laudoComponente.xLeft * proporcaoWidth;
int top = laudoComponente.xTop * proporcaoHeight;
EditText TRzSpinEdit = new EditText(context);
TRzSpinEdit.setText(laudoComponente.xCaption);
TRzSpinEdit.setHint(laudoComponente.xHint);
TRzSpinEdit.setTag(laudoComponente.xDataField);
plotarRelativeLayout(this.context, TRzSpinEdit, width, height, left, top);
}
public void checkBox(LaudoComponente laudoComponente){
int width = laudoComponente.xWidth * proporcaoWidth ;
int height = laudoComponente.xHeigth * proporcaoHeight ;
int left = laudoComponente.xLeft * proporcaoWidth;
int top = laudoComponente.xTop * proporcaoHeight;
CheckBox TRzCheck = new CheckBox(context);
plotarRelativeLayout(this.context, TRzCheck, width, height, left, top);
}
public void check(LaudoComponente laudoComponente){
int width = laudoComponente.xWidth * proporcaoWidth ;
int height = laudoComponente.xHeigth * proporcaoHeight ;
int left = laudoComponente.xLeft * proporcaoWidth;
int top = laudoComponente.xTop * proporcaoHeight;
CheckBox TRzCheck = new CheckBox(context);
plotarRelativeLayout(this.context, TRzCheck, width, height, left, top);
}
public void label(LaudoComponente laudoComponente){
int width = laudoComponente.xWidth * proporcaoWidth ;
int height = laudoComponente.xHeigth * proporcaoHeight ;
int left = laudoComponente.xLeft * proporcaoWidth;
int top = laudoComponente.xTop * proporcaoHeight;
TextView TLabel = new TextView(context);
plotarRelativeLayout(this.context, TLabel, width, height, left, top);
}
public void comboBox(LaudoComponente laudoComponente){
int width = laudoComponente.xWidth * proporcaoWidth ;
int height = laudoComponente.xHeigth * proporcaoHeight ;
int left = laudoComponente.xLeft * proporcaoWidth;
int top = laudoComponente.xTop * proporcaoHeight;
Spinner TRzComboBox = new Spinner(context);
plotarRelativeLayout(this.context, TRzComboBox, width, height, left, top);
}
public String[] itemsToArray(String items,String separador){
String[] lista = items.split("\\"+separador);
return lista;
}
public void plotarRelativeLayout(Context context,final View componente, int width, int height, int left, int top){
final RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(width,height);
params.leftMargin = left * proporcaoWidth ;
params.topMargin = top * proporcaoHeight ;
layout.addView(componente, params);
}
}[/code]
Eis o meu problema, não posso (ou não devo) exibir a guia (setContentView), sem antes adicionar os componentes em todas as guais. Então tentei rodar os métodos da classe “Componentes” , no meu Main. Mas não obtive sucesso.
[code]public void onClick(View v) {
LaudoComponenteDao dao = new LaudoComponenteDao(MainActivity.this);
Cursor cursor = dao.carregaLaudo("‘7E661BC0307155333135’");
LaudoComponente laudoComponente = new LaudoComponente();
cursor.moveToFirst();
while (cursor.moveToNext()){
laudoComponente = dao.getComponente(cursor, cursor.getPosition());
plotar = new Componentes(MainActivity.this, guia1, 500, 500);
plotar.plotar(laudoComponente);
}
Intent it = new Intent(MainActivity.this,Guia1.class);
startActivity(it);
setContentView(R.layout.guia1);[/code]
Alguém tem alguma solução para o problema acima?
[size=9][color=#FF0000]10-30 13:07:56.053: E/AndroidRuntime(821): FATAL EXCEPTION: main
10-30 13:07:56.053: E/AndroidRuntime(821): java.lang.NullPointerException
10-30 13:07:56.053: E/AndroidRuntime(821): at adaptadores.Componentes.plotarRelativeLayout(Componentes.java:152)
10-30 13:07:56.053: E/AndroidRuntime(821): at adaptadores.Componentes.label(Componentes.java:130)
10-30 13:07:56.053: E/AndroidRuntime(821): at adaptadores.Componentes.plotar(Componentes.java:31)
10-30 13:07:56.053: E/AndroidRuntime(821): at com.pda.MainActivity$2.onClick(MainActivity.java:92)
10-30 13:07:56.053: E/AndroidRuntime(821): at android.view.View.performClick(View.java:2485)
10-30 13:07:56.053: E/AndroidRuntime(821): at android.view.View$PerformClick.run(View.java:9080)
10-30 13:07:56.053: E/AndroidRuntime(821): at android.os.Handler.handleCallback(Handler.java:587)
10-30 13:07:56.053: E/AndroidRuntime(821): at android.os.Handler.dispatchMessage(Handler.java:92)
10-30 13:07:56.053: E/AndroidRuntime(821): at android.os.Looper.loop(Looper.java:130)
10-30 13:07:56.053: E/AndroidRuntime(821): at android.app.ActivityThread.main(ActivityThread.java:3683)
10-30 13:07:56.053: E/AndroidRuntime(821): at java.lang.reflect.Method.invokeNative(Native Method)
10-30 13:07:56.053: E/AndroidRuntime(821): at java.lang.reflect.Method.invoke(Method.java:507)
10-30 13:07:56.053: E/AndroidRuntime(821): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
10-30 13:07:56.053: E/AndroidRuntime(821): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
10-30 13:07:56.053: E/AndroidRuntime(821): at dalvik.system.NativeStart.main(Native Method)[/color][/size]