2017-06-08 4 views
1

Ich verfolge den Androiden in app billing tutorial wo es heißt einen separaten Thread erstellen:Wie in App-Abrechnung

Warnung: die getSkuDetails Methode auf dem Haupt-Thread nicht nennen. Durch den Aufruf dieser Methode wird eine Netzwerkanforderung ausgelöst, die Ihren Haupt-Thread blockieren könnte. Erstellen Sie stattdessen einen separaten Thread und rufen Sie die getSkuDetails-Methode innerhalb dieses Threads auf.

für den folgenden Code:

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); 
     Intent serviceIntent = 
       new Intent("com.android.vending.billing.InAppBillingService.BIND"); 
     serviceIntent.setPackage("com.android.vending"); 
     getActivity().bindService(serviceIntent, mServiceConn, Context.BIND_AUTO_CREATE); 
     ArrayList<String> skuList = new ArrayList<String>(); 
     skuList.add("iap_one"); 
     Bundle querySkus = new Bundle(); 
     querySkus.putStringArrayList("ITEM_ID_LIST", skuList); 
     try { 
      Bundle skuDetails = mService.getSkuDetails(3, 
        getActivity().getPackageName(), "inapp", querySkus); 
      int response = skuDetails.getInt("RESPONSE_CODE"); 
      if (response == 0) { 
       ArrayList<String> responseList 
         = skuDetails.getStringArrayList("DETAILS_LIST"); 

       for (String thisResponse : responseList) { 
        try { 
         JSONObject object = new JSONObject(thisResponse); 
         String sku = object.getString("productId"); 
         String price = object.getString("price"); 
         Log.d("Test Price", price); 
        } catch (JSONException e){ 
         Log.e("MYAPP", "unexpected JSON exception", e); 
        } 
       } 
      } 

     } catch (RemoteException e) { 
      Log.e("MYAPP", "unexpected Remote exception", e); 
     } 

    } 
}; 
+0

' AsyncTask' ist die Standardmethode, um Dinge auf einem Hintergrundthread in Android zu tun. Viele Informationen darüber, wie man das im Internet macht. – nasch

Antwort

0

Sie benötigen Klasse zu erstellen, die runnable implementiert und Variablen einfügen, die Sie durch Konstruktor benötigen oder verwenden AsyncTask Klasse

class ImplementsRunnable implements Runnable { 
    private myvar; 

    public ImplementsRunnable(String myvar){ 
    this.myvar=myvar; 
    } 

    public void run() { 
    System.out.println("ImplementsRunnable : myvar: " + myvar); 
    } 

}

Verwandte Themen