0

私は現在、このクラスを持っています。このクラスは、json URLを解析し、レイジーアダプタークラスとバックグラウンドスレッドを使用して画像とテキストをリストビューにロードします。

各リストアイテムは、画像ビューと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();
        }
    }

}

4

1 に答える 1

1

これに対する私の答えは「はい」です。ユースケースが正当化する限り、もう 1 つのレベルのネットワーク通信を実装するのが賢明です。

これは、通信チャネル (EDGE/ 3G/ 4G/ WiFi) とアプリケーションのユースケースによって異なります。技術的には、これをバックグラウンドで実行している限り、ほとんど可能です。また、ロードするリストのサイズにも依存します。これを確認する最善の方法は、プラグ可能なコードを実装して試してみることです。

于 2013-02-20T09:20:37.173 に答える