Android 在异步任务中使用ListView
您好,我正试图在AsyncTask中使用Android 在异步任务中使用ListView,android,listview,android-listview,android-asynctask,Android,Listview,Android Listview,Android Asynctask,您好,我正试图在AsyncTask中使用ListView,但我的应用程序中出现了一些问题,它给了我运行时错误 我的应用程序使用Twitter4j获取推文,然后将其显示在列表视图中。我想知道这是否可以以一种连续的方式完成,推特会一条一条地显示出来 这就是我现在所做的:(我做了一些调试,错误出现在最后一行的onPostExecute方法中!没有显示tweet,错误在代码下面) 有人能帮忙吗? 多谢各位 编辑: XML代码: <?xml version="1.0" encoding="utf-8
ListView
,但我的应用程序中出现了一些问题,它给了我运行时错误
我的应用程序使用Twitter4j
获取推文,然后将其显示在列表视图中。我想知道这是否可以以一种连续的方式完成,推特会一条一条地显示出来
这就是我现在所做的:(我做了一些调试,错误出现在最后一行的onPostExecute
方法中!没有显示tweet,错误在代码下面)
有人能帮忙吗?
多谢各位
编辑:
XML代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background"
android:padding="6dip" >
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" >
</ListView>
<TextView
android:id="@+id/rowTextView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:textSize="16sp" >
</TextView>
</RelativeLayout>
第124行是:listView.setAdapter(listAdapter) 注释中的第138行是listView.setAdapter(listAdapter)代码>
listView
未初始化,因此为空。你忘了
listView = (ListView)findViewById(R.id.listView);
此外,您正在从doInbackground
tv.setText(tweetAndUser); // not possible from background thread.
在onPostExecute
中更新ui,并使用活动上下文
TextView tv=new TextView(DisplayResults.this);
编辑:
类printweets扩展异步任务
{
@凌驾
受保护的ArrayListdoInBackground(无效…参数){
…//代码的其余部分
ArrayList tweetList=新的ArrayList();
对于(twitter4j.Status tweet:tweets){
字符串tweetAndUser=“@”+tweet.getUser().getScreenName()+”:“+tweet.getText();
添加(tweetAndUser);
}
返回tweetList;
}
@凌驾
受保护的void onPostExecute(ArrayList结果){
//TODO自动生成的方法存根
super.onPostExecute(结果);
listAdapter=new ArrayAdapter(DisplayResults.this,android.R.layout.simple\u list\u item\u 2,result);
setAdapter(listAdapter);
}
@Raghunandan listView.setAdapter(listAdapter);@Raghunandan仍然是相同的错误。请确保您的tweetList不是空的。错误不一样是的是,这是NPE是的,但您的列表似乎是空的要检查编辑,这应该足以让您理解并解决您的问题。如果您想显示用户名,并且tweet是一个单独的文本视图,那么您需要使用自定义adapterAll,我只是重新设置选中(调试模式)现在tweetList不是空的。我更新了XML文件。好吧,假设我删除了TextView,我想传递多条tweet以显示在listView中。是否有方法存储每条tweet,然后将它们传递到onPostExecute函数以显示它们?谢谢you@RanaAkel使用ArrayList tweetList=new ArrayList();
。然后添加推文推文列表。添加(推文)
在for循环中。然后在执行您建议的操作后,使用tweeList而不是字符串数组X。我们在ArrayList中添加了多条tweet,但在调试后,我们注意到它只添加了1条tweet,而没有添加多条tweet。然后,在到达onPostExecute@RanaAkelth在意味着你做错了。发布更新的代码和错误。错误不可能是我建议的。我更新了代码。请检查并给我们任何建议。谢谢
02-16 15:36:22.995: E/AndroidRuntime(9017): FATAL EXCEPTION: main
02-16 15:36:22.995: E/AndroidRuntime(9017): java.lang.NullPointerException
02-16 15:36:22.995: E/AndroidRuntime(9017): at android.widget.ArrayAdapter.getCount(ArrayAdapter.java:330)
02-16 15:36:22.995: E/AndroidRuntime(9017): at android.widget.ListView.setAdapter(ListView.java:466)
02-16 15:36:22.995: E/AndroidRuntime(9017): at com.example.sentimentmining.DisplayResults$printTweets.onPostExecute(DisplayResults.java:124)
02-16 15:36:22.995: E/AndroidRuntime(9017): at com.example.sentimentmining.DisplayResults$printTweets.onPostExecute(DisplayResults.java:1)
02-16 15:36:22.995: E/AndroidRuntime(9017): at android.os.AsyncTask.finish(AsyncTask.java:631)
02-16 15:36:22.995: E/AndroidRuntime(9017): at android.os.AsyncTask.access$600(AsyncTask.java:177)
02-16 15:36:22.995: E/AndroidRuntime(9017): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
02-16 15:36:22.995: E/AndroidRuntime(9017): at android.os.Handler.dispatchMessage(Handler.java:99)
02-16 15:36:22.995: E/AndroidRuntime(9017): at android.os.Looper.loop(Looper.java:137)
02-16 15:36:22.995: E/AndroidRuntime(9017): at android.app.ActivityThread.main(ActivityThread.java:4898)
02-16 15:36:22.995: E/AndroidRuntime(9017): at java.lang.reflect.Method.invokeNative(Native Method)
02-16 15:36:22.995: E/AndroidRuntime(9017): at java.lang.reflect.Method.invoke(Method.java:511)
02-16 15:36:22.995: E/AndroidRuntime(9017): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
02-16 15:36:22.995: E/AndroidRuntime(9017): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
02-16 15:36:22.995: E/AndroidRuntime(9017): at dalvik.system.NativeStart.main(Native Method)
listView = (ListView)findViewById(R.id.listView);
tv.setText(tweetAndUser); // not possible from background thread.
TextView tv=new TextView(DisplayResults.this);
class printTweets extends AsyncTask<Void,Void,ArrayList<String>>
{
@Override
protected ArrayList<String>doInBackground(Void... params) {
...// rest of the code
ArrayList<String> tweetList = new ArrayList<String>();
for (twitter4j.Status tweet : tweets) {
String tweetAndUser = "@" + tweet.getUser().getScreenName() + ":" + tweet.getText();
tweetList.add(tweetAndUser);
}
return tweetList;
}
@Override
protected void onPostExecute(ArrayList<String> result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
listAdapter = new ArrayAdapter<String>(DisplayResults.this,android.R.layout.simple_list_item_2, result);
listView.setAdapter( listAdapter );
}