0

私のウィジェット コードが WidgetProvider クラスからデータベースを呼び出そうとすると、何も取得されません。コードをデバッグすると、database.open() に到達すると、突然デバッグ ポイントが消えます。問題の原因となるタイムアウト設定はありますか? また、実行中にスローされる例外はありません。誰かがここで何が悪いのか教えてもらえますか?

コードの詳細は次のとおりです。

public class PEMWidgetProvider extends AppWidgetProvider {

    private DataVO vo = new DataVO();

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds) {

        ComponentName thisWidget = new ComponentName(context,PEMWidgetProvider.class);

        int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);

        for (int widgetId : allWidgetIds) {

            RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);


            DataDAO dao = new  DataDAO (context);




                String month = "4";
                vo = dao.getData(month);



            }

          //get all detail
            remoteViews.setTextViewText(R.id.v_widgetFieldName, vo.getFiedl1());
            remoteViews.setTextViewText(R.id.v_widgetFieldValue, vo.getFiedle2());

         // Register an onClickListener
            Intent intent = new Intent(context, PEMWidgetProvider.class);

            intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
            intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);

            PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
                0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
            remoteViews.setOnClickPendingIntent(R.id.v_widgetFieldValue, pendingIntent);
            appWidgetManager.updateAppWidget(widgetId, remoteViews);
        }
    }

データDAO:

public class DataDAO{

    private static final String DB_NAME = "DB";
    private SQLiteDatabase db;
    private BaseDAO baseDAO;
    private Context context;

    public DataDAO(Context context){
        baseDAO = new BaseDAO(context, DB_NAME, null, 1);
        this.context = context;
    }



 //this method works fine when i am calling from MainActivity
   public DataVO  getData(String month){


        SQLiteDatabase database = baseDAO.open();

        String whereClasue = "fieldName= ? and month = ?";
        Cursor cursor =database.query(Constants.DATA_TBL, 
        new String[]{"field1, fieldValue2"}, 
        whereClasue, new String[]{"Data1", month}, null, null, null);

        //there will be only record
        if(cursor.moveToFirst()){
            do{
                DataVO vo = new DataVO();
                vo.setField1(cursor.getString(0));              
                vo.setField2(cursor.getString(1));
            }while(cursor.moveToNext());

        }       

        if (cursor != null && !cursor.isClosed()) {
            cursor.close();
            database.close();
        }
        return vo;
    }




public class BaseDAO extends SQLiteOpenHelper {

    public static SQLiteDatabase database;
    public BaseDAO(Context context, String name, CursorFactory factory,
            int version) {
        super(context, name, factory, version);
    }

    public SQLiteDatabase open() throws SQLException{
            database = super.getWritableDatabase();

            return database;
        }


        public void close(){
            if(database != null)
                database.close();
        }

    }

ありがとうちんたん

4

1 に答える 1

0

コードを修正してください。動作します。

database = super.getWritableDatabase();// replace this line of code with following line   
database = getWritableDatabase();
于 2013-04-02T04:40:08.237 に答える