2017-02-02 3 views
1

Я хочу добавить Admob в проект. В основном классе Java я не мог найти способ onCreate(), чтобы добавить AdView и AdRequest для того, чтобы инициализировать Google Mobile Ads SDKНе удалось найти метод onCreate()

package ***************** 

import android.content.ActivityNotFoundException; 
import android.content.Intent; 
import android.content.pm.PackageManager; 
import android.database.Cursor; 
import android.net.Uri; 
import android.os.Bundle; 
import android.provider.OpenableColumns; 
import android.support.annotation.NonNull; 
import android.support.v4.app.ActivityCompat; 
import android.support.v4.content.ContextCompat; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.widget.Toast; 

import com.github.barteksc.pdfviewer.PDFView; 
import com.github.barteksc.pdfviewer.listener.OnLoadCompleteListener; 
import com.github.barteksc.pdfviewer.listener.OnPageChangeListener; 
import com.github.barteksc.pdfviewer.scroll.DefaultScrollHandle; 
import com.google.android.gms.ads.AdRequest; 
import com.google.android.gms.ads.AdView; 
import com.google.android.gms.ads.MobileAds; 
import com.shockwave.pdfium.PdfDocument; 

import org.androidannotations.annotations.AfterViews; 
import org.androidannotations.annotations.EActivity; 
import org.androidannotations.annotations.NonConfigurationInstance; 
import org.androidannotations.annotations.OnActivityResult; 
import org.androidannotations.annotations.OptionsItem; 
import org.androidannotations.annotations.OptionsMenu; 
import org.androidannotations.annotations.ViewById; 

import java.util.List; 

@EActivity(R.layout.activity_main) 
@OptionsMenu(R.menu.options) 

public class PDFViewActivity extends AppCompatActivity implements OnPageChangeListener, OnLoadCompleteListener { 

    private static final String TAG = PDFViewActivity.class.getSimpleName(); 

    private final static int REQUEST_CODE = 42; 
    public static final int PERMISSION_CODE = 42042; 

    public static final String SAMPLE_FILE = "sample.pdf"; 
    public static final String READ_EXTERNAL_STORAGE = "android.permission.READ_EXTERNAL_STORAGE"; 


    @ViewById 
    PDFView pdfView; 

    @NonConfigurationInstance 
    Uri uri; 

    @NonConfigurationInstance 
    Integer pageNumber = 0; 

    String pdfFileName; 

    @OptionsItem(R.id.pickFile) 
    void pickFile() { 
     int permissionCheck = ContextCompat.checkSelfPermission(this, 
       READ_EXTERNAL_STORAGE); 

     if (permissionCheck != PackageManager.PERMISSION_GRANTED) { 
      ActivityCompat.requestPermissions(
        this, 
        new String[]{READ_EXTERNAL_STORAGE}, 
        PERMISSION_CODE 
      ); 

      return; 
     } 

     launchPicker(); 
    } 

    void launchPicker() { 
     Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
     intent.setType("application/pdf"); 
     try { 
      startActivityForResult(intent, REQUEST_CODE); 
     } catch (ActivityNotFoundException e) { 
      //alert user that file manager not working 
      Toast.makeText(this, R.string.toast_pick_file_error, Toast.LENGTH_SHORT).show(); 
     } 
    } 

    @AfterViews 
    void afterViews() { 
     if (uri != null) { 
      displayFromUri(uri); 
     } else { 
      displayFromAsset(SAMPLE_FILE); 
     } 
     setTitle(pdfFileName); 
    } 

    private void displayFromAsset(String assetFileName) { 
     pdfFileName = assetFileName; 

     pdfView.fromAsset(SAMPLE_FILE) 
       .defaultPage(pageNumber) 
       .onPageChange(this) 
       .enableAnnotationRendering(true) 
       .onLoad(this) 
       .scrollHandle(new DefaultScrollHandle(this)) 
       .load(); 
    } 

    private void displayFromUri(Uri uri) { 
     pdfFileName = getFileName(uri); 

     pdfView.fromUri(uri) 
       .defaultPage(pageNumber) 
       .onPageChange(this) 
       .enableAnnotationRendering(true) 
       .onLoad(this) 
       .scrollHandle(new DefaultScrollHandle(this)) 
       .load(); 
    } 

    @OnActivityResult(REQUEST_CODE) 
    public void onResult(int resultCode, Intent intent) { 
     if (resultCode == RESULT_OK) { 
      uri = intent.getData(); 
      displayFromUri(uri); 
     } 
    } 

    @Override 
    public void onPageChanged(int page, int pageCount) { 
     pageNumber = page; 
     setTitle(String.format("%s %s/%s", pdfFileName, page + 1, pageCount)); 
    } 

