2013-10-28 7 views
0

JSON에서 응답하는 API가 있습니다. 버튼을 클릭하면 JSON을 쉽게 구문 분석하고 listview에서 구현합니다. 문제는 이전 액티비티로 돌아가서 버튼을 다시 한 번 클릭하면 값이 반복되는 것입니다. 즉 이전 값도 finish()를 호출했습니다. in listview 활동의 일시 중지 상태. 다음은 내 코드입니다.Listview에서 값이 두 번 표시됩니다.

송장 클래스

public class Invoice extends Activity{ 

public static ArrayList<HashMap<String, String>> ModuleName = new ArrayList<HashMap<String, String>>(); 

boolean tree = true; 
ArrayList<String> KEY = new ArrayList<String>(); 
ListView mListView; 
ProgressBar mProgress; 
JSONObject json; 
JSONArray Module_list = null; 
Invoice_adapter adapter; 

    public static String KEY_SUCCESS = "success"; 
    public static String KEY_ERROR = "error"; 
    public static String KEY_ERROR_MSG = "error_msg"; 
    public static String KEY_MODULELIST_MODULEHEADER = "moduleHeader"; 
    public static String KEY_MODULELIST_MODULELIST = "moduleList"; 
    public static String KEY_MODULELIST_DATAFOUND = "datafound"; 


    public static String KEY_INVOICE_INVOICENO = ""; 
    public static String KEY_INVOICE_SUBJECT = ""; 
    public static String KEY_INVOICE_SALESORDER = ""; 
    public static String KEY_INVOICE_STATUS = ""; 
    public static String KEY_INVOICE_TOTAL = ""; 
    public static String KEY_INVOICE_ASSIGNEDTO = ""; 
    public static String KEY_INVOICE_RECORDID = ""; 
    public static String KEY_INVOICE_ACTION = ""; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_module_data); 

    mListView = (ListView) findViewById(R.id.module_list); 
    mProgress = (ProgressBar) findViewById(R.id.progressBar1); 


    try { 
     json = new ParseDATA().execute().get(); 
    } catch (InterruptedException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } catch (ExecutionException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 


    try { 
     if (json.getString(KEY_SUCCESS) != null) { 
      String res = json.getString(KEY_SUCCESS); 
      if(Integer.parseInt(res) == 1){ 

       String data_found = json.getString(KEY_MODULELIST_DATAFOUND); 

       if (data_found.equals("Data Found!")){ 




       JSONArray array = json.getJSONArray(KEY_MODULELIST_MODULELIST); 

       int count1 = array.length(); 
       String Count1 = Integer.toString(count1); 
       Log.d("Count_array", Count1); 

       JSONObject keyarray = array.getJSONObject(0); 
      @SuppressWarnings("rawtypes") 
      Iterator temp = keyarray.keys(); 
        while (temp.hasNext()) { 
           String curentkey = (String) temp.next(); 
           KEY.add(curentkey); 


        } 


        Collections.sort(KEY, String.CASE_INSENSITIVE_ORDER); 

        KEY_INVOICE_ACTION = KEY.get(0); 
        KEY_INVOICE_ASSIGNEDTO = KEY.get(1); 
        KEY_INVOICE_INVOICENO = KEY.get(2); 
        KEY_INVOICE_RECORDID = KEY.get(3); 
        KEY_INVOICE_SALESORDER = KEY.get(4); 
        KEY_INVOICE_STATUS = KEY.get(5); 
        KEY_INVOICE_SUBJECT = KEY.get(6); 
        KEY_INVOICE_TOTAL = KEY.get(7); 



        Log.d("Parsing Json class", " ---- KEYS---- " + KEY); 


       Module_list = json.getJSONArray(KEY_MODULELIST_MODULELIST); 

       int count = Module_list.length(); 
       String Count = Integer.toString(count); 
       Log.d("Count_Module_LIST", Count); 

       // looping through All Contacts 
       for(int i = 0; i < Module_list.length(); i++){ 
        JSONObject c = Module_list.getJSONObject(i); 

        // Storing each json item in variable 
        String mAction = c.getString(KEY_INVOICE_ACTION); 
        String mAssignedTo = c.getString(KEY_INVOICE_ASSIGNEDTO); 
        String mInvoice = c.getString(KEY_INVOICE_INVOICENO); 
        String mRecordid = c.getString(KEY_INVOICE_RECORDID); 
        String mSalesorder = c.getString(KEY_INVOICE_SALESORDER); 
        String mStatus = c.getString(KEY_INVOICE_STATUS); 
        String mSubject = c.getString(KEY_INVOICE_SUBJECT); 
        String mTotal = c.getString(KEY_INVOICE_TOTAL); 
        // creating new HashMap 

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

        // adding each child node to HashMap key => value 
        map.put(KEY_INVOICE_ACTION, mAction); 
        map.put(KEY_INVOICE_ASSIGNEDTO, mAssignedTo); 
        map.put(KEY_INVOICE_INVOICENO, mInvoice); 
        map.put(KEY_INVOICE_RECORDID, mRecordid); 
        map.put(KEY_INVOICE_SALESORDER, mSalesorder); 
        map.put(KEY_INVOICE_STATUS, mStatus); 
        map.put(KEY_INVOICE_SUBJECT, mSubject); 
        map.put(KEY_INVOICE_TOTAL, mTotal); 


        // adding HashList to ArrayList 


        ModuleName.add(map);     

       } 
      }else 
      { 
       Toast.makeText(getApplicationContext(), "No Data", Toast.LENGTH_LONG).show(); 
       return; 
      } 
      } 

      mProgress.setVisibility(View.INVISIBLE);     
      adapter = new Invoice_adapter(Invoice.this, ModuleName); 
      mListView.setAdapter(adapter); 
      mListView.setVisibility(View.VISIBLE); 
      //mListView.invalidateViews(); 

     } 
      else 
      { 

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

       // adding each child node to HashMap key => value 
       map.put(KEY_ERROR, "Error"); 
       ModuleName.add(map); 
       //JSONObject json_user = json.getJSONObject("user"); 
       //error_message = json_user.getString(KEY_ERROR_MSG); 
      } 


    }catch (JSONException e) { 

     e.printStackTrace(); 
     Toast.makeText(getApplicationContext(), "Something went wrong.Please try again.!!", Toast.LENGTH_LONG).show(); 

    } 


} 



