Java 在我的ListView中列出数据库中的所有值时出现问题

Java 在我的ListView中列出数据库中的所有值时出现问题,java,android,json,listview,android-arrayadapter,Java,Android,Json,Listview,Android Arrayadapter,我正在尝试将我的localhost数据库中的所有值列到列表视图中。基本上,REST进程和后台内容发生在我的AsyncTask类中,因此我不能真正使用onCreate方法 无论如何,这是我的代码: public class ViewNames extends Activity { ListView listView; ArrayAdapter<String> viewAdapter; @Override protected void onCreate(

我正在尝试将我的
localhost数据库中的所有值
列到
列表视图中
。基本上,
REST
进程和后台内容发生在我的
AsyncTask
类中,因此我不能真正使用
onCreate
方法

无论如何,这是我的代码:

public class ViewNames extends Activity {
    ListView listView;
    ArrayAdapter<String> viewAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.viewnames);
        listView = (ListView) findViewById(R.id.listView);
        // If I add the adapter here then I can't view the results. I want to view all the values I have as soon
        as I open up the form. But this process only happens in my AsyncTask class so I don't know how to model this
        list
        //adapter = new ArrayAdapter<String>(ViewNames.this, android.R.layout.simple_list_item_1,result);
        //listView.setAdapter(adapter);
    }
}

public class ViewNamesJSON extends AsyncTask<String, String, String> {  

    ... //Other methods go here. They work fine.

    @Override
    // This is where it doesn't work. If I display the adapter in onCreate then I have an empty list.
    // But I want to display the results of all the values after the user has clicked the button.
    protected void onPostExecute(String s) {
        List<String> namesList = new List<String>();
        try {
            JSONObject jsonObject = new JSONObject(s);
            JSONArray jsonArray = jsonObject.optJSONArray("names");

            for(int i=0; i < jsonArray.length(); i++){
                JSONObject ones = jsonArray.getJSONObject(i);
                String names = ones.optString("names");
                namesList.add(names);
            }
            String[] result = namesList.toArray(new String[namesList.size()]);
            adapter = new ArrayAdapter<String>(ViewNames.this, android.R.layout.simple_list_item_1,result);
            listView.setAdapter(adapter);
        }
        catch (JSONException e) {
            e.printStackTrace();
        }
    }
}
我遇到了一些困难,因为我想立即将数据库中的所有内容显示到
列表视图
,然后在用户单击按钮时更新
列表视图


非常感谢您的帮助。

您可以在
onCreate
中定义并添加适配器。任务完成后,只需在其上调用
notifyDataSetChanged

通过将
列表
传递给适配器而不是数组,您可以按如下方式进行操作,以便活动和适配器共享同一个集合

public class ViewNames extends Activity {

