Android 设置适配器时,ArrayList为零
这是我的活动:Android 设置适配器时,ArrayList为零,android,Android,这是我的活动: public class HomeTimelineActivity extends AppCompatActivity { private TwitterClient client; Context mContext; @BindView(R.id.rvTweets) RecyclerView rvTweets; List<Tweet> mTweets; @Override protected void
public class HomeTimelineActivity extends AppCompatActivity {
private TwitterClient client;
Context mContext;
@BindView(R.id.rvTweets)
RecyclerView rvTweets;
List<Tweet> mTweets;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home_timeline);
Butterknife.bind(this);
client = TwitterApplication.getRestClient();
populateTimeline();
}
private void populateTimeline() {
client.getHomeTimeline(new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, JSONArray jsonArray) {
Log.d("DEBUG", jsonArray.toString());
mTweets = new ArrayList<Tweet>();
for (int i = 0; i < jsonArray.length(); i++) {
try {
JSONObject jsonTweet = jsonArray.getJSONObject(i);
Tweet tweet = new Tweet();
tweet.setBody(jsonTweet.getString("text"));
tweet.setUid(jsonTweet.getLong("id"));
tweet.setCreateAt(jsonTweet.getString("created_at"));
JSONObject jsonUser = jsonTweet.getJSONObject("user");
User user = new User();
user.setName(jsonUser.getString("name"));
user.setUid(jsonUser.getLong("id"));
user.setScreenname(jsonUser.getString("screen_name"));
user.setProfileImageurl(jsonUser.getString("profile_image_url"));
tweet.setUser(user);
mTweets.add(tweet);
runOnUiThread(new Runnable() {
@Override
public void run() {
TweetAdapter adapter = new TweetAdapter(mContext, mTweets);
rvTweets.setAdapter(adapter);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(mContext);
rvTweets.setLayoutManager(layoutManager);
}
});
} catch (JSONException e) {
e.printStackTrace();
continue;
}
}
}
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONArray errorResponse) {
Log.d("DEBUT", errorResponse.toString());
}
});
}
}
但是,当我尝试设置适配器时,没有显示任何数据,应用程序立即停止。奇怪的是,Logcat是空白的,没有任何信息。它只是黑色的。Twitter的身份验证工作正常。
任何人都可以帮我解决这个问题。您需要遵循一些步骤来提高代码性能并使其启动和运行 您缺少的主要内容是在循环中的每次迭代之后设置mTweets。只有在填充整个列表后,才应在适配器中设置mTweets。接下来,您应该调用适配器notifyDataSetChanged() 以下是: 步骤1
// Class variable adapter...
private TweetAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home_timeline);
client = TwitterApplication.getRestClient();
// Initially pass null as the mTweets since you don't have any tweets right now...
adapter = new TweetAdapter(mContext, null);
rvTweets.setAdapter(adapter);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(mContext);
rvTweets.setLayoutManager(layoutManager);
populateTimeline();
}
步骤2
在TweetAdapter中,修改getItemCount方法以处理mTweets上的空检查。将新方法AddNewWeets添加到适配器
@Override
public int getItemCount() {
return (mTweets !=null) ? mTweets.size() : 0;
}
public void setNewTweets(List<Tweet> newTweetList) {
this.mTweets = newTweetList;
}
@覆盖
public int getItemCount(){
返回值(mTweets!=null)?mTweets.size():0;
}
公共无效集合newweets(列表newweetlist){
this.mTweets=newweetlist;
}
步骤3
修改此方法populateTimeline
private void populateTimeline() {
client.getHomeTimeline(new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, JSONArray jsonArray) {
Log.d("DEBUG", jsonArray.toString());
mTweets = new ArrayList<Tweet>();
for (int i = 0; i < jsonArray.length(); i++) {
try {
JSONObject jsonTweet = jsonArray.getJSONObject(i);
Tweet tweet = new Tweet();
tweet.setBody(jsonTweet.getString("text"));
tweet.setUid(jsonTweet.getLong("id"));
tweet.setCreateAt(jsonTweet.getString("created_at"));
JSONObject jsonUser = jsonTweet.getJSONObject("user");
User user = new User();
user.setName(jsonUser.getString("name"));
user.setUid(jsonUser.getLong("id"));
user.setScreenname(jsonUser.getString("screen_name"));
user.setProfileImageurl(jsonUser.getString("profile_image_url"));
tweet.setUser(user);
mTweets.add(tweet);
/* REMOVE THIS CODE!
runOnUiThread(new Runnable() {
@Override
public void run() {
TweetAdapter adapter = new TweetAdapter(mContext, mTweets);
rvTweets.setAdapter(adapter);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(mContext);
rvTweets.setLayoutManager(layoutManager);
}
});
*/
} catch (JSONException e) {
e.printStackTrace();
continue;
}
// NOW SET MTWEETS IN YOUR ADAPTER.
// NOTIFY the adapter that the data is changed.
adapter.setNewTweets(mTweets);
adapter.notifyDataSetChanged();
}
}
private void populateTimeline(){
client.getHomeTimeline(新的JsonHttpResponseHandler(){
@凌驾
成功时的公共void(int statusCode,Header[]headers,JSONArray JSONArray){
Log.d(“DEBUG”,jsonArray.toString());
mTweets=newarraylist();
for(int i=0;i
@Override
public int getItemCount() {
return (mTweets !=null) ? mTweets.size() : 0;
}
public void setNewTweets(List<Tweet> newTweetList) {
this.mTweets = newTweetList;
}
private void populateTimeline() {
client.getHomeTimeline(new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, JSONArray jsonArray) {
Log.d("DEBUG", jsonArray.toString());
mTweets = new ArrayList<Tweet>();
for (int i = 0; i < jsonArray.length(); i++) {
try {
JSONObject jsonTweet = jsonArray.getJSONObject(i);
Tweet tweet = new Tweet();
tweet.setBody(jsonTweet.getString("text"));
tweet.setUid(jsonTweet.getLong("id"));
tweet.setCreateAt(jsonTweet.getString("created_at"));
JSONObject jsonUser = jsonTweet.getJSONObject("user");
User user = new User();
user.setName(jsonUser.getString("name"));
user.setUid(jsonUser.getLong("id"));
user.setScreenname(jsonUser.getString("screen_name"));
user.setProfileImageurl(jsonUser.getString("profile_image_url"));
tweet.setUser(user);
mTweets.add(tweet);
/* REMOVE THIS CODE!
runOnUiThread(new Runnable() {
@Override
public void run() {
TweetAdapter adapter = new TweetAdapter(mContext, mTweets);
rvTweets.setAdapter(adapter);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(mContext);
rvTweets.setLayoutManager(layoutManager);
}
});
*/
} catch (JSONException e) {
e.printStackTrace();
continue;
}
// NOW SET MTWEETS IN YOUR ADAPTER.
// NOTIFY the adapter that the data is changed.
adapter.setNewTweets(mTweets);
adapter.notifyDataSetChanged();
}
}