2016-07-19 31 views
0

Ich habe versucht: https://www.learn2crack.com/2016/02/recyclerview-json-parsing.htmlAndroid Nachrüst-2-Parsing imagview mit Textview

Sein Arbeits, nehme ich an imageview zusammen mit textview zeigen müssen. Wie die Bildansicht laden:

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; 
} 

Hier ist meine Adapter Klasse:

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 Antwort:

public class JSONResponse { 
private Android[] users; 

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

Anfrage Schnittstelle:

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

Hier ist mein HauptAktivität:

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()); 
     } 
    }); 
} 
} 

Hier ist meine 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> 

Haupt Layout:

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

Ich habe versucht, picasso mit: Nicht sicher aber nichtImageview LadenPicasso.mit (Kontext) .load (android_versions.get (i) .getAndroid_image_url()). Resize (120, 60) .into (viewHolder.img_android);

Irgendwelche Ideen Jungs ... mich wissen Bitte lassen

Antwort

1

Sie nicht Ihre Imageview innen in einem Textansicht setzen können, was Sie in Ihrem row_layout tat. Anstatt Sie beide in eine LinearLayout oder RelativeLayout.

Und in Ihrem ViewHolder in der Adapterklasse sollte das ImageView zuerst deklariert werden.

0

Sie können Picasso verwenden, um Image zu laden. Fügen Sie diese Zeile in Ihrer Gradle compile'com.squareup.picasso:picasso:2.3.2' Bibliothek in Ihr Projekt herunterladen oder Sie können ihre offizielle Dokumentation here

Sie können den Code ändern sehen wie:

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


    } 

Dies funktioniert gut auf meine Projekte