Java Android从JSON数组添加ListView项

Java Android从JSON数组添加ListView项,java,android,android-listview,android-arrayadapter,Java,Android,Android Listview,Android Arrayadapter,我有一个活动,但有三个布局。ListView是登录后显示的布局的一部分。这就是为什么我不能在创建时设置ArrayAdapter,因为我的ListView尚未初始化。我试着遵循教程,但我无法重现这些步骤。在本教程中,作者在创建时完成了所有操作 我试着这样做: ArrayList<String> listItems=new ArrayList<String>(); ArrayAdapter<String> adapter; ... public cla

我有一个活动,但有三个布局。ListView是登录后显示的布局的一部分。这就是为什么我不能在创建时设置ArrayAdapter,因为我的ListView尚未初始化。我试着遵循教程,但我无法重现这些步骤。在本教程中,作者在创建时完成了所有操作

我试着这样做:

ArrayList<String> listItems=new ArrayList<String>();
ArrayAdapter<String> adapter;

...

    public class getcontacts extends AsyncTask<Void, Void, Boolean> {
    @Override
    protected Boolean doInBackground(Void... params) {

 ...HERE I AM FETCHING DATA...

 listItems.add(json_data.getString("login") + " " + derp);
 }

@Override
    protected void onPostExecute(final Boolean success) {
        getc = null;


        ac = new addcontacts();
        ac.execute(true);
ArrayList listItems=new ArrayList();
阵列适配器;
...
公共类getcontacts扩展异步任务{
@凌驾
受保护的布尔doInBackground(Void…params){
…这里我正在获取数据。。。
add(json_data.getString(“login”)+“”+derp);
}
@凌驾
受保护的void onPostExecute(最终布尔值成功){
getc=null;
ac=新添加的触点();
ac.execute(真);
下面是addcontacts类的代码:

 public class addcontacts extends ListActivity {


     protected void onCreate() {


         adapter=new ArrayAdapter<String>(this,
                    android.R.layout.simple_list_item_1,
                    listItems);
         setListAdapter(adapter);

         adapter.notifyDataSetChanged();

     }
     protected void execute(final Boolean success) {

    done = true;
     }


 }
public类addcontacts扩展ListActivity{
受保护的void onCreate(){
适配器=新阵列适配器(此,
android.R.layout.simple\u list\u item\u 1,
清单项目);
setListAdapter(适配器);
adapter.notifyDataSetChanged();
}
受保护的void执行(最终布尔值成功){
完成=正确;
}
}
布局如下:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >



<TextView
    android:id="@+id/textView1"
    android:layout_width="match_parent"
    android:layout_height="188dp"
    android:layout_weight="0.53"
    android:text="Fetching contact list" />

<ListView
    android:id="@+id/listView1"
    android:layout_width="match_parent"
    android:layout_height="106dp" >
</ListView>

</LinearLayout>


ListView不包含任何内容。我在调试器中签入listItems包含所有项,因此适配器出现问题。

我建议您采用以下方法:

  • 活动中
    使用空列表初始化
    列表视图
    适配器
  • 创建
    BaseAdapter
    的子类以获得对它的更多控制
  • 通过
    适配器的构造函数传递
    适配器
    并列出
  • 异步任务
    子类中传递
    适配器
    列表
  • doInBackground()
    方法中,执行从服务器和 将每个项目添加到
    列表中
  • 如果要创建惰性适配器,以便添加到
    列表中的每个项目
    ,请调用
    publishProgress()
    和在
    onProgressUpdate()中调用
    
    yourAdapter.notifyDataSetChanged()
  • 如果没有,则在工作完成后,在
    onPostExecute()
    方法调用中
    yourAdapter.notifyDataSetChanged()
  • 现在应该可以了

  • 您已经完成了。

    您没有像以前那样通过显式Contstructor实例化活动。您还应该注意您正在编写的,
    onCreate()
    需要获得一个捆绑包作为参数。使用
    @Override
    注释,这将使类似操作更容易。此外,请使用适当的命名约定,并向我们展示如何设置每个类。如果AsyncTask和ListActivity都是同一文件的一部分,请不要将它们分开。下面是完整的代码:这是一个非常类似的示例,其中包含数据从XML解析并动态添加到列表中并进行更新。似乎很复杂。还有其他更简单的方法吗?是的,但您不需要处理图像和内存。您只需查看如何解析和更新适配器,就可以了。好的,谢谢。我会研究它,但我想这将花费我几天的时间。x.x