簡體   English   中英

如何以“意圖”從另一個服務方法調用服務方法?

[英]How to call a service method from another service method with "intent"?

我對 java 完全陌生。 我有以下代碼,我試圖從數據庫中檢索一個值,但我需要將該值作為變量返回:

  • 呼叫者,召集者:
private String readInfo(String parameter, String option) {
        
        // some data conversion

        Context conVar = this;
        Intent intent = new Intent(conVar, FlipKRetriev.class);
        Log.d("LogMail", "Intent Create");
        //intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        Log.d("LogMail", "Add Flags");
        conVar.startService(intent);
        
        //no idea how to call FlipKRetriev.rgetData and return its variable
        
        Log.d("LogMail", "Start Intent");
        return "Missing Variable from FlipRetriev.rgetData";
    
    }
  • 被調用的 class 和 function :
package com.flipkeyboard;

import android.annotation.SuppressLint;
import android.app.Service;
import android.content.Intent;
import android.database.Cursor;
import android.os.IBinder;
import android.util.Log;

public class FlipKRetriev extends Service {
    private FlipKDataBas jVarDB;

    @SuppressLint("Range")
    public CharSequence rgetData(String parameter, String options) {
            Log.d("LogMail", "Reached getData");

        jVarDB = new FlipKDataBas(this);

            int iConCCTS = jVarDB.conCCTS();

            Log.d("LogMail", String.valueOf(iConCCTS));
            Log.d("LogMail", "Called DB");
        
        // some data conversion...
        String varRet, varRet1, varRet2;
        return varRet;
    }
}
  • 以及“SQLLiteOpenHelper”調用中的“conCCTS”方法:
package com.flipkeyboard;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.DatabaseUtils;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class FlipKDataBas extends SQLiteOpenHelper {

    public static final String DBA_CCTS = "FlipKDB.db";
    public static final String TAB_CCTS = "CCTS";
    public static final String COL_ID = "ID";
    public static final String COL_NAME = "NAME";
    public static final String COL_EMAL = "EMAL";
    public static final String COL_PHWK = "PHWK";
    public static final String COL_PHMB = "PHMB";
    public static final String COL_CITY = "CITY";
    public static final String COL_CTRY = "CTRY";

    public FlipKDataBas(Context conVar) {
        super(conVar, DBA_CCTS, null, 1);
        Log.d("LogMail", "FlipKDataBas OK");
    }

    @Override
    public void onCreate(SQLiteDatabase varDB) {
        // some code...
    }

    @Override
    public void onUpgrade(SQLiteDatabase varDB, int i, int i1) {
        // some code...
    }

    public int conCCTS() {
        SQLiteDatabase varDB = this.getReadableDatabase();
        Log.d("LogMail", "Count DB");
        return (int) DatabaseUtils.queryNumEntries(varDB, TAB_CCTS);
    }
}

問題是我不知道如何從我在“readInfo”中使用的“intent”調用方法“rgetData”。

任何幫助表示贊賞。

我能夠通過解決方法解決此問題:

這基本上改變了對 FlipKRetriev class 的更具體系列調用的“意圖”方法。

        // This is to fetch the information from the database
        FlipKRetriev cls = new FlipKRetriev();
            Context conVar = this;

            cls.parameter = txtPar;
            cls.options = option;
            cls.rStartSrv(conVar);
            retValFKR = cls.rgetData();

在哪里:

  • 參數/選項是我發送到新 class 的變量。
  • retValFKR 是我分配結果的初始 class 的預期回報。

我得到的錯誤是我沒有將上下文從第一個 class 傳遞到第二個(我在第二個類中直接使用“this”),這是能夠鏈接它們所必需的。

    public void rStartSrv(Context context) {
        //parameter = (String) intent.getExtras().get("parameter");
        //options = (String) intent.getExtras().get("options");
        Log.d("LogMail", "Reached On Receive");
        jVarDB = new FlipKDataBas(context);
        int iConCCTS = jVarDB.conCCTS();
        Log.d("LogMail", String.valueOf(iConCCTS));
        Log.d("LogMail", String.valueOf(parameter));
        Log.d("LogMail", String.valueOf(options));
    }

沒有上下文,就無法調用數據庫變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM