2017-09-26 4 views
0

Je suis le tutoriel de Codelab sur firebase de l'application FriendlyChat. J'ai atteint la section Indexation. J'ai implémenté le code comme requis mais je ne vois pas l'indexation de l'application quand je recherche google sur l'émulateur.Mon Firebase L'indexation sur l'appareil ne fonctionne pas

Voici la section manifeste.

<intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW"/> 
      <category android:name="android.intent.category.DEFAULT"/> 
      <category android:name="android.intent.category.BROWSABLE"/> 
      <data 
       android:host="friendlychat.firebase.google.com" 
       android:scheme="http" 
       android:pathPrefix="/message"/> 
     </intent-filter> 

Voici le MainActivity.java

Le tutoriel est sur cette page https://codelabs.developers.google.com/codelabs/firebase-android/#8

pourrait être le problème que j'utilise l'émulateur?

Voici le MainActivity.java

public class MainActivity extends AppCompatActivity 
    implements GoogleApiClient.OnConnectionFailedListener { 

public static class MessageViewHolder extends RecyclerView.ViewHolder { 
    TextView messageTextView; 
    ImageView messageImageView; 
    TextView messengerTextView; 
    CircleImageView messengerImageView; 

    public MessageViewHolder(View v) { 
     super(v); 
     messageTextView = (TextView) itemView.findViewById(R.id.messageTextView); 
     messageImageView = (ImageView) itemView.findViewById(R.id.messageImageView); 
     messengerTextView = (TextView) itemView.findViewById(R.id.messengerTextView); 
     messengerImageView = (CircleImageView) itemView.findViewById(R.id.messengerImageView); 
    } 
} 

private static final String TAG = "MainActivity"; 
public static final String MESSAGES_CHILD = "messages"; 
private static final int REQUEST_INVITE = 1; 
private static final int REQUEST_IMAGE = 2; 
private static final String LOADING_IMAGE_URL = "https://www.google.com/images/spin-32.gif"; 
public static final int DEFAULT_MSG_LENGTH_LIMIT = 10; 
public static final String ANONYMOUS = "anonymous"; 
private static final String MESSAGE_SENT_EVENT = "message_sent"; 
private String mUsername; 
private String mPhotoUrl; 
private SharedPreferences mSharedPreferences; 
private GoogleApiClient mGoogleApiClient; 
private static final String MESSAGE_URL = "http://friendlychat.firebase.google.com/message/"; 

private Button mSendButton; 
private RecyclerView mMessageRecyclerView; 
private LinearLayoutManager mLinearLayoutManager; 
private ProgressBar mProgressBar; 
private EditText mMessageEditText; 
private ImageView mAddMessageImageView; 

// Firebase instance variables 
private FirebaseAuth mFirebaseAuth; 
private FirebaseUser mFirebaseUser; 
private DatabaseReference mFirebaseDatabaseReference; 
private FirebaseRecyclerAdapter<FriendlyMessage, MessageViewHolder> mFirebaseAdapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 
    // Set default username is anonymous. 
    mUsername = ANONYMOUS; 

    // Initialize Firebase Auth 
    mFirebaseAuth = FirebaseAuth.getInstance(); 
    mFirebaseUser = mFirebaseAuth.getCurrentUser(); 
    if(mFirebaseUser == null){ 
     // Not signed in, launch the Sign in activity 
     startActivity(new Intent(this, SignInActivity.class)); 
     finish(); 
     return; 
    } else { 
     mUsername = mFirebaseUser.getDisplayName(); 
     if(mFirebaseUser.getPhotoUrl() != null){ 
      mPhotoUrl = mFirebaseUser.getPhotoUrl().toString(); 
     } 
    } 

    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) 
      .addApi(Auth.GOOGLE_SIGN_IN_API) 
      .build(); 

    // Initialize ProgressBar and RecyclerView. 
    mProgressBar = (ProgressBar) findViewById(R.id.progressBar); 
    mMessageRecyclerView = (RecyclerView) findViewById(R.id.messageRecyclerView); 
    mLinearLayoutManager = new LinearLayoutManager(this); 
    mLinearLayoutManager.setStackFromEnd(true); 
    mMessageRecyclerView.setLayoutManager(mLinearLayoutManager); 

    // New child entries 
    mFirebaseDatabaseReference = FirebaseDatabase.getInstance().getReference(); 
    mFirebaseAdapter = new FirebaseRecyclerAdapter<FriendlyMessage, MessageViewHolder>(
      FriendlyMessage.class, 
      R.layout.item_message, 
      MessageViewHolder.class, 
      mFirebaseDatabaseReference.child(MESSAGES_CHILD)) { 

     @Override 
     protected FriendlyMessage parseSnapshot(DataSnapshot snapshot){ 
      FriendlyMessage friendlyMessage = super.parseSnapshot(snapshot); 
      if(friendlyMessage != null){ 
       friendlyMessage.setId(snapshot.getKey()); 
      } 
      return friendlyMessage; 
     } 

     @Override 
     protected void populateViewHolder(final MessageViewHolder messageViewHolder, 
              FriendlyMessage friendlyMessage, int position) { 
      mProgressBar.setVisibility(ProgressBar.INVISIBLE); 
      if(friendlyMessage.getText() != null){ 

       // write this message to the on-device index 
       FirebaseAppIndex.getInstance().update(getMessageIndexable(friendlyMessage)); 
       Log.d(TAG, friendlyMessage.getText()); 
       // log a view action on it 
       FirebaseUserActions.getInstance().end(getMessageViewAction(friendlyMessage)); 

       messageViewHolder.messageTextView.setText(friendlyMessage.getText()); 
       messageViewHolder.messageTextView.setVisibility(TextView.VISIBLE); 
       messageViewHolder.messageImageView.setVisibility(ImageView.GONE); 

      } else { 
       String imageUrl = friendlyMessage.getImageUrl(); 
       if(imageUrl.startsWith("gs://")){ 
        StorageReference storageReference = FirebaseStorage.getInstance() 
          .getReferenceFromUrl(imageUrl); 
        storageReference.getDownloadUrl().addOnCompleteListener(
          new OnCompleteListener<Uri>() { 
           @Override 
           public void onComplete(@NonNull Task<Uri> task) { 
            if (task.isSuccessful()){ 
             String downloadUrl = task.getResult().toString(); 
             Glide.with(messageViewHolder.messageImageView.getContext()) 
               .load(downloadUrl) 
               .into(messageViewHolder.messageImageView); 
            } else { 
             Log.w(TAG, "Getting download url was not successful.", 
               task.getException()); 
            } 
           } 
          } 
        ); 
       } else { 
        Glide.with(messageViewHolder.messageImageView.getContext()) 
          .load(friendlyMessage.getImageUrl()) 
          .into(messageViewHolder.messageImageView); 
       } 
       messageViewHolder.messageImageView.setVisibility(ImageView.VISIBLE); 
       messageViewHolder.messageTextView.setVisibility(TextView.GONE); 
      } 

      messageViewHolder.messengerTextView.setText(friendlyMessage.getName()); 
      if(friendlyMessage.getPhotoUrl() == null){ 
       messageViewHolder.messengerImageView.setImageDrawable(ContextCompat.getDrawable(MainActivity.this, 
         R.drawable.ic_account_circle_black_36dp)); 
      } else { 
       Glide.with(MainActivity.this) 
         .load(friendlyMessage.getPhotoUrl()) 
         .into(messageViewHolder.messengerImageView); 
      } 
     } 
    }; 

    mFirebaseAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver(){ 
     @Override 
     public void onItemRangeInserted(int positionStart, int itemCount) { 
      super.onItemRangeInserted(positionStart, itemCount); 
      int friendlyMessageCount = mFirebaseAdapter.getItemCount(); 
      int lastVisiblePosition = mLinearLayoutManager.findLastCompletelyVisibleItemPosition(); 

      // If the recycler view is initially being loaded or the 
      // user is at the bottom of the list, scroll to the bottom 
      // of the list to show the newly added message 
      if (lastVisiblePosition == -1 || 
        (positionStart >= (friendlyMessageCount - 1) && 
        lastVisiblePosition == (positionStart -1))){ 
       mMessageRecyclerView.scrollToPosition(positionStart); 
      } 
     } 
    }); 

    mMessageRecyclerView.setAdapter(mFirebaseAdapter); 

    mMessageEditText = (EditText) findViewById(R.id.messageEditText); 
    mMessageEditText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(mSharedPreferences 
      .getInt(CodelabPreferences.FRIENDLY_MSG_LENGTH, DEFAULT_MSG_LENGTH_LIMIT))}); 
    mMessageEditText.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 
     } 

     @Override 
     public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 
      if (charSequence.toString().trim().length() > 0) { 
       mSendButton.setEnabled(true); 
      } else { 
       mSendButton.setEnabled(false); 
      } 
     } 

     @Override 
     public void afterTextChanged(Editable editable) { 
     } 
    }); 

    mSendButton = (Button) findViewById(R.id.sendButton); 
    mSendButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      // Send messages on click. 
      FriendlyMessage friendlyMessage = new 
        FriendlyMessage(mMessageEditText.getText().toString(), 
        mUsername, 
        mPhotoUrl, 
        null /* no image */); 
      mFirebaseDatabaseReference.child(MESSAGES_CHILD) 
        .push().setValue(friendlyMessage); 
      mMessageEditText.setText(""); 
     } 
    }); 

    mAddMessageImageView = (ImageView) findViewById(R.id.addMessageImageView); 
    mAddMessageImageView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      // Select image for image message on click. 
      Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); 
      intent.addCategory(Intent.CATEGORY_OPENABLE); 
      intent.setType("image/*"); 
      startActivityForResult(intent, REQUEST_IMAGE); 
     } 
    }); 
} 

