Java ListView项目没有';无法使用异步任务加载

Java ListView项目没有';无法使用异步任务加载,java,android,json,listview,android-asynctask,Java,Android,Json,Listview,Android Asynctask,首先,我要感谢每一位曾经在这个社区帮助过我的人 我正在尝试在活动中加载Listview项目(从服务器下载)。因为我用的是姜饼,所以我试着不用任何任务就可以完成,而且效果非常好 当我尝试在AsyncTask中执行此操作时,列表仍然为空。 我也试着将一些部分从DoInBackground移动到onPostExecute,但没有任何变化。所以你能帮我吗 这是我的代码(在第二个答案后更新) 致以最诚挚的问候。您不能通知SimpleAdapter 您需要使用ArrayAdapter通知数据。。。 如果要在

首先,我要感谢每一位曾经在这个社区帮助过我的人

我正在尝试在活动中加载Listview项目(从服务器下载)。因为我用的是姜饼,所以我试着不用任何任务就可以完成,而且效果非常好

当我尝试在AsyncTask中执行此操作时,列表仍然为空。 我也试着将一些部分从DoInBackground移动到onPostExecute,但没有任何变化。所以你能帮我吗

这是我的代码(在第二个答案后更新)


致以最诚挚的问候。

您不能通知SimpleAdapter 您需要使用ArrayAdapter通知数据。。。 如果要在每个列表项中显示不同的视图,则需要通过BaseAdapter将ur代码替换为=
replace ur code by this=
import java.util.ArrayList;
import java.util.HashMap;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;



import android.app.Activity;
import android.app.ListActivity;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

