728x90
반응형
json형태의 api키를 가져와서 붙여주는데
final TextView textView = (TextView) findViewById(R.id.text);
// ...
// Instantiate the RequestQueue.
RequestQueue queue = Volley.newRequestQueue(this);
String url ="http://www.google.com";
// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// Display the first 500 characters of the response string.
textView.setText("Response is: "+ response.substring(0,500));
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
textView.setText("That didn't work!");
}
});
// Add the request to the RequestQueue.
queue.add(stringRequest);
안드로이드 스튜디오 예제에서
Volley를 사용하여 네트워크 데이터 전송 -> 간단한 요청보내기의 Java 샘플 코드를 NewsActivity에 함수로 만들어준다.
public void getNews() {
String url = "https://newsapi.org/v2/top-headlines?country=kr&apiKey=28d52abfe26f4f0488faff173822d17c";
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
//textView.setText("Response is: "+ response.substring(0,500));
Log.d("News",response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//textView.setText("That didn't work!");
}
});
// Add the request to the RequestQueue.
queue.add(stringRequest);
}
함수 이름은 getNews로 지었고
RequestQueue는 전역변수로 만들었다. ( + onCreate )
queue = Volley.newRequestQueue(this);
getNews();
이 getNews함수는
onCreate안에서 초기화하는 다음 구문에 실행하게 하면 된다.
adapter = new NewsAdapter(myDataset);
recyclerview.setAdapter(adapter);
그리고 원래 이 부분을 onResponse안에 넣어서 성공할때만 Adapter에 보낸다
Data
public class NewsData implements Serializable {
private String title;
private String urlToImage;
private String content;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getUrlToImage() {
return urlToImage;
}
public void setUrlToImage(String urlToImage) {
this.urlToImage = urlToImage;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
Serializable(직렬화)를 implements(상속)받은 NewsData class를 만들어 getter, setter해준다.
Adapter
private List<NewsData> newsDataset;
public NewsAdapter(List<NewsData> myDataset){
newsDataset = myDataset;
}
NewsData는 List형식이므로 Adapter에서도 바꿔준다.
Activity
public void getNews() {
String url = "https://newsapi.org/v2/top-headlines?country=kr&apiKey=28d52abfe26f4f0488faff173822d17c";
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("News",response);
try {
JSONObject jsonObj = new JSONObject(response);
JSONArray arrayArticles = jsonObj.getJSONArray("articles"); // articles라는 이름의 배열을 가져오기
//response -> NewsData에 분류
List<NewsData> news = new ArrayList<>();
for(int i = 0, j = arrayArticles.length(); i < j; i++){
JSONObject obj = arrayArticles.getJSONObject(i);
Log.d("News",obj.toString());
NewsData newsdata = new NewsData();
newsdata.setTitle( obj.getString("title"));
newsdata.setUrlToImage( obj.getString("urlToImage"));
newsdata.setContent(obj.getString("content"));
news.add(newsdata);
}
adapter = new NewsAdapter(news);
recyclerview.setAdapter(adapter);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
// Add the request to the RequestQueue.
queue.add(stringRequest);
}
getNews함수에 예외처리 에러가 발생해 try catch문으로 감싸주고
List형식으로 바꿨다
newsdata에서 필요한 부분만 set해서 가져온다
E/Volley: [797] BasicNetwork.performRequest: Unexpected response code 403 for
이라는 에러가 발생하는데
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("error","error!!!!!!!");
}
}){
@Override
public Map getHeaders() throws AuthFailureError{
Map params = new HashMap();
params.put("User-Agent", "Mozilla/5.0");
return params;
}
ErrorListener 안에 다음과 같이 작성하면 오류가 안나고 Log에서 News들이 잘 찍힌다...
반응형
'Android' 카테고리의 다른 글
[Android/Java] Adapter에서 클릭이벤트, 태그달기 (0) | 2022.01.15 |
---|---|
[Android/Java] JsonAPI 데이터 화면에 출력하기 (0) | 2022.01.14 |
[Android/Java] CardView, Json 사용하기 (0) | 2022.01.07 |
[Android/Java] RecyclerView & Adapter 사용 (0) | 2022.01.04 |
[Android/Java] Design lib (0) | 2022.01.04 |