2013-10-14 3 views
1

서버에서 json 데이터를 읽는 프로세스를 만들었습니다. 데이터 읽기가 끝나면 페이지가 읽기를 할 때 ProgressDialog가 나타나고 모든 데이터가 목록보기로 표시되면 사라질 것입니다.데이터를 검색 할 때 Android ProgressDialog가 표시됩니다.

내가 만들어 뒀다 :

ProgressDialog progress = new ProgressDialog(this); 
progress.setMessage("Wait while loading..."); 
progress.show(); 

을하지만 항상 실패합니다.

이 경우 모든 데이터가 listview에서 제대로 표시되었으므로 데이터 검색 프로세스를 표시하는 데 도움이되도록 ProgressDialog을 사용하고 싶습니다.

내 활동 :

package com.joris.moviesmonitoring; 

import java.util.ArrayList; 
import java.util.HashMap; 

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

import com.joris.moviesmonitoring.JSONParser; 

import android.app.ListActivity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.os.StrictMode; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.SimpleAdapter; 
import android.widget.TextView; 

public class MainActivity extends ListActivity { 

     // url to make request 
     private static String url = "http://api.mydomain.info/contacts/"; 

     // JSON Node names 
     private static final String TAG_CONTACTS = "contacts"; 
     private static final String TAG_ID = "id"; 
     private static final String TAG_NAME = "name"; 
     private static final String TAG_EMAIL = "email"; 
     private static final String TAG_PHONE = "phone"; 
     private static final String TAG_PHONE_MOBILE = "mobile"; 

     // contacts JSONArray 
     JSONArray contacts = null; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 

      StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder() 
      .permitAll().build(); 
      StrictMode.setThreadPolicy(policy); 


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

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

      // getting JSON string from URL 
      JSONObject json = jParser.getJSONFromUrl(url); 


      try { 
       // Getting Array of Contacts 
       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); 

        // Phone number is agin JSON Object 
        JSONObject phone = c.getJSONObject(TAG_PHONE); 
        String mobile = phone.getString(TAG_PHONE_MOBILE); 

        // 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_PHONE_MOBILE, mobile); 

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



      /** 
      * Updating parsed JSON data into ListView 
      * */ 
      ListAdapter adapter = new SimpleAdapter(this, contactList, 
        R.layout.list_item, 
        new String[] { 
         TAG_NAME, 
         TAG_EMAIL, 
         TAG_PHONE_MOBILE, 
         TAG_PHONE_MOBILE 
        }, new int[] { 
          R.id.name, 
          R.id.email, 
          R.id.mobile, 
          R.id.desc 
        }); 

      setListAdapter(adapter); 


      // selecting single ListView item 
      ListView lv = getListView(); 

      // Launching new screen on Selecting Single ListItem 
      lv.setOnItemClickListener(new OnItemClickListener() { 

       @Override 
       public void onItemClick(AdapterView<?> parent, View view, 
         int position, long id) { 
        // getting values from selected ListItem 
        String name = ((TextView) view.findViewById(R.id.name)).getText().toString(); 
        String cost = ((TextView) view.findViewById(R.id.email)).getText().toString(); 
        String description = ((TextView) view.findViewById(R.id.mobile)).getText().toString(); 


        // Starting new intent 
        Intent in = new Intent(getApplicationContext(), SingleMenuItemActivity.class); 
        in.putExtra(TAG_NAME, name); 
        in.putExtra(TAG_EMAIL, cost); 
        in.putExtra(TAG_PHONE_MOBILE, description); 
        startActivity(in); 

       } 
      }); 



     } 



} 

내가 좋아하는 시도 : progressDialog in AsyncTask 하지만 결과는 항상 실패했다. 나는 아주 새로운 자바를 배울 수 있습니다.

+0

응용 프로그램이 고장 나거나 무슨 일이 일어 났습니까? – tyczj

+0

아니요, 데이터 수집이 진행될 때 ProgressDialog가 표시되지 않습니다 .. –

+0

'onCreate()'에서 전체 앱을 만들지 마십시오. 활동 라이프 사이클에 대해 알아보십시오. 'Activity'의 처음 설정시에만 onCreate()를 사용하십시오. – Simon

답변

0

대화 상자가 생성되기 전에 데이터가 완료 되었기 때문에 나타 났으므로 대화 상자가 취소되기 전에 대화 상자가 취소 된 것 같습니다. 테스트가 완료되면 대화 상자를 취소하고 그냥 놓아 두지 마십시오. 다이얼이 나타나면 문제가 발생합니다.

+0

일단 선을 없앤다 : progress.dismiss(); 물론 데이터는 ProgressDialog와 함께 나타납니다. 그러나 ProgressDialog는 프로세스가 시작되기 전에 나타나지 않습니다. 데이터가 목록보기에서 해제되기 전에 페이지가 비어 있습니다. ProgressDialog가 여기에 나타나서는 안됩니다. 어떻게해야합니까? –

+0

잘 처리기를 사용하여 두 번째 또는 두 번째로 대화 상자가 표시되도록 처리를 지연시킬 수 있지만 아무런 이유없이 사용자를 기다리게하는 것이 무의미한 것 같습니다. – tyczj

+0

예 ... 그렇게해서는 안됩니다 ... http://stackoverflow.com/questions/4538338/progressdialog-in-asynctask? 당신은 그것을 사용하는 것에 익숙합니까? –

관련 문제