public class StudentMSG extends ListActivity {
    // url to make request
    private static String url = "XXXXXXXXXXXXXXXXXXXX/json.php";
    // JSON Node names
    private static final String TAG_CONTACTS = "contacts";
    private static final String TAG_ID = "message_id";
    private static final String TAG_NAME = "sender_id";
    private static final String TAG_EMAIL = "title";
    private static final String TAG_ADDRESS = "message_id";
    private static final String TAG_GENDER = "READ";
    private static final String TAG_PHONE = "message_id";
    private static final String TAG_PHONE_MOBILE = "message_id";
    private static final String TAG_PHONE_HOME = "message_id";
    private static final String TAG_PHONE_OFFICE = "message_id";
    ListView lv;
    ArrayList<HashMap<String, String>> contactList ;
    JSONObject json ;
    ListAdapter adapter;
    // contacts JSONArray
    JSONArray contacts = null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        load task=new load();
        task.execute();





    }



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

            // Hashmap for ListView
            contactList = new ArrayList<HashMap<String, String>>();

            // Creating JSON Parser instance
            JSONParser jParser = new JSONParser();

            // getting JSON string from URL
             json = jParser.getJSONFromUrl(url);
                try {
                    contacts = json.getJSONArray(TAG_CONTACTS);
                // looping through All Contacts
                for(int i = 0; i < contacts.length(); i++){
                    JSONObject c = contacts.getJSONObject(i);

                    // Storing each json item in variable
                    String id = c.getString(TAG_ID);
                    String name = c.getString(TAG_NAME);
                    String email = c.getString(TAG_EMAIL);
                    String address = c.getString(TAG_ADDRESS);
                    String gender = c.getString(TAG_GENDER);

                    // Phone number is agin JSON Object


                    // creating new HashMap
                    HashMap<String, String> map = new HashMap<String, String>();

                    // adding each child node to HashMap key => value
                    map.put(TAG_ID, id);
                    map.put(TAG_NAME, name);
                    map.put(TAG_EMAIL, email);
                    map.put(TAG_GENDER, gender);


                    // adding HashList to ArrayList
                    contactList.add(map);
                }
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
            return null;



        }
        protected void onPostExecute() {

            String[] s = { TAG_NAME, TAG_EMAIL , TAG_GENDER};
            int[] n = {R.id.name, R.id.email , R.id.mobile };
          adapter = new SimpleAdapter(StudentMSG.this, contactList,R.layout.list_item,s,n );
            setListAdapter(adapter);

    }
}
导入java.util.ArrayList; 导入java.util.HashMap; 导入org.json.JSONArray; 导入org.json.JSONException; 导入org.json.JSONObject; 导入android.app.Activity; 导入android.app.ListActivity; 导入android.content.Intent; 导入android.os.AsyncTask; 导入android.os.Bundle; 导入android.util.Log; 导入android.view.view; 导入android.widget.AdapterView; 导入android.widget.AdapterView.OnItemClickListener; 导入android.widget.ListAdapter; 导入android.widget.ListView; 导入android.widget.ProgressBar; 导入android.widget.simpledapter; 导入android.widget.TextView; 导入android.widget.Toast; 公共类StudentMSG扩展ListActivity{ //发出请求的url 私有静态字符串url=“xxxxxxxxxxxxxxxxx/json.php”; //JSON节点名称 专用静态最终字符串标记_CONTACTS=“CONTACTS”; 私有静态最终字符串标记\u ID=“消息\u ID”; 私有静态最终字符串标记\u NAME=“发送者\u id”; 私有静态最终字符串标记\u EMAIL=“title”; 私有静态最终字符串标记\u ADDRESS=“message\u id”; 私有静态最终字符串标记_GENDER=“READ”; 私有静态最终字符串TAG\u PHONE=“message\u id”; 专用静态最终字符串标记\u PHONE\u MOBILE=“message\u id”; 私有静态最终字符串标记\u PHONE\u HOME=“message\u id”; 私有静态最终字符串标记\u PHONE\u OFFICE=“message\u id”; ListView lv; ArrayList联系人列表; JSONObject json; 列表适配器; //联系JSONArray JSONArray联系人=null; @凌驾 创建时的公共void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); 加载任务=新加载(); task.execute(); } 公共类加载扩展异步任务 { @凌驾 受保护的Void doInBackground(Void…参数){ //ListView的Hashmap contactList=新的ArrayList(); //创建JSON解析器实例 JSONParser jParser=新的JSONParser(); //从URL获取JSON字符串 json=jParser.getJSONFromUrl(url); 试一试{ contacts=json.getJSONArray(TAG_contacts); //通过所有触点循环 对于(int i=0;ivalue 地图放置(标签标识,标识); 地图放置(标签名称、名称); 地图放置(标签、电子邮件、电子邮件); 地图放置(标记性别,性别); //将哈希列表添加到ArrayList 联系人列表。添加(地图); } } 捕获(例外e) { e、 printStackTrace(); } 返回null; } 受保护的void onPostExecute(){ 字符串[]s={TAG_NAME,TAG_EMAIL,TAG_GENDER}; int[]n={R.id.name,R.id.email,R.id.mobile}; adapter=new simpledapter(StudentMSG.this,contactList,R.layout.list\u项,s,n); setListAdapter(适配器); } }
本教程说明了我想要的内容和含义。。
感谢所有参与者。

关于您的执行后方法:

protected void onPostExecute() {
    runOnUiThread(new Runnable() {
       public void run() {
             String[] s = { TAG_NAME, TAG_EMAIL , TAG_GENDER};
             int[] n = {R.id.name, R.id.email , R.id.mobile };
             adapter = new SimpleAdapter(StudentMSG.this, contactList,R.layout.list_item,s,n );
             setListAdapter(adapter);
}}};

这将防止它崩溃。希望这有助于

当我将前4行放在onCreate中时它崩溃!我将所有代码放在PostExecute中,相同的结果为空。因此eclipse要求我将适配器转换为以下((BaseAdapter)adapter)。notifyDataSetChanged();同样的事情:)我提供了我问题的完整代码:(谢谢Shyam的参与
replace ur code by this=
import java.util.ArrayList;
import java.util.HashMap;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;



import android.app.Activity;
import android.app.ListActivity;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

public class StudentMSG extends ListActivity {
    // url to make request
    private static String url = "XXXXXXXXXXXXXXXXXXXX/json.php";
    // JSON Node names
    private static final String TAG_CONTACTS = "contacts";
    private static final String TAG_ID = "message_id";
    private static final String TAG_NAME = "sender_id";
    private static final String TAG_EMAIL = "title";
    private static final String TAG_ADDRESS = "message_id";
    private static final String TAG_GENDER = "READ";
    private static final String TAG_PHONE = "message_id";
    private static final String TAG_PHONE_MOBILE = "message_id";
    private static final String TAG_PHONE_HOME = "message_id";
    private static final String TAG_PHONE_OFFICE = "message_id";
    ListView lv;
    ArrayList<HashMap<String, String>> contactList ;
    JSONObject json ;
    ListAdapter adapter;
    // contacts JSONArray
    JSONArray contacts = null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        load task=new load();
        task.execute();





    }



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

            // Hashmap for ListView
            contactList = new ArrayList<HashMap<String, String>>();

            // Creating JSON Parser instance
            JSONParser jParser = new JSONParser();

            // getting JSON string from URL
             json = jParser.getJSONFromUrl(url);
                try {
                    contacts = json.getJSONArray(TAG_CONTACTS);
                // looping through All Contacts
                for(int i = 0; i < contacts.length(); i++){
                    JSONObject c = contacts.getJSONObject(i);

                    // Storing each json item in variable
                    String id = c.getString(TAG_ID);
                    String name = c.getString(TAG_NAME);
                    String email = c.getString(TAG_EMAIL);
                    String address = c.getString(TAG_ADDRESS);
                    String gender = c.getString(TAG_GENDER);

                    // Phone number is agin JSON Object


                    // creating new HashMap
                    HashMap<String, String> map = new HashMap<String, String>();

                    // adding each child node to HashMap key => value
                    map.put(TAG_ID, id);
                    map.put(TAG_NAME, name);
                    map.put(TAG_EMAIL, email);
                    map.put(TAG_GENDER, gender);


                    // adding HashList to ArrayList
                    contactList.add(map);
                }
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
            return null;



        }
        protected void onPostExecute() {

            String[] s = { TAG_NAME, TAG_EMAIL , TAG_GENDER};
            int[] n = {R.id.name, R.id.email , R.id.mobile };
          adapter = new SimpleAdapter(StudentMSG.this, contactList,R.layout.list_item,s,n );
            setListAdapter(adapter);

    }
}
protected void onPostExecute() {
    runOnUiThread(new Runnable() {
       public void run() {
             String[] s = { TAG_NAME, TAG_EMAIL , TAG_GENDER};
             int[] n = {R.id.name, R.id.email , R.id.mobile };
             adapter = new SimpleAdapter(StudentMSG.this, contactList,R.layout.list_item,s,n );
             setListAdapter(adapter);
}}};