Android改造2使用textview解析imageview

时间:2016-07-19 07:07:00

标签: android json retrofit retrofit2 gson

我试过了:https://www.learn2crack.com/2016/02/recyclerview-json-parsing.html

它的工作,假设我需要显示imageviewtextview。如何加载图像视图:

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" />

我尝试使用毕加索:不确定但是imageview没有加载 Picasso.with(context).load(android_versions.get(i).getAndroid_image_url())。resize(120,60).into(viewHolder.img_android);

任何想法的人......请让我知道

2 个答案:

答案 0 :(得分:1)

您不能将您的imageview放在文本视图中,这是您在row_layout中所做的。而不是将它们都放在LinearLayoutRelativeLayout中。

在适配器类的ViewHolder中,应首先声明ImageView。

答案 1 :(得分:0)

您可以使用Picasso加载图像。 在Gradle compile'com.squareup.picasso:picasso:2.3.2'中添加此行,将库下载到您的项目中,或者您可以看到他们的官方文档here

您可以将代码修改为:

 @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);


    }

这在我的项目中运作良好