Java for Android Call getPackageName() from within an AsyncTask -
i working on android app using inappbilling. moved following code main activity asynctask, recommended google:
class getitemlist extends asynctask<integer, integer, long> { iinappbillingservice mservice; serviceconnection mserviceconn = new serviceconnection() { @override public void onservicedisconnected(componentname name) { mservice = null; } @override public void onserviceconnected(componentname name, ibinder service) { mservice = iinappbillingservice.stub.asinterface(service); } }; @override protected long doinbackground(integer... params) { arraylist<string> skulist = new arraylist<string> (); skulist.add("i001"); skulist.add("i002"); bundle queryskus = new bundle(); queryskus.putstringarraylist("item_id_list", skulist); bundle skudetails = null; try { skudetails = mservice.getskudetails(3, getpackagename(), "inapp", queryskus); int response = skudetails.getint("response_code"); if (response == 0) { arraylist<string> responselist = skudetails.getstringarraylist("details_list"); (string thisresponse : responselist) { jsonobject object; object = new jsonobject(thisresponse); string sku = object.getstring("productid"); string price = object.getstring("price"); string mpremiumupgradeprice; string mgasprice; if (sku.equals("i001")) mpremiumupgradeprice = price; else if (sku.equals("i002")) mgasprice = price; } } } catch (remoteexception e) { // todo auto-generated catch block log.d("synch billing", "error remote: " + e.getmessage()); e.printstacktrace(); } catch (jsonexception e) { // todo auto-generated catch block log.d("synch billing", "error json: " + e.getmessage()); e.printstacktrace(); } return null; } }
my problem call getpackagename() (the first line of try block) giving error, "the method getpackagename() undefined task getitemlist." how call getpackagename() within asynctask? i've tried getcontextwrapper.getpackagename(), getapplicationcontext.getpackagename(), , getresources.getpackagename().
corrected code, based on mixel's answer below:
package com.myknitcards; import java.util.arraylist; import org.json.jsonexception; import org.json.jsonobject; import com.android.vending.billing.iinappbillingservice; import android.app.activity; import android.content.componentname; import android.content.serviceconnection; import android.os.asynctask; import android.os.bundle; import android.os.ibinder; import android.os.remoteexception; import android.util.log; import android.view.menu; import android.view.menuitem; public class availablecards extends activity { @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_available_cards); string packagename = this.getpackagename(); new getitemlist(packagename).execute(); } @override public boolean oncreateoptionsmenu(menu menu) { // inflate menu; adds items action bar if present. getmenuinflater().inflate(r.menu.available_cards, menu); return true; } @override public boolean onoptionsitemselected(menuitem item) { // handle action bar item clicks here. action bar // automatically handle clicks on home/up button, long // specify parent activity in androidmanifest.xml. int id = item.getitemid(); if (id == r.id.action_settings) { return true; } return super.onoptionsitemselected(item); } } class getitemlist extends asynctask<integer, integer, long> { private string pname; getitemlist(string packagename){ pname = packagename; } iinappbillingservice mservice; serviceconnection mserviceconn = new serviceconnection() { @override public void onservicedisconnected(componentname name) { mservice = null; } @override public void onserviceconnected(componentname name, ibinder service) { mservice = iinappbillingservice.stub.asinterface(service); } }; @override protected long doinbackground(integer... params) { arraylist<string> skulist = new arraylist<string> (); skulist.add("i001"); skulist.add("i002"); bundle queryskus = new bundle(); queryskus.putstringarraylist("item_id_list", skulist); bundle skudetails = null; try { skudetails = mservice.getskudetails(3, pname, "inapp", queryskus); int response = skudetails.getint("response_code"); if (response == 0) { arraylist<string> responselist = skudetails.getstringarraylist("details_list"); (string thisresponse : responselist) { jsonobject object; object = new jsonobject(thisresponse); string sku = object.getstring("productid"); string price = object.getstring("price"); string mpremiumupgradeprice; string mgasprice; if (sku.equals("i001")) mpremiumupgradeprice = price; else if (sku.equals("i002")) mgasprice = price; } } } catch (remoteexception e) { // todo auto-generated catch block log.d("synch billing", "error remote: " + e.getmessage()); e.printstacktrace(); } catch (jsonexception e) { // todo auto-generated catch block log.d("synch billing", "error json: " + e.getmessage()); e.printstacktrace(); } return null; } }
add constructor getitemlist accepts packagename , assigns private field. use in mservice.getskudetails().
and when instantiate getitemlist in activity pass value returned getpackagename() getitemlist constructor.
Comments
Post a Comment