Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.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 在异步任务中使用ListView_Android_Listview_Android Listview_Android Asynctask - Fatal编程技术网

Android 在异步任务中使用ListView

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

您好,我正试图在AsyncTask中使用
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 ); 

    }