【发布时间】:2018-02-09 16:18:10
【问题描述】:
我在 Android 中获取 Jason 响应方面的经验并不丰富。我的问题是如何解析来自这个 API https://api.the-odds-api.com/v2/odds/?sport=UPCOMING&region=uk&apiKey=e3b70c1881a5d9eec34e4cb256844874 的 JSON。基本上为了介绍,我需要活动的参与者。然后我想创建一个匹配列表并从中创建RecyclerView。
这是我与 API 通信的类
private class JsonTask extends AsyncTask<String, String, String> implements OnVisibleCallback{
protected String doInBackground(String... params) {
HttpURLConnection connection = null;
BufferedReader reader = null;
try {
URL url = new URL(params[0]);
connection = (HttpURLConnection) url.openConnection();
connection.connect();
InputStream stream = connection.getInputStream();
reader = new BufferedReader(new InputStreamReader(stream));
StringBuffer buffer = new StringBuffer();
String line = "";
while ((line = reader.readLine()) != null) {
buffer.append(line+"\n");
Log.d("Response: ", "> " + line); //here u ll get whole response...... :-)
}
return buffer.toString();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (connection != null) {
connection.disconnect();
}
try {
if (reader != null) {
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onPostExecute(String response) {
super.onPostExecute(response);
Log.d("json",response);
try {
JSONObject jObject = new JSONObject(response);
String data = jObject.getString("data");
JSONObject objData = new JSONObject(data);
String events = objData.getString("events");
JSONObject eventObj = new JSONObject(events);
int numberOfEvents = eventObj.length();
List<Match> matchList= Arrays.asList(new Match("Juventus","Fiorentina"));
counter = 1;
Log.d("Counter_Ticket_Fragment", String.valueOf(counter));
mAdapter = new MatchAdapter(matchList,counter);
changeVisible();
mAdapter.setCallback(this);
recyclerView.setAdapter(mAdapter);
recyclerView.setItemAnimator(new DefaultItemAnimator());
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void changeVisible() {
if(mAdapter.getItemCount()>0){
noMatch.setVisibility(View.GONE);
}
else{
noMatch.setVisibility(View.VISIBLE);
}
}
}
不知何故,我参加了活动,但不知道如何进行。我需要一些事件,因为我想创建尽可能多的 Match.class(String homeTeam, String awayTeam) 对象并将其传递给回收视图。我正在这个 JsonTask 上执行此操作,我认为这确实不是最好的方法。JsonTask 被称为 OnCreateView 的 Fragment。
这是 Match.class
public class Match {
private String team_home;
private String team_away;
public Match(String team_home, String team_away){
this.team_home = team_home;
this.team_away = team_away;
}
public String getHomeTeam() {
return team_home;
}
public String getAwayTeam() {
return team_away;
}
}
这是 MatchAdapter
public class MatchAdapter extends RecyclerView.Adapter<MatchAdapter.MyViewHolder> {
private List<Match> matchList;
private Context context;
private int counter;
private static SharedPreferences prefs;
private OnVisibleCallback callback;
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView team_home, team_away;
public View v;
public MyViewHolder(View v) {
super(v);
this.v = v;
team_home = (TextView) v.findViewById(R.id.team_home);
team_away = (TextView) v.findViewById(R.id.team_away);
context = v.getContext();
}
}
public MatchAdapter(List<Match> matchList, int counter) {
this.matchList = matchList;
this.counter = counter;
}
public void setCallback(OnVisibleCallback callback) {
this.callback = callback;
}
@Override
public MatchAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.recycler_view_matches_row, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(final MatchAdapter.MyViewHolder holder, final int position) {
final Match match = matchList.get(position);
holder.team_home.setText(match.getHomeTeam());
holder.team_away.setText(match.getAwayTeam());
}
@Override
public int getItemCount() {
return matchList.size();
}
}
【问题讨论】:
-
为 json 创建 POJO 类并使用改造 2 进行 API 调用
标签: android json android-recyclerview