Извлечь путь для загрузки полного изображения Recyclerview Cardview - PullRequest
0 голосов
/ 08 января 2020

Приведенный ниже код извлекает изображение из БД и отображает его в обзоре переработчика. Код для полного изображения не отображает полное изображение. Я подозреваю, что не могу получить точный URL для разбора на FullImageViewe. java.

Как проанализировать кликнутое изображение / текстовую ссылку, чтобы показать полное изображение здесь? Все зависимости в порядке.

Recyclerview Cardview

Full Image View

Основная деятельность

package com.ny.fetchallimages;

import android.content.Intent;
import android.os.Bundle;
import org.json.JSONArray;
import java.util.ArrayList;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonArrayRequest;
import com.android.volley.toolbox.Volley;
import java.util.List;

import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.android.volley.RequestQueue;
import com.android.volley.Response;
import org.json.JSONException;
import org.json.JSONObject;

public class MainActivity extends AppCompatActivity {

    List<DataAdapter> ListOfdataAdapter;

    RecyclerView recyclerView;

    String HTTP_JSON_URL = "http://ny.com/uploaddownload/fetchallimages.php";

    String Image_URL_JSON = "image_data";

    String Image_Name_JSON = "image_tag";

    String Image_Time_JSON = "time";

    JsonArrayRequest RequestOfJSonArray ;

    RequestQueue requestQueue ;

    View view ;

    int RecyclerViewItemPosition ;

    RecyclerView.LayoutManager layoutManagerOfrecyclerView;

    RecyclerView.Adapter recyclerViewadapter;

    ArrayList<String> ImageTitleNameArrayListForClick;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        ImageTitleNameArrayListForClick = new ArrayList<>();

        ListOfdataAdapter = new ArrayList<>();

        recyclerView = (RecyclerView) findViewById(R.id.recyclerview1);

        recyclerView.setHasFixedSize(true);

        layoutManagerOfrecyclerView = new LinearLayoutManager(this);

        recyclerView.setLayoutManager(layoutManagerOfrecyclerView);

        JSON_HTTP_CALL();

        // Implementing Click Listener on RecyclerView.
        recyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {

            GestureDetector gestureDetector = new GestureDetector(MainActivity.this, new GestureDetector.SimpleOnGestureListener() {

                @Override public boolean onSingleTapUp(MotionEvent motionEvent) {

                    return true;
                }

            });
            @Override
            public boolean onInterceptTouchEvent(RecyclerView Recyclerview, MotionEvent motionEvent) {
                view = Recyclerview.findChildViewUnder(motionEvent.getX(), motionEvent.getY());
                if(view != null && gestureDetector.onTouchEvent(motionEvent)) {
                    //Getting RecyclerView Clicked Item value.
                       RecyclerViewItemPosition = Recyclerview.getChildAdapterPosition(view);
                       Intent intent = new Intent(MainActivity.this, FullImageViewer.class );
                       intent.putExtra("img", "HTTP_JSON_URL");
                       startActivity(intent);

                }
                return false;
            }
            @Override
            public void onTouchEvent(RecyclerView Recyclerview, MotionEvent motionEvent) {

            }
            @Override
            public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
            }
        });
    }
    public void JSON_HTTP_CALL(){
        RequestOfJSonArray = new JsonArrayRequest(HTTP_JSON_URL,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        ParseJSonResponse(response);
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {

                    }
                });
        requestQueue = Volley.newRequestQueue(MainActivity.this);
        requestQueue.add(RequestOfJSonArray);
    }
    public void ParseJSonResponse(JSONArray array){
        for(int i = 0; i<array.length(); i++) {

            DataAdapter GetDataAdapter2 = new DataAdapter();

            JSONObject json = null;
            try {
                json = array.getJSONObject(i);

                GetDataAdapter2.setImageTitle(json.getString(Image_URL_JSON));
                // Adding image title name in array to display on RecyclerView click event.
                ImageTitleNameArrayListForClick.add(json.getString(Image_URL_JSON));
                GetDataAdapter2.setImageUrl(json.getString(Image_URL_JSON));
            } catch (JSONException e) {
                e.printStackTrace();
            }
            ListOfdataAdapter.add(GetDataAdapter2);
        }
        recyclerViewadapter = new RecyclerViewAdapter(ListOfdataAdapter, this);
        recyclerView.setAdapter(recyclerViewadapter);
    }
}

Fullimageviewer

package com.ny.fetchallimages;

import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import com.bumptech.glide.Glide;
import com.bumptech.glide.request.target.CustomTarget;
import com.bumptech.glide.request.transition.Transition;

public class FullImageViewer extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fullimageviewer);
        final ImageView img = findViewById(R.id.img);
        String url = (String) getIntent().getSerializableExtra("img");

        //Glide library to load image from URL
        Glide.with(getApplicationContext())
                .asBitmap()
                .load(url)
                .into(new CustomTarget<Bitmap>() {
                    @Override
                    public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
                        img.setImageBitmap(resource);
                       }

                    @Override
                    public void onLoadCleared(@Nullable Drawable placeholder) {

                    }
                });
    }
}

Fullimageviewer. xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="5dp"
    android:background="@color/color1">

    <ImageView
        android:id="@+id/img"
        android:padding="5dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:adjustViewBounds="true" />
</RelativeLayout>

Ответы [ 2 ]

0 голосов
/ 08 января 2020

Спасибо, Амитой. Посмотрит на вашу проблему, хотя я не знаком с IOS XCode. и я получил это наконец. Спасибо @Mouaad Abdelghafour AITALI за указание в правильном направлении. Ответ заключен в правильном URL-адресе позиции вьюблера. RecyclerViewItemPosition = Recyclerview.getChildAdapterPosition(view); Intent intent = new Intent(MainActivity.this, FullImageViewer.class ); intent.putExtra("img", RecyclerViewItemPosition = Recyclerview.getChildAdapterPosition()); startActivity(intent);

0 голосов
/ 08 января 2020

Мне кажется, я знаю, что здесь происходит. Ссылка, которую вы использовали "http://ny.com/uploaddownload/fetchallimages.php", имеет формат HTTP, а не https, и где-то внизу Google прекратил поддерживать HTTP в своих приложениях, пока вы не укажете это в манифесте приложения. Это можно сделать с помощью этого:

android:usesCleartextTraffic="true"

в вашем android манифесте примерно так:

AndroidManifest. xml:

<manifest>
<application

        android:allowBackup="true"
        android:icon="@drawable/appicon"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"
        android:usesCleartextTraffic="true">
</manifest>

У меня тоже было эта проблема в будущем, когда я разрабатывал мое приложение и нашел это решение здесь у него также есть другое решение, более безопасное, но я не могу заставить его работать.

Надеюсь, я помог. (Кстати, у меня тоже есть вопрос, и вы, кажется, достаточно опытны, поэтому, пожалуйста, посмотрите на него .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...