    ListView listView;
    List<String> result;
    ArrayAdapter<String> adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.viewnames);
        listView = (ListView) findViewById(R.id.listView);
        result = new ArrayList<String>();
        adapter = new ArrayAdapter<String>(ViewNames.this, android.R.layout.simple_list_item_1,result);
        listView.setAdapter(adapter);

        (new ViewNamesJSON()).execute();
    }

    public class ViewNamesJSON extends AsyncTask<String, String, String> {

        // Other methods go here. They work fine.

        @Override
        protected void onPostExecute(String s) {
            List<String> namesList = new ArrayList<String>();
            try {
                JSONObject jsonObject = new JSONObject(s);
                JSONArray jsonArray = jsonObject.optJSONArray("names");

                for(int i=0; i < jsonArray.length(); i++){
                    JSONObject ones = jsonArray.getJSONObject(i);
                    String names = ones.optString("names");
                    namesList.add(names);
                }
                result.clear();
                result.addAll(namesList);
                adapter.notifyDataSetChanged();
            }
            catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }

}
公共类视图名扩展活动{
列表视图列表视图;
列出结果;
阵列适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.viewnames);
listView=(listView)findViewById(R.id.listView);
结果=新的ArrayList();
adapter=newarrayadapter(ViewNames.this,android.R.layout.simple\u list\u item\u 1,result);
setAdapter(适配器);
(新ViewNamesJSON()).execute();
}
公共类ViewNamesJSON扩展异步任务{
//其他方法也适用于此,效果很好。
@凌驾
受保护的void onPostExecute(字符串s){
List namesList=new ArrayList();
试一试{
JSONObject JSONObject=新的JSONObject;
JSONArray JSONArray=jsonObject.optJSONArray(“名称”);
for(int i=0;i

希望这能有所帮助。

您可以在
onCreate
中定义和添加适配器。任务完成后,只需在其上调用
notifyDataSetChanged

通过将
列表
传递给适配器而不是数组,您可以按如下方式进行操作,以便活动和适配器共享同一个集合

public class ViewNames extends Activity {

    ListView listView;
    List<String> result;
    ArrayAdapter<String> adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.viewnames);
        listView = (ListView) findViewById(R.id.listView);
        result = new ArrayList<String>();
        adapter = new ArrayAdapter<String>(ViewNames.this, android.R.layout.simple_list_item_1,result);
        listView.setAdapter(adapter);

        (new ViewNamesJSON()).execute();
    }

    public class ViewNamesJSON extends AsyncTask<String, String, String> {

        // Other methods go here. They work fine.

        @Override
        protected void onPostExecute(String s) {
            List<String> namesList = new ArrayList<String>();
            try {
                JSONObject jsonObject = new JSONObject(s);
                JSONArray jsonArray = jsonObject.optJSONArray("names");

                for(int i=0; i < jsonArray.length(); i++){
                    JSONObject ones = jsonArray.getJSONObject(i);
                    String names = ones.optString("names");
                    namesList.add(names);
                }
                result.clear();
                result.addAll(namesList);
                adapter.notifyDataSetChanged();
            }
            catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }

}
公共类视图名扩展活动{
列表视图列表视图;
列出结果;
阵列适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.viewnames);
listView=(listView)findViewById(R.id.listView);
结果=新的ArrayList();
adapter=newarrayadapter(ViewNames.this,android.R.layout.simple\u list\u item\u 1,result);
setAdapter(适配器);
(新ViewNamesJSON()).execute();
}
公共类ViewNamesJSON扩展异步任务{
//其他方法也适用于此,效果很好。
@凌驾
受保护的void onPostExecute(字符串s){
List namesList=new ArrayList();
试一试{
JSONObject JSONObject=新的JSONObject;
JSONArray JSONArray=jsonObject.optJSONArray(“名称”);
for(int i=0;i

希望这能有所帮助。

您可以在
onCreate
中定义和添加适配器。这只是一个在任务完成时调用<代码> NoTIFYDATABETRESUT/<代码>的问题。尝试添加(ListVIEW。StaseAdvor(适配器);)(Addio.NoTIFYDATETETROUNDUDE())之后可能要考虑在活动布局中包含一个旋转列表和列表视图,在“打开创建”过程中,显示微调器和“创建适配器”对象,并将适配器设置为“列表视图”,但使其可见性消失。稍后,收到响应后,使用新收到的字符串[]更新阵列适配器,然后通知数据集已更改,您应该使用单独的方法refreshListView(字符串[]项)来执行此操作,并在此方法内隐藏微调器,并使列表视图在其消失状态时可见。您在何处执行AsyncTask?它不是自动发生的,您可以在创建时定义和添加适配器。这只是一个在任务完成时调用<代码> NoTIFYDATABETRESUT/<代码>的问题。尝试添加(ListVIEW。StaseAdvor(适配器);)(Addio.NoTIFYDATETETROUNDUDE())之后可能要考虑在活动布局中包含一个旋转列表和列表视图,在“打开创建”过程中,显示微调器和“创建适配器”对象,并将适配器设置为“列表视图”,但使其可见性消失。稍后,收到响应后,使用新收到的字符串[]更新阵列适配器,然后通知数据集已更改,您应该使用单独的方法refreshListView(字符串[]项)来执行此操作,并在此方法内隐藏微调器,并使列表视图在其消失状态时可见。您在何处执行AsyncTask?这不是自动发生的,我试过了,但我仍然无法在我的ListView中查看任何内容。列表视图甚至不显示在屏幕上form@SamuelGeorgeszusz您确定没有以某种方式复制列表吗?这对我来说很重要