sao classes utilitarias, logo voce nao precisa se preocupar em modifica-las no futuro, mas sim reusa-las quando implementacoes semelhantes surgirem.Vamos editar o AndroidManifest.xml agora, com algumas configuracoes de permissao a APi do PayPal.<!-- para o card.io e card scanning --> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-feature android:name="android.hardware.camera" android:required="false" /> <uses-feature android:name="android.hardware.camera.autofocus" android:required="false" /> <!-- para card.io e paypal --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <!-- Dentro da tag application --> <service android:name="com.paypal.android.sdk.payments.PayPalService" android:exported="false" /> <activity android:name="br.edu.ecommerce.ListaProdutosActivity" /> <activity android:name="com.paypal.android.sdk.payments.PaymentActivity" /> <activity android:name="com.paypal.android.sdk.payments.LoginActivity" /> <activity android:name="com.paypal.android.sdk.payments.PaymentMethodActivity" /> <activity android:name="com.paypal.android.sdk.payments.PaymentConfirmActivity" /> <activity android:name="io.card.payment.CardIOActivity" android:configChanges="keyboardHidden|orientation" /> <activity android:name="io.card.payment.DataEntryActivity" />Apos isso, nos tambem precisaremos salvar as informacoes relativas ao PayPal Client ID e Secret no lado Android. Crie a classe Config abaixo que contera algumas outras constantes importantes:package br.edu.ecommerce.paypal;import com.paypal.android.sdk.payments.PayPalConfiguration;public class Config { // PayPal app configuration public static final String PAYPAL_CLIENT_ID = "AbkVNdXzruEZ6FEGaJB6TBfB_-4qmlqLPAQj5qin4FI8cS3v0Vs2pjldttP4MgmF487ZyVZ2y34j4xPE"; public static final String PAYPAL_CLIENT_SECRET = "EDYpA14ZmKc8pXqFe9CHWYJkkqu-6z1NxduRpeIHsr_O37QIgZK7vYd3R6ElsKpsPbQ55VbVo8ps3KuE"; public static final String PAYPAL_ENVIRONMENT = PayPalConfiguration.ENVIRONMENT_SANDBOX; public static final String PAYMENT_INTENT = PayPalPayment.PAYMENT_INTENT_SALE; public static final String DEFAULT_CURRENCY = "BRL"; // PayPal server urls public static final String URL_PRODUTOS = "http://192.168.0.103:8080/eCommerce-web/produto/produtos"; public static final String URL_VER_PAGTOS = "http://192.168.0.103:8080/eCommerce-web/produto/checkPagto";}Veja que estamos salvando os mesmos dados que fizemos no lado web, dentro do arquivo de propriedades. Nao esqueca de modificar o IP das duas URLs para o da sua maquina, bem como o client id e secret. E nada de tentar usar localhost, nao vai funcionar.Para esse exemplo funcionar, voce precisara tambem duplicar as mesmas classes de entidades que criamos no projeto Java. Nao mostraremos esse passo aqui, mas voce podera copiar as classes direto do arquivo de download do codigo fonte.Vamos criar agora o arquivo xml de layout da lista de produtos. Para isso, crie o arquivo abaixo dentro da pasta res/layout com o nome de item_lista.xml:<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/linha_lista_seletor" android:padding="8dp" > <!-- Componente de imagem do produto --> <com.android.volley.toolbox.NetworkImageView android:id="@+id/imgProduto" android:layout_width="80dp" android:layout_height="80dp" android:layout_alignParentLeft="true" android:layout_marginRight="8dp" > </com.android.volley.toolbox.NetworkImageView> <!-- TAtulo do Produto --> <TextView android:id="@+id/txtTitulo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@id/imgProduto" android:layout_toRightOf="@id/imgProduto" android:textSize="@dimen/titulo" android:textStyle="bold" /> <!-- Qtde de produtos vendidos --> <TextView android:id="@+id/txtQtde" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/txtTitulo" android:layout_marginTop="1dip" android:layout_toRightOf="@id/imgProduto" android:textSize="@dimen/qtde" /> <!-- Categorias do produto --> <TextView android:id="@+id/txtCategoria" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/txtQtde" android:layout_marginTop="5dp" android:layout_toRightOf="@id/imgProduto" android:textColor="@color/categoria" android:textSize="@dimen/categoria" /> <!-- Valor do produto --> <TextView android:id="@+id/txtValor" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:textColor="@color/valor" android:textSize="@dimen/valor" /> <Button android:id="@+id/btnAddToCart" android:layout_width="wrap_content" android:layout_height="30dp" android:layout_below="@id/txtCategoria" android:layout_margin="5dp" android:layout_toRightOf="@id/imgProduto" android:background="#64d048" android:paddingLeft="5dp" android:paddingRight="5dp" android:text="@string/add_carrinho" android:textColor="#ffffff" /></RelativeLayout>Como estamos lidando com uma listview customizada, precisamos criar uma classe adapter da mesma. Cria a classe CustomListAdapter abaixo e adicione o conteudo:package br.edu.ecommerce.custom.adapter;import java.text.NumberFormat;import java.util.ArrayList;import java.util.List;import java.util.Locale;import android.annotation.SuppressLint;import android.app.Activity;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.TextView;import br.edu.ecommerce.loja_virtual.R;import br.edu.ecommerce.custom.app.AppController;import br.edu.ecommerce.custom.model.Produto;import com.android.volley.toolbox.ImageLoader;import com.android.volley.toolbox.NetworkImageView;public class CustomListAdapter extends BaseAdapter { private Activity activity; private List produtos = new ArrayList(); private LayoutInflater inflater; ImageLoader imageLoader = AppController.getInstance().getImageLoader(); private ProductListAdapterListener listener; public CustomListAdapter(Activity activity, List produtos, ProductListAdapterListener listener) { this.activity = activity; this.produtos = produtos; this.listener = listener; } @Override public int getCount() { return produtos.size(); } @Override public Object getItem(int position) { return produtos.get(position); } @Override public long getItemId(int position) { return position; } @SuppressLint("InflateParams") @Override public View getView(int position, View convertView, ViewGroup parent) { if (inflater