2013-10-21 3 views
0
//this is in my custom dialog class oncreate method 
InvoiceDatabase invoiceDatabase = new InvoiceDatabase(context); 
TotalInvoiceVO totalInvoiceVo = invoiceDatabase.getPrintInvoiceDetails(custCode); 
invoiceDetails.setText(totalInvoiceVo.toString()); 

//this is my InvoiceDatabase class 
public static String GET_INVOICEDETAILS = "select P.ProductCode productCode, P.MRP mrp, P.SellingRate sellingRate, P.ShortProductDesc desc, P.Vat vat, " + 
      " P.AdditionalTaxes additionalVat," 
      + " P.Cess cess, PalmOrderNo palmOrderNum, " 
      + " SaleQty saleQty, DiscAmount stkDiscount ,SchemeAmount schemeAmount, SchemeDisc schemeDiscount, NetValue netValue from PALM_ORD_DET, PALM_ORDER" 
      + " PRODUCT P where PALM_ORD_DET.ProductCode=PRODUCT.ProductCode and PALM_ORD_DET.PalmOrderNo=PALM_ORDER.PalmOrderNo and PALM_ORDER.CustCode=?"; 

    public TotalInvoiceVO getPrintInvoiceDetails(String custCode) { 
     TotalInvoiceVO totalInvoiceVO = new TotalInvoiceVO(); 
     // getStockiest Detail 
     // get Customer Detail 
     // get CustomerSummary 
     List<InvoiceVO> listOfProductInvoice = getProdOrderInvoiceDetails(custCode); 
     totalInvoiceVO.setListOfProductInvoice(listOfProductInvoice); 
     return totalInvoiceVO; 
    } 

    private List<InvoiceVO> getProdOrderInvoiceDetails(String custCode) { 
     List<InvoiceVO> listOfInvoiceVO = new ArrayList<InvoiceVO>(); 

     Cursor cursor = null; 
     try { 

      /*cursor=db.rawQuery("select * from PALM_ORD_DET", null); 
      if(cursor.moveToFirst()) 
      { 
       String m="m"; 
      }*/ 

      cursor = db.rawQuery(GET_INVOICEDETAILS, new String[] { custCode }); 
      if (cursor.moveToFirst()) { 
       do { 
        InvoiceVO invoiceVO = new InvoiceVO(); 
        invoiceVO.setProdDesc(cursor.getString(cursor.getColumnIndex("desc"))); 
        invoiceVO.setProdCode(cursor.getString(cursor.getColumnIndex("productCode"))); 
        invoiceVO.setMrp(cursor.getDouble(cursor.getColumnIndex("mrp"))); 
        invoiceVO.setSellingPrice(cursor.getDouble(cursor.getColumnIndex("sellingRate"))); 
        invoiceVO.setNetValue(cursor.getDouble(cursor.getColumnIndex("netValue"))); 
        invoiceVO.setStockDiscount(cursor.getString(cursor.getColumnIndex("stkDiscount"))); 
        listOfInvoiceVO.add(invoiceVO); 
       } while (cursor.moveToNext()); 
      } 
     } finally { 
      cursor.close(); 
      cursor=null; 
     } 

저는 android에 익숙하며 데이터베이스에서 값을 가져 오려고하지만 시나리오가 데이터베이스를 쿼리 할 때 항상 nullPointerException을 발생시킵니다. 아무도 잘못된 것을 지적 할 수 있습니까?Sqllite는 항상 nullPointerException을 throw합니다.

10-21 20:40:24.098: E/AndroidRuntime(27346): FATAL EXCEPTION: main 
10-21 20:40:24.098: E/AndroidRuntime(27346): java.lang.NullPointerException 
10-21 20:40:24.098: E/AndroidRuntime(27346): at comColgateDMS.org.db.InvoiceDatabase.getProdOrderInvoiceDetails(InvoiceDatabase.java:97) 
10-21 20:40:24.098: E/AndroidRuntime(27346): at comColgateDMS.org.db.InvoiceDatabase.getPrintInvoiceDetails(InvoiceDatabase.java:66) 
10-21 20:40:24.098: E/AndroidRuntime(27346): at comColgateDMS.org.CustomDialog_invoicePrint.onCreate(CustomDialog_invoicePrint.java:46) 
10-21 20:40:24.098: E/AndroidRuntime(27346): at android.app.Dialog.dispatchOnCreate(Dialog.java:353) 
10-21 20:40:24.098: E/AndroidRuntime(27346): at android.app.Dialog.show(Dialog.java:257) 
10-21 20:40:24.098: E/AndroidRuntime(27346): at comColgateDMS.org.OrderBookingSummary$1.onItemClick(OrderBookingSummary.java:214) 
10-21 20:40:24.098: E/AndroidRuntime(27346): at android.widget.AdapterView.performItemClick(AdapterView.java:292) 
10-21 20:40:24.098: E/AndroidRuntime(27346): at android.widget.AbsListView.performItemClick(AbsListView.java:1065) 
10-21 20:40:24.098: E/AndroidRuntime(27346): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2522) 
10-21 20:40:24.098: E/AndroidRuntime(27346): at android.widget.AbsListView$1.run(AbsListView.java:3183) 
10-21 20:40:24.098: E/AndroidRuntime(27346): at android.os.Handler.handleCallback(Handler.java:605) 
10-21 20:40:24.098: E/AndroidRuntime(27346): at android.os.Handler.dispatchMessage(Handler.java:92) 
10-21 20:40:24.098: E/AndroidRuntime(27346): at android.os.Looper.loop(Looper.java:137) 
10-21 20:40:24.098: E/AndroidRuntime(27346): at android.app.ActivityThread.main(ActivityThread.java:4441) 
10-21 20:40:24.098: E/AndroidRuntime(27346): at java.lang.reflect.Method.invokeNative(Native Method) 
10-21 20:40:24.098: E/AndroidRuntime(27346): at java.lang.reflect.Method.invoke(Method.java:511) 
10-21 20:40:24.098: E/AndroidRuntime(27346): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
10-21 20:40:24.098: E/AndroidRuntime(27346): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
10-21 20:40:24.098: E/AndroidRuntime(27346): at dalvik.system.NativeStart.main(Native Method) 
10-21 20:40:25.878: I/Process(27346): Sending signal. PID: 27346 SIG: 9 
+0

스택 추적을 게시하십시오 –

+0

어떤 줄이 # 97입니까? – Asahi

+0

cursor.close(); – Sunny

답변

0
... from PALM_ORD_DET, PALM_ORDER" 
+ " PRODUCT P where ... 

이 유효하지 않습니다

... from PALM_ORD_DET, PALM_ORDER PRODUCT P where ... 

에 연결할 것입니다!

당신은 선택해야

... from PALM_ORD_DET, PALM_ORDER PRODUCT where ... 

또는

... from PALM_ORD_DET, PALM_ORDER PRODUCT where ... 

따라 PALM_ORDER에 대한 참조를 사용합니다.

0

cursor.close는()는 데이터베이스 연결이 sQLiteDatabase.close();

0

쿼리는 null를 돌려 사용 종료하려는 경우 대신이의 필요하지 않은 잘못, 그리고 당신이 그것을 액세스 할 때 커서가있는거야. 액세스하기 전에

cursor != null 

조건을 추가 할 수 있습니다.

+0

사실입니다. 정확한 문제를 정확히 찾아내는 것이 어렵습니다. 문서의 많은 도움이되지 않는 원시 쿼리가 null을 반환하는 조건 하에서 나에게 말할 수 있습니까? – Sunny

관련 문제