【已解决】 从服务器请求的数据无法传递给RecyclerView适配器
按照Android开发基础-网络编程(第一部分)P6处理请求到的数据编写的代码(稍有改动),不同之处是在fragment中进行的,问题出在给RecyclerView适配器传递数据时显示null object reference,从服务器得到的数据打印出来是对的,主要代码如下:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
btn_send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "点击了按钮");
sendResquestWithHttpURLConnection();
}
});
}
private void sendResquestWithHttpURLConnection() {
new Thread(new Runnable() {
@Override
public void run() {
HttpURLConnection connection = null;
BufferedReader bufferedReader = null;
try {
URL url = new URL("http://192.168.1.7:9102/get/text");
// URL url = new URL("https://api.sunofbeach.net/shop/api/discovery/categories");
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(8000);
connection.setReadTimeout(8000);
connection.connect();
Log.d(TAG, "开始连接");
int responseCode = connection.getResponseCode();
if (responseCode == 200) {
Map<String, List<String>> headerFields = connection.getHeaderFields();
Set<Map.Entry<String, List<String>>> entries = headerFields.entrySet();
for (Map.Entry<String, List<String>> entry : entries) {
System.out.println(entry.getKey() + " === " + entry.getValue());
}
InputStream inputStream = connection.getInputStream();
bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
//在此处验证过bufferedReader 中的数据,无误
String json=bufferedReader.readLine();
Gson gson=new Gson();
GetTextItem getTextItem= gson.fromJson(json,GetTextItem.class);
updateUI(getTextItem);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (connection != null) {
connection.disconnect();
}
}
}
}).start();
}
private void updateUI(final GetTextItem getTextItem) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
Log.d(TAG, "准备刷新UI");
mAdapter.setData(getTextItem); //bug定位在这里,与视频的区别主要在于GetTextItem多了final修饰,没法去掉
}
});
}
您的每一个用心回答,都会让这个世界变得更美好一些!