    public String getFileName(Uri uri) { 
     String result = null; 
     if (uri.getScheme().equals("content")) { 
      Cursor cursor = getContentResolver().query(uri, null, null, null, null); 
      try { 
       if (cursor != null && cursor.moveToFirst()) { 
        result = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME)); 
       } 
      } finally { 
       if (cursor != null) { 
        cursor.close(); 
       } 
      } 
     } 
     if (result == null) { 
      result = uri.getLastPathSegment(); 
     } 
     return result; 
    } 

    @Override 
    public void loadComplete(int nbPages) { 
     PdfDocument.Meta meta = pdfView.getDocumentMeta(); 
     Log.e(TAG, "title = " + meta.getTitle()); 
     Log.e(TAG, "author = " + meta.getAuthor()); 
     Log.e(TAG, "subject = " + meta.getSubject()); 
     Log.e(TAG, "keywords = " + meta.getKeywords()); 
     Log.e(TAG, "creator = " + meta.getCreator()); 
     Log.e(TAG, "producer = " + meta.getProducer()); 
     Log.e(TAG, "creationDate = " + meta.getCreationDate()); 
     Log.e(TAG, "modDate = " + meta.getModDate()); 

     printBookmarksTree(pdfView.getTableOfContents(), "-"); 

    } 

    public void printBookmarksTree(List<PdfDocument.Bookmark> tree, String sep) { 
     for (PdfDocument.Bookmark b : tree) { 

      Log.e(TAG, String.format("%s %s, p %d", sep, b.getTitle(), b.getPageIdx())); 

      if (b.hasChildren()) { 
       printBookmarksTree(b.getChildren(), sep + "-"); 
      } 
     } 
    } 

    /** 
    * Listener for response to user permission request 
    * 
    * @param requestCode Check that permission request code matches 
    * @param permissions Permissions that requested 
    * @param grantResults Whether permissions granted 
    */ 
    @Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], 
              @NonNull int[] grantResults) { 
     if (requestCode == PERMISSION_CODE) { 
      if (grantResults.length > 0 
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       launchPicker(); 
      } 
     } 
    } 
} 

Edit: проблема решается просто добавить @Afterviews вызовов, как это

@AfterViews 
void afterViews() { 
    if (uri != null) { 
     displayFromUri(uri); 
    } else { 
     displayFromAsset(SAMPLE_FILE); 
    } 
    setTitle(pdfFileName); 

    MobileAds.initialize(getApplicationContext(), "app-id"); 

    AdView mAdView = (AdView) findViewById(R.id.adView); 
    AdRequest adRequest = new AdRequest.Builder().build(); 
    mAdView.loadAd(adRequest); 
} 

PS Я новичок в программировании.

+1

Вы должны создать 'onCreate' метод. Перед началом работы с другими функциями, такими как AdMob, вы должны больше узнать об Android Framework (особенно жизненный цикл активности). –

+0

Я попытался добавить метод, приложение сработает при запуске –

+1

Можете ли вы опубликовать логарифм, показанный при сбое приложения? –

ответ

1

Во-первых, я бы рекомендовал ознакомиться с документацией Activity Lifecycle. Если в коде, который вы указали, нет метода onCreate(), вам нужно будет добавить метод самостоятельно. Этика почему Вы бы изменить Apache 2,0-лицензионный продукт только вставить объявления в сторону, в вашем случае это будет

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    Super.onCreate(savedInstanceState); 
    MobileAds.initialize(getApplicationContext(), "app-id"); 

    AdView mAdView = (AdView) findViewById(R.id.adView); 
    AdRequest adRequest = new AdRequest.Builder().build(); 
    mAdView.loadAd(adRequest); 
} 

Также обратите внимание, что код поставляется в этой деятельности широко использует Android Annotations, я Рекомендуем потратить некоторое время на ознакомление с каким-то еще кодом ванили, прежде чем переходить к библиотекам, экономящим время, например.

+0

Я попытался добавить метод, приложение сработает при запуске. \t Я также заметил, что существует сгенерированное действие, которое содержит метод (я добавил код выше), но я не могу его отредактировать, потому что он сгенерирован –

+0

В этом случае вы можете отредактировать исходный вопрос, включив в него логарифм, который когда приложение падает? –

+0

okay, logcat добавлен –

1

Проблема решена, просто положить его в @Afterviews так:

@AfterViews 
void afterViews() { 
if (uri != null) { 
    displayFromUri(uri); 
} else { 
    displayFromAsset(SAMPLE_FILE); 
} 
setTitle(pdfFileName); 

MobileAds.initialize(getApplicationContext(), "app-id"); 

AdView mAdView = (AdView) findViewById(R.id.adView); 
AdRequest adRequest = new AdRequest.Builder().build(); 
mAdView.loadAd(adRequest); 
} 
Смежные вопросы