2013-02-20 58 views
0

我目前有這個類,它解析json網址,並藉助Lazy Adapter類和後臺線程將圖像和文本加載到列表視圖中。管理Android應用程序中的後臺線程

每個列表項都包含一個圖像視圖和2個文本視圖。

我想爲每個生成的列表項創建彈出框(警報對話框)。警報對話框將具有將調用其他應用程序的選項。

我的問題:

難道是明智的,代碼在這個類此警告對話框的功能?我擔心目前有很多東西在後臺完成,可能會影響應用程序的功能。

如果沒有人可以建議另一種方式來做到這一點。謝謝。

的Json活動課:

public class JsonActivity extends SherlockActivity{ 

private ProgressDialog progressDialog; 

    // JSON Node names 


    static final String TAG_NAME = "name"; 
    static final String TAG_IMAGEURL = "imageurl"; 

    ListView list; 
    LazyAdapter adapter; 

    String chartUrl; 

    String[] urlNames = new String[] { 
      "urls..." 

      }; 

// chartItemList is the array list that holds the chart items 
    ArrayList<HashMap<String, String>> chartItemList = new ArrayList<HashMap<String, 
     String>>(); 

    //Holds imageurls 
    ArrayList<String> imageurls = new ArrayList<String>(); 


    JsonParser Parser = new JsonParser(); 
// JSONArray 
    JSONArray chartItems = null; 

    /** Called when the activity is first created. */  
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.chart); 

     //Get the bundle 
     Bundle bundle = getIntent().getExtras(); 

     //Extract the data from the bundle 
     int chartIndex = bundle.getInt("chartIndex"); 
     String chartUrl = urlNames[chartIndex]; 

     setTitle(bundle.getString("chartname")); 



     //url from where the JSON has to be retrieved 
     String url = chartUrl; 

     //Check if the user has a connection 

     ConnectivityManager cm = (ConnectivityManager) 
      getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo info = cm.getActiveNetworkInfo(); 
     if (info != null) { 
      if (!info.isConnected()) { 
       Toast.makeText(this, "Please check your connection and try again.", 
      Toast.LENGTH_SHORT).show(); 
      } 

      //if positive, fetch the articles in background 
      else new getChartItems().execute(chartUrl); 
     } 

     //else show toast 
     else { 
      Toast.makeText(this, "Please check your connection and try again.", 
      Toast.LENGTH_SHORT).show(); 
     } 

    } 


    class getChartItems extends AsyncTask<String, String, String> { 

     // Shows a progress dialog while setting up the background task 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      progressDialog = new ProgressDialog(JsonActivity.this); 
      progressDialog.setMessage("Loading chart..."); 
      progressDialog.setIndeterminate(false); 
      progressDialog.setCancelable(false); 
      progressDialog.show(); 
     } 

     //Gets the json data for chart items data and presents it in a list view 
     @Override 
     protected String doInBackground(String... args) { 

     String json = Parser.getJSONFromUrl(args[0]); 
      String imageurl; 
     String rank; 
     String name;    
     String url; 

      try{ 


      chartItems = new JSONArray(json); 

      JSONObject json_data=null; 

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

       json_data = chartItems.getJSONObject(i); 

       //Retrieves the value of the name from the json object 

       name=json_data.getString("name"); 

       //Retrieves the image url for that object and adds it to an arraylist 
       imageurl=json_data.getString("imageurl"); 
       //imageurls.add(imageurl); 

       HashMap<String, String> hashMap = new HashMap<String, String>(); 
       // adding each child node to HashMap key => value 
       //hashMap.put(TAG_RANK, rank); 
       hashMap.put(TAG_NAME, name); 
       hashMap.put(TAG_IMAGEURL, imageurl); 


       // adding HashMap to ArrayList 
        chartItemList.add(hashMap); 

      } 


       ; 
      } 

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

      runOnUiThread(new Runnable() { 
       public void run() { 


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

        // Getting adapter by passing xml data ArrayList 
        adapter = new LazyAdapter(JsonActivity.this, chartItemList); 
        list.setAdapter(adapter); 

        // Click event for single list row 
        list.setOnItemClickListener(new OnItemClickListener() { 

         @Override 
         public void onItemClick(AdapterView<?> parent, View view, 
           int position, long id) { 

         } 
        }); 




       } 
      }); 
      return null; 
     } 

     //Removes the progress dialog when the data has been fetched 
     protected void onPostExecute(String args) { 
      progressDialog.dismiss(); 
     } 
    } 

}

回答

1

我這個答案是肯定的,它是足夠的智慧來實現一個多級網絡通訊至於您的使用情況證明是值得的。

這取決於溝通渠道(EDGE/3G/4G/WiFi)和應用程序的用例。從技術上講,只要你在背景中做這件事,這是非常可能的。它也取決於你正在加載的列表的大小。最好的方法來檢查這是通過實現可插入代碼並嘗試。

相關問題