Android дооснащение 2 разбор изображений с textview

android json retrofit retrofit2 gson

811 просмотра

2 ответа

1 Репутация автора

Я пробовал: https://www.learn2crack.com/2016/02/recyclerview-json-parsing.html

Это работает, предположим, мне нужно показать imageviewвместе с textview. Как загрузить вид изображения:

package com.retro;

public class Android{

public String getFirstname() {
    return firstname;
}

public void setFirstname(String firstname) {
    this.firstname = firstname;
}

public String getLastname() {
    return lastname;
}

public void setLastname(String lastname) {
    this.lastname = lastname;
}

private String firstname;
private String lastname;
public String getImage() {
    return image;
}
public void setImage(String image) {
    image = image;
}
private String image;
}

Вот мой класс адаптера:

public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> {
private ArrayList<Android> names;

public DataAdapter(ArrayList<Android> first) {
    this.names = first;

}
@Override
public DataAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_item, viewGroup, false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(DataAdapter.ViewHolder viewHolder, int i) {

    viewHolder.song_title.setText(names.get(i).getFirstname());
    viewHolder.song_year.setText(names.get(i).getLastname());


}

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

public class ViewHolder extends RecyclerView.ViewHolder{
    public TextView song_title, song_year, song_author;
    public ImageView Image;

    public ViewHolder(View view) {
        super(view);
        song_title = (TextView) view.findViewById(R.id.first_name);
        song_year = (TextView) view.findViewById(R.id.last_name);
        Image=(ImageView) view.findViewById(R.id.img_android);
    }
}
}

Ответ Json:

public class JSONResponse {
private Android[] users;

public Android[] getNames() {
    return users;
}
}

Интерфейс запроса:

public interface RequestInterface {
@GET("sampleJson.php")
Call<JSONResponse> getJSON();
}

Вот мой MainActivity:

public class MainActivity extends AppCompatActivity {

private RecyclerView recyclerView;
private ArrayList<Android> data;
private DataAdapter adapter;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initViews();
}
private void initViews(){
    recyclerView = (RecyclerView)findViewById(R.id.card_recycler_view);
    recyclerView.setHasFixedSize(true);
    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
    recyclerView.setLayoutManager(layoutManager);
    loadJSON();
}
private void loadJSON(){
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("URRRRRRRRRRRLLLLL")
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    RequestInterface request = retrofit.create(RequestInterface.class);
    Call<JSONResponse> call = request.getJSON();
    call.enqueue(new Callback<JSONResponse>() {
        @Override
        public void onResponse(Call<JSONResponse> call, Response<JSONResponse> response) {
            JSONResponse jsonResponse = response.body();
            data = new ArrayList<>(Arrays.asList(jsonResponse.getNames()));
            adapter = new DataAdapter(data);
            recyclerView.setAdapter(adapter);
        }

        @Override
        public void onFailure(Call<JSONResponse> call, Throwable t) {
            Log.d("Error",t.getMessage());
        }
    });
}
}

Вот мой row_layout:

<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
card_view:cardCornerRadius="5dp">
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:orientation="horizontal">
  <ImageView
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:id="@+id/img_android"
    android:src="@drawable/ic_launcher"
  />
<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="10dip"
    android:layout_gravity="center"
    android:orientation="vertical">
   <TextView
     android:id="@+id/first_name"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="New Text"
     android:textColor="#000" />
 <TextView
     android:id="@+id/last_name"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="New Text"
     android:textColor="#000" />
</LinearLayout>

Основной макет:

<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"
tools:context="com.retro.MainActivity">

<android.support.v7.widget.RecyclerView
    android:id="@+id/card_recycler_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scrollbars="vertical" />

Я попытался использовать Picasso: Не уверен, но изображение не загружается Picasso.with (context) .load (android_versions.get (i) .getAndroid_image_url ()). Resize (120, 60) .into (viewHolder.img_android);

Любые идеи, ребята ... Пожалуйста, дайте мне знать

Автор: Pentium Источник Размещён: 19.07.2016 07:06

Ответы (2)


1 плюс

2339 Репутация автора

Вы не можете поместить свой просмотр изображений внутри текстового представления, что вы сделали в своем row_layout . Вместо того, чтобы поместить их обоих в LinearLayoutили RelativeLayout .

И в вашем ViewHolder в классе адаптера ImageView должен быть объявлен первым.

Автор: Mithun Sarker Shuvro Размещён: 19.07.2016 08:05

0 плюса

70 Репутация автора

Вы можете использовать Picasso для загрузки изображения. Добавьте эту строку в свой Gradle, compile'com.squareup.picasso:picasso:2.3.2'чтобы загрузить библиотеку в свой проект, или вы можете увидеть их официальную документацию здесь.

Вы можете изменить свой код как:

 @Override
    public void onBindViewHolder(DataAdapter.ViewHolder viewHolder, int i) {

        viewHolder.song_title.setText(names.get(i).getFirstname());
        viewHolder.song_year.setText(names.get(i).getLastname());
        Picasso.with(context).load(names.get(i)
                .getImage())
                .resize(250,200) //to resize Image
                .into(viewHolder.Image);


    }

Это работает нормально на моих проектах

Автор: Hemraj Rijal Размещён: 14.07.2017 07:50
Вопросы из категории :
32x32