2021.06.30 - [안드로이드] - [안드로이드] 내가 선택한 색으로 배경색 변경하는 방법
2021.06.28 - [안드로이드] - [안드로이드]정해진 시간에 알람 울리는 방법 Notification TimePicker
이번 시간에는 api를 호출해서 이미지를 리스트로 보여주는 방법을 알아보겠습니다.
api를 호출할 곳은 무료이미지를 제공해주는 pixabay입니다.
1. 계정을 생성한 뒤에 https://pixabay.com/api/docs/ 로 들어갑니다.
2. search images 를 클릭하면 바로 아래 화면이 보입니다.
key값에 본인의 api key 값이 보일 것입니다.
3. 아래로 스크롤을 내리면 example 이 보이며 그 파란색으로 쓰인 url를 호출하면
json형태의 데이터를 받을 수 있습니다.
이제 직접 데이터를 호출하고, 앱에서 리스트 형태로 보여지는 방법을 알아보겠습니다.
implementation 'com.android.volley:volley:1.2.0'
implementation 'com.squareup.picasso:picasso:2.5.2'
implementation 'androidx.recyclerview:recyclerview:1.2.1'
implementation 'androidx.cardview:cardview:1.0.0'
public class ExamItem {
private String imageUrl;
public ExamItem(String imageUrl) {
this.imageUrl = imageUrl;
}
public String getImageUrl() {
return imageUrl;
}
}
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
app:cardCornerRadius="8dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<ImageView
android:id="@+id/image_view"
android:layout_width="match_parent"
android:layout_height="200dp"
android:src="@mipmap/ic_launcher" />
</LinearLayout>
</androidx.cardview.widget.CardView>
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.recyclerview.widget.RecyclerView;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
public class ExamAdapter extends RecyclerView.Adapter<ExamAdapter.ExampleViewHoler>{
private Context context;
private ArrayList<ExamItem> examItemList = new ArrayList<>();
public ExamAdapter() {
}
public ExamAdapter(Context context, ArrayList<ExamItem> examItemList) {
this.context = context;
this.examItemList = examItemList;
}
@Override
public ExampleViewHoler onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(context).inflate(R.layout.item, parent, false);
return new ExampleViewHoler(v);
}
@Override
public void onBindViewHolder(ExampleViewHoler holder, int position) {
ExamItem currentItem = examItemList.get(position);
String imageurl = currentItem.getImageUrl();
Picasso.with(context).load(imageurl).fit().centerInside().into(holder.imageView);
}
@Override
public int getItemCount() {
return examItemList.size();
}
public void removeAllItem(){
examItemList.clear();
}
public class ExampleViewHoler extends RecyclerView.ViewHolder{
public ImageView imageView;
public ExampleViewHoler(View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.image_view);
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<EditText
android:id="@+id/search_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="검색어를 입력하세요"
/>
<Button
android:id="@+id/search_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="검색"
/>
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:background="@android:color/darker_gray"/>
</LinearLayout>
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity{
private RecyclerView recyclerView;
private ExamAdapter adapter;
private ArrayList<ExamItem> examList;
private RequestQueue requestQueue;
private EditText search_text; //검색어
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
search_text = findViewById(R.id.search_text);
Button search_btn = findViewById(R.id.search_btn);
search_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
adapter.removeAllItem();
String search_word = "";
search_word = search_text.getText().toString();
parseJSON(search_word);
}
});
recyclerView = findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
examList = new ArrayList<>();
adapter = new ExamAdapter();
recyclerView.setAdapter(adapter);
requestQueue = Volley.newRequestQueue(this);
}
private void parseJSON(String search_word){
String apiKey = "Your API key";
String url = "https://pixabay.com/api/?key=" + apiKey + "&q=" + search_word + "&image_type=photo";
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray jsonArray = response.getJSONArray("hits");
for(int i = 0; i < jsonArray.length(); i++){
JSONObject hit = jsonArray.getJSONObject(i);
String imageUrl = hit.getString("webformatURL");
examList.add(new ExamItem(imageUrl));
}
adapter = new ExamAdapter(MainActivity.this, examList);
recyclerView.setAdapter(adapter);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
requestQueue.add(request);
}
}
맘에 드셨다면 공감부탁드려요문의 댓글 환영합니다. |
[안드로이드] 버튼 누르면 효과음(SoundPool) 나오게 하는 방법 (1) | 2021.07.23 |
---|---|
[안드로이드] 이미지 리스트 다운로드하는 방법 DownloadManager (0) | 2021.07.13 |
[안드로이드] 내가 선택한 색으로 배경색 변경하는 방법 (0) | 2021.06.30 |
[안드로이드]정해진 시간에 알람 울리는 방법 Notification TimePicker (16) | 2021.06.28 |
[안드로이드]업비트 api(Java)를 사용해서 자산 리스트 조회 (0) | 2021.06.20 |
댓글 영역