public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(getContext());
View theView = inflater.inflate(R.layout.match_layout, parent, false);
matchID = getItem(position);
TextView championName = (TextView) theView.findViewById(R.id.championNameText);
new Thread(
new Runnable() {
public void run() {
selectedMatch = RiotAPI.getMatch(matchID);
Log.i(TAG, String.valueOf(selectedMatch)); // <-- returns the matches properly
}
}).start();
championName.setText(String.valueOf(selectedMatch.getDuration()));
// Log.i(TAG, String.valueOf(selectedMatch)); <-- returns nulls
return theView;
}
在尝试制作我的第一个应用程序后,我遇到了问题。我的理解是我不允许在主线程中进行api调用,所以我尝试使用单独的线程。问题是,API返回数据需要几秒钟,因此当我尝试更新文本视图时,selectedMatch为null,给出了空指针异常。处理这个问题的正确方法是什么?
编辑:我到目前为止找到的唯一解决方法是将一个空的while循环等待线程先完成,但这似乎非常低效。希望得到更多的投入。 public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(getContext());
View theView = inflater.inflate(R.layout.match_layout, parent, false);
matchID = getItem(position);
TextView championName = (TextView) theView.findViewById(R.id.championNameText);
new Thread(
new Runnable() {
public void run() {
selectedMatch = RiotAPI.getMatch(matchID);
Log.i(TAG, String.valueOf(selectedMatch)); // <-- returns the matches properly
}
}).start();
while (selectedMatch == null)
{
}
championName.setText(String.valueOf(selectedMatch.getDuration()));
// Log.i(TAG, String.valueOf(selectedMatch)); <-- returns nulls
return theView;
}
答案 0 :(得分:0)
尝试使用runOnUiThread():
ember-cli