2012-10-06 2 views
0

처음에는이 커뮤니티에서 저를 도운 모든 사람에게 감사드립니다.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; 

    } 
} 

안부이다.

답변

0

당신은 당신이 BaseAdapter

+0

처음 네 줄을 넣으면 충돌이 발생합니다! 나는 모든 코드를 PostExcute에 넣었고 같은 결과는 –

+0

이클립스가 (이 (BaseAdapter) 어댑터처럼) 어댑터를 던지라고 요청했다 .notifyDataSetChanged(); –

1
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); 

    } 
} 
+0

같은 것 :(. 내 질문에 전체 코드를 제공했습니다. (참여를 위해 Shyam에게 감사하십시오. –

+0

누구든지 나를 도울 수 있습니다. –

0

를 원하고 .. 의미 방법 :

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); 
}}}; 

이렇게하면 충돌을 예방할 수 있습니다. 희망이 도움이

관련 문제