@Override 
public void onStart() { 
    super.onStart(); 
    // Check if user is signed in. 
    // TODO: Add code to check if user is signed in. 
} 

@Override 
public void onPause() { 
    super.onPause(); 
} 

@Override 
public void onResume() { 
    super.onResume(); 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.main_menu, menu); 
    return true; 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data){ 
    super.onActivityResult(requestCode, resultCode, data); 
    Log.d(TAG, "onActivityResult: requestCode=" + requestCode + ", resultCode=" + resultCode); 

    if(requestCode == REQUEST_IMAGE){ 
     if(resultCode == RESULT_OK) { 
      if(data != null){ 
       final Uri uri = data.getData(); 
       Log.d(TAG, "Uri: " + uri.toString()); 

       FriendlyMessage tempMessage = new FriendlyMessage(null, mUsername, mPhotoUrl, 
         LOADING_IMAGE_URL); 
       mFirebaseDatabaseReference.child(MESSAGES_CHILD).push() 
         .setValue(tempMessage, new DatabaseReference.CompletionListener(){ 
          @Override 
          public void onComplete(DatabaseError databaseError, 
                DatabaseReference databaseReference){ 
           if(databaseError == null){ 
            String key = databaseReference.getKey(); 
            StorageReference storageReference = 
              FirebaseStorage.getInstance() 
              .getReference(mFirebaseUser.getUid()) 
              .child(key) 
              .child(uri.getLastPathSegment()); 

            putImageInStorage(storageReference, uri, key); 
           } else { 
            Log.w(TAG, "Unable to write message to database.", 
              databaseError.toException()); 
           } 
          } 
         }); 
      } 
     } 
    } 
} 


