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