2014-12-22 3 views
0

Я использую вкладки в activity_main.xml с 3 вкладками, каждый с фрагментами ... в tab1 я разбираю данные json в виде списка и сгенерирован успешно .... мой вопрос здесь всякий раз, когда я переходил на другие вкладки и возвращался на 1-ю вкладку, список в tab1 генерируется снова, и он дважды показывает данные ..... я хочу знать, как избавиться от этого ..... СПАСИБО В ADVANCEJson parsing in fragments listview android

FragmentA.class

enter code here 


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

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

import android.app.ProgressDialog; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.SimpleAdapter; 
import android.widget.TextView; 

public class FragmentA extends Fragment { 


ListView list; 
TextView pm; 
TextView sp; 
ArrayList<HashMap<String, String>> mlist = new ArrayList<HashMap<String,String>>(); 
    //URL to get JSON Array 
    private static String url = "http://10.0.2.2:80/json/apple.php"; 
    //JSON Node Names 
    private static final String TAG_APPLE = "Apple"; 
    private static final String TAG_PHONEMODEL = "PhoneModel"; 
    private static final String TAG_SPECS = "specs"; 

    JSONArray model = null; 
public FragmentA() { 
    // Required empty public constructor 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View v = inflater.inflate(R.layout.fragment_a, container, false); 
    return v; 
} 
@Override 
public void onResume() { 
    // TODO Auto-generated method stub 
    super.onResume(); 
    new mparse().execute(); 
} 
public void apple(){ 

    mlist = new ArrayList<HashMap<String,String>>(); 
} 
private class mparse extends AsyncTask<String, String, JSONObject>{ 

    private ProgressDialog pDialog; 
    @Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 
     super.onPreExecute(); 
     pm = (TextView)getView().findViewById(R.id.phonemodel); 
     sp = (TextView)getView().findViewById(R.id.specification); 

     pDialog = new ProgressDialog(getActivity()); 
     pDialog.setMessage("Getting Data ..."); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(true); 
     pDialog.show(); 
    } 
    @Override 
    protected JSONObject doInBackground(String... arg0) { 
     // TODO Auto-generated method stub 
     JSONParser jParser = new JSONParser(); 
     // Getting JSON from URL 
     JSONObject json = jParser.getJSONFromUrl(url); 
     return json; 

    } 
    @Override 
    protected void onPostExecute(JSONObject json) { 
     // TODO Auto-generated method stub 
     pDialog.dismiss(); 
     try { 
      // Getting JSON Array 
      model = json.getJSONArray("Apple"); 

      for(int i = 0 ; i< model.length(); i++){ 

      JSONObject c = model.getJSONObject(i); 

      String phonemodel = c.getString(TAG_PHONEMODEL); 
      String specs = c.getString(TAG_SPECS); 

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

      map.put(TAG_PHONEMODEL, phonemodel); 
      map.put(TAG_SPECS, specs); 

      mlist.add(map); 

      list = (ListView)getView().findViewById(R.id.listView1); 

      ListAdapter adapter = new SimpleAdapter(getActivity(), mlist, R.layout.list, new String[] {TAG_PHONEMODEL}, new int[] {R.id.phonemodel}); 

      list.setAdapter(adapter); 
list.setOnItemClickListener(new OnItemClickListener() { 


       @Override 
       public void onItemClick(AdapterView<?> arg0, View arg1, 
         int position, long arg3) { 
        // TODO Auto-generated method stub 

        getActivity().setContentView(R.layout.specification); 

        try { 
         JSONObject obj = model.getJSONObject(position); 
         String sp = (String) obj.getString(TAG_SPECS); 
         TextView s = (TextView)getView().findViewById(R.id.specification); 

         s.setText(sp); 


        } catch (JSONException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 


       } 

      }); 
    } 
}catch(JSONException e){ 
    e.printStackTrace(); 
} 
    } 
} 
} 

Вход кошка

12-22 18:36:35.286: I/Process(713): Sending signal. PID: 713 SIG: 9 
12-22 18:36:38.366: D/gralloc_goldfish(728): Emulator without GPU emulation detected. 
12-22 18:36:39.256: D/dalvikvm(728): GC_CONCURRENT freed 188K, 10% free 6001K/6663K, paused 8ms+8ms 
12-22 18:36:40.695: D/AndroidRuntime(728): Shutting down VM 
12-22 18:36:40.695: W/dalvikvm(728): threadid=1: thread exiting with uncaught exception  (group=0x409961f8) 
12-22 18:36:40.715: E/AndroidRuntime(728): FATAL EXCEPTION: main 
12-22 18:36:40.715: E/AndroidRuntime(728): java.lang.NullPointerException 
12-22 18:36:40.715: E/AndroidRuntime(728): at com.ss6.FragmentA$mparse$1.onItemClick(FragmentA.java:132) 
12-22 18:36:40.715: E/AndroidRuntime(728): at android.widget.AdapterView.performItemClick(AdapterView.java:292) 
12-22 18:36:40.715: E/AndroidRuntime(728): at android.widget.AbsListView.performItemClick(AbsListView.java:1058) 
12-22 18:36:40.715: E/AndroidRuntime(728): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2514) 
12-22 18:36:40.715: E/AndroidRuntime(728): at android.widget.AbsListView$1.run(AbsListView.java:3168) 
12-22 18:36:40.715: E/AndroidRuntime(728): at android.os.Handler.handleCallback(Handler.java:605) 
12-22 18:36:40.715: E/AndroidRuntime(728): at android.os.Handler.dispatchMessage(Handler.java:92) 
12-22 18:36:40.715: E/AndroidRuntime(728): at android.os.Looper.loop(Looper.java:137) 
12-22 18:36:40.715: E/AndroidRuntime(728): at android.app.ActivityThread.main(ActivityThread.java:4340) 
12-22 18:36:40.715: E/AndroidRuntime(728): at java.lang.reflect.Method.invokeNative(Native Method) 
12-22 18:36:40.715: E/AndroidRuntime(728): at java.lang.reflect.Method.invoke(Method.java:511) 
12-22 18:36:40.715: E/AndroidRuntime(728): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
12-22 18:36:40.715: E/AndroidRuntime(728): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
12-22 18:36:40.715: E/AndroidRuntime(728): at dalvik.system.NativeStart.main(Native Method) 
+0

Вы переписываете свой материал, а затем читаете его в mlist. Просто сделайте mlist.clear() до mlist.add() – rupps

+0

@rupps спасибо за предложение ur, это сработало ... – aswin

+0

@rupps на той же проге, когда я нажимаю на список, он получает ошибку и закрывает проект ..... – aswin

ответ

0

Вы вызываете WebService в onResume так каждый раз, когда onResume вызывается служба будет называться, который INTURN добавляет данные в список.

этот раздел здесь

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

     map.put(TAG_PHONEMODEL, phonemodel); 
     map.put(TAG_SPECS, specs); 

     mlist.add(map); 

, если вы действительно хотите, чтобы вызвать службу в onResume, вам необходимо инициализировать список первой пустой список, так что если будет добавлено данные, которые он должен был бы свежий список ,