private void putImageInStorage(StorageReference storageReference, Uri uri, final String key){ 
    storageReference.putFile(uri).addOnCompleteListener(MainActivity.this, 
      new OnCompleteListener<UploadTask.TaskSnapshot>() { 
       @Override 
       public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) { 
        if(task.isSuccessful()){ 
         FriendlyMessage friendlyMessage = 
           new FriendlyMessage(null, mUsername, mPhotoUrl, 
             task.getResult().getMetadata().getDownloadUrl() 
           .toString()); 
         mFirebaseDatabaseReference.child(MESSAGES_CHILD).child(key) 
           .setValue(friendlyMessage); 
        } else { 
         Log.w(TAG, "Image upload task was not successful.", 
           task.getException()); 
        } 
       } 
      }); 
} 


@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()){ 
     case R.id.sign_out_menu: 
      mFirebaseAuth.signOut(); 
      Auth.GoogleSignInApi.signOut(mGoogleApiClient); 
      mUsername = ANONYMOUS; 
      startActivity(new Intent(this, SignInActivity.class)); 
      finish(); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 

@Override 
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 
    // An unresolvable error has occurred and Google APIs (including Sign-In) will not 
    // be available. 
    Log.d(TAG, "onConnectionFailed:" + connectionResult); 
    Toast.makeText(this, "Google Play Services error.", Toast.LENGTH_SHORT).show(); 
} 


private Indexable getMessageIndexable(FriendlyMessage friendlyMessage) { 
    PersonBuilder sender = Indexables.personBuilder() 
      .setIsSelf(mUsername.equals(friendlyMessage.getName())) 
      .setName(friendlyMessage.getName()) 
      .setUrl(MESSAGE_URL.concat(friendlyMessage.getId() + "/sender")); 

    PersonBuilder recipient = Indexables.personBuilder() 
      .setName(mUsername) 
      .setUrl(MESSAGE_URL.concat(friendlyMessage.getId() + "/recipient")); 

    Indexable messageToIndex = Indexables.messageBuilder() 
      .setName(friendlyMessage.getText()) 
      .setUrl(MESSAGE_URL.concat(friendlyMessage.getId())) 
      .setSender(sender) 
      .setRecipient(recipient) 
      .build(); 

    return messageToIndex; 
} 

private Action getMessageViewAction(FriendlyMessage friendlyMessage){ 
    return new Action.Builder(Action.Builder.VIEW_ACTION) 
      .setObject(friendlyMessage.getName(), MESSAGE_URL.concat(friendlyMessage.getId())) 
      .setMetadata(new Action.Metadata.Builder().setUpload(false)) 
      .build(); 
} 

Répondre

-1

Si vous prenez de copier/coller, c'est seulement mauvais code de lieu, essayez

  1. d'Android Studio, dans la barre d'outils Cliquez sur "CODE "puis sélectionnez" REARRANGE CODE "que d'essayer" RUN "à nouveau.
  2. Ou essayez voir l'exemple de l'original MainActivity.java dans android dossier à la place android-start sur https://github.com/firebase/friendlychat-android dépôt