처음에는이 커뮤니티에서 저를 도운 모든 사람에게 감사드립니다.ListView 항목이 AsyncTask를 사용하여로드되지 않았습니다.
내 Activity에서 Listview 항목 (서버에서 다운로드)을로드하려고합니다. 나는 GingerBread를 사용하기 때문에 AsyncTask를 사용하지 않고 시도했지만 완벽하게 작동합니다.
AsyncTask에서 작업을 시도했지만 목록이 여전히 비어 있습니다. 또한 DoPartExecute에 DoInBackground에서 일부 부품을 이동하려고 시도했지만 아무 것도 변경되지 않았습니다. 그래서 나를 도울 수 있습니다.
이것은 (두 번째 응답 한 후 업데이트) 내 코드
MAIN
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 = "http://www.xxxxxxxxxxxxx?requsted=xxxxxxxxx";
// 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);
}
}
}
되고이은 JSON 파서 CLASS에게
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;
public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
public JSONObject getJSONFromUrl(String url) {
// Making HTTP request
try {
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//"ISO-8859-1,utf-8;q=0.7,*;q=0.7"
//"iso-8859-1"
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "utf-8"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
}
안부이다.
처음 네 줄을 넣으면 충돌이 발생합니다! 나는 모든 코드를 PostExcute에 넣었고 같은 결과는 –
이클립스가 (이 (BaseAdapter) 어댑터처럼) 어댑터를 던지라고 요청했다 .notifyDataSetChanged(); –