class ParseDATA extends AsyncTask<Void, String,JSONObject > 

    { 


     ProgressDialog dialog = new ProgressDialog(Invoice.this); 




     @Override 
     protected void onPreExecute() { 
      // TODO Auto-generated method stub 

      dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
      dialog.setTitle("Loading"); 
      dialog.setIndeterminate(true); 
      dialog.setMessage("Please wait"); 
      dialog.setCancelable(false); 
      dialog.show(); 

     } 



     @Override 
     protected JSONObject doInBackground(
       Void... params) { 
      // TODO Auto-generated method stub 

      UserFunctions userFunction = new UserFunctions(); 

      JSONObject json = userFunction.getModuleList("1", "20", "Invoice"); 

      return json; 
     } 


     @Override 
     protected void onPostExecute(JSONObject result) { 
      // TODO Auto-generated method stub 

      dialog.dismiss(); 

     } 
    } 



@Override 
protected void onPause() { 
    // TODO Auto-generated method stub 
    super.onPause(); 
    Toast.makeText(getApplicationContext(), "PAUSE STATE", Toast.LENGTH_LONG).show(); 
    finish(); 
}} 

어댑터 클래스

public class Invoice_adapter extends BaseAdapter { 


private Activity activity; 
private ArrayList<HashMap<String, String>> data; 
private static LayoutInflater inflater=null; 


public Invoice_adapter(Activity a, ArrayList<HashMap<String, String>> d) { 
    activity = a; 
    data=d; 
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 


public int getCount() { 
    return data.size(); 
} 

public Object getItem(int position) { 
    return data.get(position); 

} 

public long getItemId(int position) { 
    return position; 
} 



public View getView(int position, View convertView, ViewGroup parent) { 
    View vi=convertView; 

    if(convertView==null) 

     vi = inflater.inflate(R.layout.activity_module_data_detail, null); 

    TextView title = (TextView)vi.findViewById(R.id.textView1); // category title name 
    //ImageView moduleImage = (ImageView) vi.findViewById(R.id.recipe_image); 
    HashMap<String, String> song = new HashMap<String, String>(); 
    song = data.get(position); 

    Log.i("list", ""+data.get(position)); 
    //Log.i("list", data); 

    String ff = song.get(Invoice.KEY_INVOICE_SUBJECT); 

    title.setText(ff); 
    //moduleImage.setImageResource(mModuleImages[position]); 

    return vi; 


}} 

제발 도와주세요 .. !! 나는 내가 뭘 잘못하고 있는지 알지 못한다. 미리 감사드립니다. Value is added twice when I go app and reclicked on the button even I finished this activity.The json responds only one item but now it is binding two

+0

이것은 동일한 요소 집합이 두 개 있기 때문에 발생합니다. 데이터 저장소를 확인하십시오. –

+0

확인했습니다. 모든 요소는 다른 이름으로 지정됩니다. –

답변

3

문제 값은 애플리케이션의 종료까지 유지되는 것을 의미하는 클래스가로드 될 때

public static ArrayList<HashMap<String, String>> ModuleName = new ArrayList<HashMap<String, String>>(); 

정적 변수 만 초기화 ArrayList를위한 「static」키워드로 인 방법.

새 데이터를로드하기 전에 배열 목록의 정적 키워드를 제거하거나 배열 목록을 지우십시오.

ModuleName.clear(); 
+0

고마워요. 문제 해결됨..!!! –

+0

나는 그 어리석은 실수를했다고 믿는다. 어쨌든 고마워요. @ 모한 –

+0

@MohitRakhra하지만 당신은 "당신이 중복되지 않았 음을 확인했습니다."?????? –

관련 문제