如何在这段代码中将方法initData()传递url给对象Book?从服务器上Url解析。json
public class MainActivity extends AppCompatActivity {
public static String LOG_TAG = "my_log";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setHasFixedSize(true);
RecyclerAdapter adapter = new RecyclerAdapter(initData());
recyclerView.setAdapter(adapter);
// new ParseTask().execute();
}
private class ParseTask extends AsyncTask<Void, Void, String> {
HttpURLConnection urlConnection = null;
BufferedReader reader = null;
String resultJson = "";
@Override
protected String doInBackground(Void... params) {
// получаем данные с внешнего ресурса
try {
URL url = new URL("http://*********/todbook/booklist.json");
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.connect();
InputStream inputStream = urlConnection.getInputStream();
StringBuffer buffer = new StringBuffer();
reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
buffer.append(line);
}
resultJson = buffer.toString();
} catch (Exception e) {
e.printStackTrace();
}
return resultJson;
}
@Override
protected void onPostExecute(String strJson) {
super.onPostExecute(strJson);
// выводим целиком полученную json-строку
Log.d(LOG_TAG, strJson);
JSONObject dataJsonObj = null;
try {
dataJsonObj = new JSONObject(strJson);
JSONArray books = dataJsonObj.getJSONArray("books");
// 2. перебираем и выводим url обложек
for (int i = 0; i < books.length(); i++) {
JSONObject book = books.getJSONObject(i);
String url_book = book.getString("coverUrl");
Log.d(LOG_TAG, "coverUrl: " + url_book);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
/**
* массив для показа обложек книг
*/
private List<Book> initData() {
ArrayList<Book> books1 = new ArrayList<>();
new ParseTask().execute();
books1.add(new Book("wwww"));
books1.add(new Book("wwww"));
books1.add(new Book("wwww"));
return books1;
}
}
您需要编写一个接口
Callback,它将成为AsyncTask'th的观察者AsyncTask拉方法Calback'a传递
Callback给构造函数并调用execute()