2017-02-02 5 views
1

Ich möchte Admob zu einem Projekt hinzufügen. In der Haupt-Java-Klasse konnte ich die onCreate() Methode finde die adView und AdRequest hinzuzufügen, um das Google Mobile Ads SDKKonnte die Methode onCreate() nicht finden

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(); 
      } 
     } 
    } 
} 

bearbeiten zu initialisieren: Problem nur den Anruf @Afterviews wie diese

hinzufügen gelöst
@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 Ich bin neu im Programmieren.

+1

Sie müssen die 'onCreate' Methode erstellen. Sie sollten mehr über das Android Framework (speziell Activity Lifecycle) lernen, bevor Sie mit den anderen Funktionen wie AdMob beginnen. –

+0

Ich habe versucht, die Methode hinzuzufügen, stürzt die App beim Start –

+1

Kannst du die Logcat veröffentlichen, wenn die App abstürzt? –

Antwort

1

Erstens würde ich empfehlen, einen Blick auf die Activity Lifecycle Dokumentation zu werfen. Wenn der von Ihnen angegebene Code keine onCreate()-Methode enthält, müssen Sie die Methode selbst hinzufügen. Ethik der warum Sie ein Apache-2.0-Lizenz Produkt ändern würden nur Anzeigen beiseite legen, in Ihrem Fall wäre es

@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); 
} 

Beachten Sie auch, dass der in dieser Aktivität geliefert Code starken Gebrauch von Android Annotations macht, ich Ich würde Ihnen empfehlen, sich mit etwas mehr Vanilla-Code vertraut zu machen, bevor Sie zu zeitsparenden Bibliotheken wie diesen übergehen.

+0

Ich habe versucht, die Methode hinzuzufügen, die App stürzt beim Start ab. \t Ich bemerkte auch, dass es eine generierte Aktivität gibt, die die Methode enthält (ich fügte den obigen Code hinzu), aber ich kann es nicht bearbeiten, da es generiert –

+0

In diesem Fall können Sie Ihre ursprüngliche Frage bearbeiten, um das Logcat zu enthalten produziert, wenn die App abstürzt? –

+0

Okay, Logcat hinzugefügt –

1

Problem gelöst, setzen Sie es nur in @Afterviews wie folgt aus:

@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); 
} 
Verwandte Themen