2016-06-01 13 views
0

私は自分のアプリケーションでrecyclerviewを実装しましたが、今ではAPIからデータを取得する必要がありますが、これを行う方法の良い例は見つかりません。私がAPIからデータを取得しようとするのは初めてです。本当にそれを行う方法はわかりません。JSONからrecyclerviewを読み込みます

APIは、このようにデータを提供します

ここ
{ 
    status: "OK" 
    code: 0 
    message: "" 
    results: [ 
    { 
    id: 0 
    slug: "data" 
    slug_franquicia: "data" 
    slug_categoria: "data" 
    }} 

uは、私は静的データを表示するために、現時点で6つのフィールドを持つコンストラクタを使用しています(私が使用するコンストラクタを私のコンストラクタを見ることができます)のデータを解析するために大きなものである:

ここ

私は、静的な情報でリストを埋める:

public class Empresas2 { 
private static Empresas[] empresas={ 
     new Empresas(R.drawable.activatuocio, "Activa tu ocio y di capacitados","Asociación sin ánimo de lucro que llena con ocio y talleres de formación en distintos ámbitos el tiempo de las personas con discapacidad intelectual. Confianza en si mismas, autonomía e integración.","Social", "El Ejido", true), 
new Empresas(R.drawable.agroservicios, "Agroservicios Manuel Garzón","Todo tipo de trabajos de tractor con la mejor máquina, los aperos más completos y la mayor maestría en la conducción y profesionalidad para que el rendimiento de los cultivos vaya a mucho más.","Agricultura", "El Ejido", true), 
new Empresas(R.drawable.alexgarcia, "Alex García", "Alex García: Cantautor Almeriense. Disfruta de su nuevo disco titulado ''Por amor al arte, hasta que se harten.''","Artistas", "El Ejido", true), 
new Empresas(R.drawable.allianz, "Allianz Seguros Jorge Berenguer","Trato personalizado en la gestión de dos grandes marcas como Allianz y sus seguros de particulares y empresas para autónomos, pymes y grandes firmas, y Solunion y sus seguros de crédito y recobro.", "Legal", "El Ejido", false), 
new Empresas(R.drawable.alteco, "Alteco", "Alteco Electricidad y Electrónica", "Profesionales", "El Ejido", true), 
new Empresas(R.drawable.aluminiosmanuel, "Aluminios Manuel Estévez", "Grandes profesionales, las primeras marcas del mercado, las innovaciones que aparecen en el sector, todo congregado en una empresa que se ha ganado su prestigio a base de clientes satisfechos.", "Profesionales", "Vícar", true), 
new Empresas(R.drawable.amalgama, "Amalgama Centro Musical", "Conocimiento, profesionalidad y un trato exclusivo es lo que nos diferencia en Amalgama, nuestra vida es la música, y eso transmitimos.", "Educación", "El Ejido", true),}; 



public static List<Empresas> getEmpresas() { 
    return Arrays.asList(empresas); 
} 


public static Empresas getCourseByPosition(int position) { 
    return empresas[position]; 
} 

そして、これは私が私のrecyclerviewで使うアダプタです:

public class EmpresasAdapter extends RecyclerView.Adapter<EmpresasAdapter.EmpresasViewHolder> 
    implements ItemClickListener{ 

private final Context context; 
private List<Empresas> items; 

public EmpresasAdapter(Context context, List<Empresas> items) { 
    this.context = context; 
    this.items = items; 
} 

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

@Override 
public EmpresasViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
    View v = LayoutInflater.from(viewGroup.getContext()) 
      .inflate(R.layout.empresa_card, viewGroup, false); 
    return new EmpresasViewHolder(v, this); 
} 

@Override 
public void onBindViewHolder(EmpresasViewHolder viewHolder, int i) { 
    // Item procesado actualmente 
    Empresas currentItem = items.get(i); 

    viewHolder.nombrep.setText(currentItem.getNombre()); 
    viewHolder.franquiciap.setText(currentItem.getModalidad()+" | "+currentItem.getFranquicia()); 
    // Cargar imagen 
    Glide.with(context) 
      .load(currentItem.getImagen()) 
      .into(viewHolder.imagenp); 
} 

@Override 
public void onItemClick(View view, int position) { 
    // Imagen a compartir entre transiciones 
    /* View sharedImage = view.findViewById(R.id.imagenp); 
    EmpresaDetalle.launch(
      (Activity) context, position, sharedImage);*/ 

    Empresas currentItem = items.get(position); 
    String nombre=currentItem.getNombre(); 
    String descripcion=currentItem.getDescripcionC(); 
    String franquicia=currentItem.getFranquicia(); 
    int imagen = currentItem.getImagen(); 
    View sharedImage = view.findViewById(R.id.imagenp); 
    Intent intent = new Intent(context, EmpresaDetalle.class); 
    intent.putExtra("nombre", nombre); 
    intent.putExtra("descripcion", descripcion); 
    intent.putExtra("franquicia", franquicia); 
    intent.putExtra("imagen",imagen); 
    context.startActivity(intent); 
} 

/** 
* View holder para reciclar elementos 
*/ 
public static class EmpresasViewHolder extends RecyclerView.ViewHolder 
     implements View.OnClickListener { 
    // Views para un curso 
    public ImageView imagenp; 
    public TextView nombrep; 

    public TextView franquiciap; 
    // Interfaz de comunicación 
    public ItemClickListener listener; 

    public EmpresasViewHolder(View v, ItemClickListener listener) { 
     super(v); 
     nombrep = (TextView) v.findViewById(R.id.nombrep); 

     franquiciap = (TextView) v.findViewById(R.id.Franquiciap); 


     imagenp = (ImageView) v.findViewById(R.id.imagenp); 
     v.setOnClickListener(this); 

     this.listener = listener; 
    } 

    @Override 
    public void onClick(View v) { 
     listener.onItemClick(v, getAdapterPosition()); 
    } 


}} 

interface ItemClickListener { 
void onItemClick(View view, int position);} 
+0

可能な重複JSONをJavaで解析する](http://stackoverflow.com/questions/2591098/how-to-parse-json-in-java) –

+0

また、JSON APIを持っているので、Retrofitを使用してみることもできます。 http://square.github.io/retrofit/ –

+0

OMFG!データを解析する方法については、この先生にお試しくださいhttp://www.androidhive.info/2012/01/android-json-parsing-tutorial/ –

答えて

2

あなたは、同じJSON構造を持つモデルを作成する必要があり、このライブラリを使用してGoogle Gson

を使用することができます。モデルが自動的に入力されます。変数をjsonキーとして呼び出すか、別の名前を使用する場合は@SerializedNameを使用する必要があります。ご例えば

JSON:

{ 
    status: "OK" 
    code: 0 
    message: "" 
    results: [ 
     { 
      id: 0 
      slug: "data" 
      slug_franquicia: "data" 
      slug_categoria: "data" 
     } 
} 

モデル:

class MyModel { 

    private String status; 
    private int code; 
    private String message; 
    private ArrayList<MySubModel> results = new ArrayList<>(); 
} 

class MySubModel { 

    private int id; 
    private String slug; 
    private String slug_franquicia; 

    @SerializedName("slug_categoria") // <- example SerializedName 
    private String slugCategoria; 
} 

今、あなたはGsonライブラリを使用して解析することができます:[どのようにの

MyModel model = gson.fromJson(jsonString, MyModel.class); 
+1

http://www.jsonschema2pojo.orgのようなツールを使用して自動的にモデルを生成することができます/ – Pablo

+0

本当に良い! ;) – lubilis

関連する問題