Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 设置适配器时,ArrayList为零_Android - Fatal编程技术网

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();

        }

    }