繁体   English   中英

SQLite Android。 管理资料

[英]SQLite Android. Managing data

我将告诉您应用程序这一部分的目标。 我有一个SQLite dB,其中有3列。 第一是“数量”,第二是“产品”,第三是“价格”。 好吧,我要做的是获取整个dB并通过电子邮件发送。 这就是我现在所拥有的:

public class Visual extends Activity {

TextView tv;
Button sqlGetInfo;
long l ;
long b=1;
int c,i;
String returnedQuantity ,returnedProduct ,returnedPrice;
String[] filas;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.visual);


    tv = (TextView) findViewById(R.id.tvSQLinfo);
    sqlGetInfo = (Button) findViewById(R.id.EnviarPedido);
    SQLManager info = new SQLManager(this);
    info.open();
    String data= info.getData();
    info.close();
    tv.setText(data);

到目前为止,我的代码工作正常,它在textView中显示数据。 这是问题所在。 我的dB最多有15行。 我想做的是将每一行存储在一个字符串数组(玻璃纤维)的位置。 第一行= filas(0),第二行= filas(1)...以便能够将此数组传递给另一个活动。 如果数组少于15行,我认为它将给出异常。 现在是时候打开其他活动了。

    final SQLManager hon = new SQLManager(this);
    sqlGetInfo.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            for (i = 1; i < 15; i++) { 

                    try{
                    l = (long) i;
                    hon.open();
                    returnedQuantity = hon.getQuantity(l);
                    returnedProduct = hon.getProduct(l);
                    returnedPrice = hon.getPrice(l);
                    hon.close();
                    c=(int)(l-b);
                    filas[c]="" + returnedQuantity+"      "+ returnedProduct+"      "+ returnedPrice + "\n";


                    }catch (Exception e){

                    i = 16;
                    l = (long) i;
                    Intent abrePedidos = new Intent(Visual.this, Pedidos.class);
                    abrePedidos.putExtra("pedidoCompleto", filas);
                    startActivity(abrePedidos);
                }
        }

    }
});
   }
 }

另一个活动是这样的:

public class Pedidos extends Activity {

String[] filas;
long numProd;
boolean end;
int i;
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    filas=getIntent().getStringArrayExtra("pedidoCompleto");

    String subject = "Pedido a Domicilio";
    String cabecera = "Unid.     Producto            Precio\n\n";
    String[] emails = {"ulrickpspgo@gmail.com"};

    String message = cabecera + filas;

    Intent emailIntent = new Intent (android.content.Intent.ACTION_SEND);
    emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, emails);
    emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
    emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, message);
    emailIntent.setType("plain/text");
    startActivity(emailIntent);

    }
}

我收到的电子邮件消息为“空”。

我认为您的问题如下:您从未初始化String[] filas; 这意味着它始终保持为空。 然后,转到代码:

try {
    l = (long) i;
    hon.open();
    returnedQuantity = hon.getQuantity(l);
    returnedProduct = hon.getProduct(l);
    returnedPrice = hon.getPrice(l);
    hon.close();
    c=(int)(l-b);
    // The next line throws null pointer exception
    filas[c]="" + returnedQuantity+"      "+ returnedProduct+"      "+ returnedPrice + "\n";
} catch (Exception e) { // here you catch the null pointer exception
    i = 16;
    l = (long) i;
    Intent abrePedidos = new Intent(Visual.this, Pedidos.class);
    abrePedidos.putExtra("pedidoCompleto", filas); //filas is still null
    startActivity(abrePedidos);
}

我为您的一些台词添加了评论。 为什么只在catch子句中调用下一个活动? 在catch子句中包含太多代码是非常糟糕的做法,这被称为期望处理 不要做 否则,如果您初始化数组(我不确定您还没有完成数组,但这是我所猜测的隐藏的异常),那应该很好。 但是,不要忘记将代码放置在catch块之外,因为在修改之后,我不希望有任何异常。

编辑我不喜欢您遍历数据库中元素的方式。 我不熟悉您使用的SQLManager类。 但是,标准的Android方法与JDBC模型非常相似。 您进行查询,它返回结果上的光标。 在此处查看使用游标和SQLitehleprs示例: http : SQLitehleprs

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM