Мое приложение нормально работает на эмуляторе, но когда я устанавливаю его на физический телефон, я не могу получить доступ к изображениям, которые я определил как URL в Firebase.Поэтому, когда я загружаю приложение на телефон, картинок нет.Кроме того, на практике все работает отлично.Можете ли вы порекомендовать мне что-нибудь сделать?Версия телефона Android: Android 7 API 24.
это эмулятор
введите описание изображения здесь
это мой телефон
введите описание изображения здесь
package com.orderfood.teknomerkez.orderfood;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.firebase.ui.database.FirebaseRecyclerOptions;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Query;
import com.google.firebase.database.ValueEventListener;
import com.mancj.materialsearchbar.MaterialSearchBar;
import com.orderfood.teknomerkez.orderfood.Interface.ItemClickListener;
import com.orderfood.teknomerkez.orderfood.Model.Food;
import com.orderfood.teknomerkez.orderfood.ViewHolder.FoodViewHolder;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
import java.util.List;
public class FoodList extends AppCompatActivity {
RecyclerView recyclerView;
RecyclerView.LayoutManager layoutManager;
FirebaseDatabase database;
DatabaseReference foodList;
private final String REFERENCE = "Food";
private String FoodId = "FoodId";
String categoryID = "";
FirebaseRecyclerAdapter<Food, FoodViewHolder> adapter;
FirebaseRecyclerAdapter<Food, FoodViewHolder> searchAdapter;
List<String> suggestList = new ArrayList<>();
MaterialSearchBar materialSearchBar;
private String getCategoryId = "CategoryId";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_food_list);
//Firebase
database = FirebaseDatabase.getInstance();
foodList = database.getReference(REFERENCE);
recyclerView = findViewById(R.id.recycler_food);
recyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
//get intent
if (getIntent() != null)
categoryID = getIntent().getStringExtra(getCategoryId);
if (!categoryID.isEmpty() && categoryID != null) {
loadListFood(categoryID);
}
//material Search
materialSearch();
}
private void materialSearch() {
materialSearchBar = findViewById(R.id.searchBar);
materialSearchBar.setHint("Enter Your Food");
loadSuggest();
materialSearchBar.setLastSuggestions(suggestList);
materialSearchBar.setCardViewElevation(10);
materialSearchBar.addTextChangeListener(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) {
//when user type something, we will change suggestlist
List<String> suggest = new ArrayList<>();
for (String search : suggest) { // loop in suggest list
if (search.toLowerCase().contains(materialSearchBar.getText().toLowerCase())) {
suggest.add(search);
}
materialSearchBar.setLastSuggestions(suggest);
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
materialSearchBar.setOnSearchActionListener(new MaterialSearchBar.OnSearchActionListener() {
@Override
public void onSearchStateChanged(boolean enabled) {
//when search bar is close - restore original adapter
if (!enabled)
recyclerView.setAdapter(adapter);
}
@Override
public void onSearchConfirmed(CharSequence text) {
//when searhc finish
startSearch(text);
}
@Override
public void onButtonClicked(int buttonCode) {
}
});
}
private void loadSuggest() {
foodList.orderByChild("MenuId").equalTo(categoryID).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot postSnapShot : dataSnapshot.getChildren()){
Food item = postSnapShot.getValue(Food.class);
suggestList.add(item.getName());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
private void startSearch(CharSequence text) {
Query query = FirebaseDatabase.getInstance()
.getReference()
.child("Food")
.startAt(text.toString())
.limitToLast(50);
FirebaseRecyclerOptions<Food> options = new FirebaseRecyclerOptions.Builder<Food>().setQuery(query, Food.class).build();
searchAdapter = new FirebaseRecyclerAdapter<Food, FoodViewHolder>(options)
{
@NonNull
@Override
public FoodViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.food_item, parent,false);
return new FoodViewHolder(view);
}
@Override
protected void onBindViewHolder(@NonNull FoodViewHolder viewHolder, int position, @NonNull Food model) {
viewHolder.food_name.setText(model.getName());
Picasso.with(getBaseContext()).load(model.getImage())
.into(viewHolder.food_image);
final Food local = model;
viewHolder.setItemClickListener(new ItemClickListener() {
@Override
public void onClick(View view, int position, boolean isLongClick) {
Toast.makeText(FoodList.this, "" + local.getName(), Toast.LENGTH_SHORT).show();
//go food
Intent foodDetail = new Intent(FoodList.this, FoodDetail.class);
foodDetail.putExtra(FoodId, searchAdapter.getRef(position).getKey());
startActivity(foodDetail);
}
});
}
};
recyclerView.setAdapter(searchAdapter); //set adapter for recycler view is search result
}
private void loadListFood(String categoryID) {
Query query = FirebaseDatabase.getInstance()
.getReference()
.child("Food")
.child(categoryID);
FirebaseRecyclerOptions<Food> options = new FirebaseRecyclerOptions.Builder<Food>().setQuery(query,Food.class).build();
adapter = new FirebaseRecyclerAdapter<Food, FoodViewHolder>(options) {
@NonNull
@Override
public FoodViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.food_item, parent,false);
return new FoodViewHolder(view);
}
@Override
protected void onBindViewHolder(@NonNull FoodViewHolder viewHolder, int position, @NonNull Food model) {
viewHolder.food_name.setText(model.getName());
Log.d("TAG", model.getName());
Picasso.with(getBaseContext()).load(model.getImage())
.into(viewHolder.food_image);
final Food local = model;
viewHolder.setItemClickListener(new ItemClickListener() {
@Override
public void onClick(View view, int position, boolean isLongClick) {
Toast.makeText(FoodList.this, "" + local.getName(), Toast.LENGTH_SHORT).show();
//go food
Intent foodDetail = new Intent(FoodList.this, FoodDetail.class);
//foodDetail.putExtra("FoodId", adapter.getItem(position).getFoodId());
foodDetail.putExtra("FoodId", String.valueOf(position));
foodDetail.putExtra("CategoryID", adapter.getItem(position).getMenuId());
foodDetail.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(foodDetail);
}
});
}
};
Log.d("TAG", "" + adapter.getItemCount());
recyclerView.setAdapter(adapter);
}
@Override
protected void onStart(){
super.onStart();
adapter.startListening();
}
@Override
protected void onStop(){
super.onStop();
adapter.stopListening();
}
}