我正在执行2个 HTTP 请求,一个接一个。
第一个获取整数数组,第二个使用每个整数,以创建新的 HTTP 请求,并从该结果中创建一个对象。当代码到达第二个 HTTP 请求时,它失败并出现pthread创建错误,我不知道这是什么。
这是我的活动-
public class MainActivity extends AppCompatActivity {
private RecyclerView newsRecyclerView;
private NewsAdapter newsAdapter;
private List<NewsItem> newsItemList;
private LinearLayoutManager linearLayoutManager;
private HttpRequest httpRequest;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
networkRequest();
}
private void networkRequest() {
httpRequest = new HttpRequest(this, Global.TOP_STORIES, new HttpRequest.OnHttpCompleteListener() {
@Override
public void onComplete(String response) {
createNewsList(response);
}
@Override
public void onError(String error) {
Log.i("error", error);
}
});
httpRequest.request();
}
private void createNewsList(String response) {
final Gson gson = new Gson();
int[] topStories = gson.fromJson(response, int[].class);
for (int i = 0; i < topStories.length; i++) {
String url = Global.BASE_NEWS_URL + topStories[i] + Global.NEWS_ENDPOINT;
httpRequest = new HttpRequest(this, url, new HttpRequest.OnHttpCompleteListener() {
@Override
public void onComplete(String response) {
NewsItem newsItem = gson.fromJson(response, NewsItem.class);
if (newsItem != null) {
newsItemList.add(newsItem);
}
Log.i("number of news items", "number of newsItems " + newsItemList.size());
}
@Override
public void onError(String error) {
Log.i("create list error", error);
}
});
httpRequest.request();
}
}
private void initViews() {
newsRecyclerView = findViewById(R.id.newsRecyclerView);
newsItemList = new ArrayList<>();
linearLayoutManager = new LinearLayoutManager(this);
newsAdapter = new NewsAdapter(newsItemList, new NewsAdapter.OnNewsListItemClicked() {
@Override
public void onNewsItemClicked(int position) {
}
});
newsRecyclerView.setAdapter(newsAdapter);
newsRecyclerView.setHasFixedSize(true);
newsRecyclerView.setLayoutManager(linearLayoutManager);
}
}
这是我的HttpRequest类-
public class HttpRequest {
private Context context;
private String url;
private OnHttpCompleteListener onHttpCompleteListener;
private RequestQueue queue;
public HttpRequest(Context context, String url, OnHttpCompleteListener onHttpCompleteListener) {
this.context = context;
this.url = url;
this.onHttpCompleteListener = onHttpCompleteListener;
queue = Volley.newRequestQueue(context);
}
public void request(){
RequestQueue queue = Volley.newRequestQueue(context);
StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
if (response != null){
onHttpCompleteListener.onComplete(response);
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
onHttpCompleteListener.onError(error.getMessage());
}
});
queue.add(stringRequest);
}
public interface OnHttpCompleteListener{
void onComplete(String response);
void onError(String error);
}
}
当因pthread问题而失败时,它将转到HttpRequest类中的下一行-
RequestQueue queue = Volley.newRequestQueue(context);
我正在使用排球的文档,我真的不知道出了什么问题。