как получить изображения из базы данных, используя модификацию 2 - PullRequest
0 голосов
/ 01 июня 2019

Привет, я новичок в Retrofit Framework для Android.Я мог бы получить ответы JSON от служб REST, используя его, но я не знаю, как получить изображение с помощью retrofit2.Я пытаюсь получить изображение в программе повторного просмотра из базы данных

Код находится здесь:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_product);
    Intent intent = getIntent();
    parent = intent.getStringExtra("Parent");
    child = intent.getStringExtra("Child");
    Toast.makeText(this, parent+child, Toast.LENGTH_SHORT).show();
    //init firebase
    //load menu
    recycler_menu =(RecyclerView)findViewById(R.id.recycler_view);
    apiInterface = 
    ApiClient.getRetrofit().create(ApiInterface.class);
    recycler_menu.setLayoutManager(new GridLayoutManager(this, 2));
    recycler_menu.setHasFixedSize(true);

    mUploads = new ArrayList<>();
    loadMenu();

   }
     private void loadMenu(){

     Toast.makeText(Product.this, "Hello", 
     Toast.LENGTH_SHORT).show();
     Call<Upload> call = apiInterface.performProduct(parent,child);
     call.enqueue(new Callback<Upload>() {
         @Override
         public void onResponse(Call<Upload> call, Response<Upload> 
        response) {
             Toast.makeText(Product.this, "Hello", Toast.LENGTH_SHORT).show();
             mAdapter = new ImageAdapter(Product.this, mUploads);
             mRecyclerView.setAdapter(mAdapter);
         }
         @Override
         public void onFailure(Call<Upload> call, Throwable t) {

         }
     });
 }}

ImageAdapter.java.

public ImageAdapter(Context context, List<Upload> uploads) {
    mContext = context;
    mUploads = uploads;
}

@Override
public ImageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(mContext).inflate(R.layout.image_item, parent, false);
    return new ImageViewHolder(v);
}

@Override
public void onBindViewHolder(ImageViewHolder holder, int position) {
    Upload uploadCurrent = mUploads.get(position);
    holder.textViewName.setText(uploadCurrent.getImgName());
    holder.textViewPrice.setText(uploadCurrent.getPrice());
    Picasso.get()
            .load(uploadCurrent.getImgUrl())
            .placeholder(R.mipmap.ic_launcher)
            .fit()
            .centerCrop()
            .into(holder.imageView);
    //holder.collection.setText(uploadCurrent.getmRadioGroup());
}

@Override
public int getItemCount() {
    return mUploads.size();
}

public class ImageViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener,
        View.OnCreateContextMenuListener {
    public TextView textViewName;
    public TextView textViewPrice;
    public ImageView imageView;


    public ImageViewHolder(View itemView) {
        super(itemView);

        textViewName = itemView.findViewById(R.id.menu_name);
        textViewPrice = itemView.findViewById(R.id.menu_price);
        imageView = itemView.findViewById(R.id.menu_price);

        itemView.setOnClickListener(this);
        itemView.setOnCreateContextMenuListener(this);
    }

    @Override
    public void onClick(View v) {
        if (mListener != null) {
            int position = getAdapterPosition();
            if (position != RecyclerView.NO_POSITION) {
                mListener.onItemClick(position);
            }
        }
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        menu.setHeaderTitle("Select Action");
        MenuItem doWhatever = menu.add(Menu.NONE, 1, 1, "Do whatever");
        MenuItem delete = menu.add(Menu.NONE, 2, 2, "Delete");
    }

}

public interface OnItemClickListener {
    void onItemClick(int position);
}

public void setOnItemClickListener(OnItemClickListener listener) {
    mListener = listener;
}

Upload.class

public class Upload {
public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

@SerializedName("id")
private String id;
@SerializedName("image")
private String imgName;
@SerializedName("imgUrl")
private String imgUrl;
@SerializedName("price")
private String price;
@SerializedName("description")
private String Description;
@SerializedName("response")
private String Response;


public  String getResponse(){
    return Response;
}

public Upload() {
}

public Upload(String id,String imgName, String imgUrl, String price, String Description) {
    this.id = id;
    this.imgName = imgName;
    this.imgUrl = imgUrl;
    this.price = price;
    this.Description = Description;
}

public String getImgName() {
    return imgName;
}

public void setImgName(String imgName) {
    this.imgName = imgName;
}

public String getImgUrl() {
    return imgUrl;
}

public void setImgUrl(String imgUrl) {
    this.imgUrl = imgUrl;
}

public String getDescription() {
    return Description;
}

public void setDescription(String Description) {
    this.Description = Description;
}
public String getPrice() {
    return price;
}

public void setPrice(String price) {
    this.price = price;
}

}

Файл PHP:

 <?php include ("conn.php");
 $type = $_GET["parent"];
 $ttype = $_GET["child"];
 $sth = $conn->prepare("SELECT * from product where type='$type' && 
 s_type='$ttype'");
 $sth->execute();
 While ($data = $sth->fetch(PDO::FETCH_ASSOC)){
 $name = $data['name']; 
 $id = $data['id'];
 $des = $data['description'];
 $price = $data['price'];
 $image = $data['image'];
 $status = "ok";
 echo 
 json_encode(array("response"=>$status,
 "img"=>$image,"name"=>$name,
 "id"=>$id,"description"=>$des,"price"=>$price));
  }?>

этот код ничего не делает, пустой экран выводится

Ответы [ 2 ]

0 голосов
/ 01 июня 2019

От вашей конечной точки я получил следующий ответ

{"response":"ok","img":"greypant.jpg","name":"GreyPant","id":"1","description":"A very fine pant with great finishing.","price":"1500"}

Вы можете попробовать внести следующие изменения в ваш PHP-файл, чтобы получить полный путь к файлу (-ам) изображения.

<?php 
include ("conn.php");
$type = $_GET["parent"];
$ttype = $_GET["child"];
$sth = $conn->prepare("SELECT * from product where type='$type' && 
s_type='$ttype'");
$sth->execute();
While ($data = $sth->fetch(PDO::FETCH_ASSOC)){
    $name = $data['name']; 
    $id = $data['id'];
    $des = $data['description'];
    $price = $data['price'];
    $image = $data['image'];
    $status = "ok";
    echo json_encode(array("response"=>$status,
       "img"=> "http://yourdomain.com/{$image}",
       "name"=>$name,
       "id"=>$id,
       "description"=>$des,
       "price"=>$price));
   }
?>

замените http://yourdomain.com/ на полный путь к каталогу, в котором сохранено ваше изображение.Удачи!

0 голосов
/ 01 июня 2019

Вы отправляете пустой адаптер ArrayList на адаптер

посмотрите здесь В onCreate () вы назначаете mUploads = new ArrayList <> ();

тогда вы просто передаете mUploads в mAdapter = новый ImageAdapter (Product.this, mUploads);

код chnage из

 @Override
     public void onResponse(Call<Upload> call, Response<Upload> 
    response) {
         Toast.makeText(Product.this, "Hello", Toast.LENGTH_SHORT).show();
         mAdapter = new ImageAdapter(Product.this, mUploads);
         mRecyclerView.setAdapter(mAdapter);
     }

в

 @Override
     public void onResponse(Call<Upload> call, Response<Upload> 
    response) {
         Toast.makeText(Product.this, "Hello", Toast.LENGTH_SHORT).show();
         mUploads=responese.body();  //@ add this line
         mAdapter = new ImageAdapter(Product.this, mUploads);
         mRecyclerView.setAdapter(mAdapter);
     }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...