List content observers

by Froens » Sat, 17 Jul 2010 02:27:41 GMT


Sponsored Links
 Hi there

I'm building an app that uses content observers.
My problem is, that I tend to register my content observers multiple
times. This causes my application to log events several times.
How do I find out, if my content observer is already registered?

- Frederik

--



Other Threads

1. How do i switch to new activity from a custom listview ?

Hi all,

I am in a situation like, i have custom list view. One button, with
listitems.

When i click the button, i need to switch the activity. But the
calls,
startActivityForResult(myIntent, 0);  --> is a non static call. I
couldnt initiate this function in onClickLIstener() for the button.

Dont know how to proceed with this situation ?

Can anyone help me out with this.?


Thanks in advance...!!


Thanks,
Mani



java file
-------------

package com.example.firstandroid;


import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLEncoder;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONObject;

import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

public class results extends ListActivity  {

        static String result="";
        private static String DATA[];
        private static String ADDR[];

        /**
         * Demonstrates how to write an efficient list adapter. The adapter
used in this example binds
         * to an ImageView and to a TextView for each row in the list.
         *
         * To work efficiently the adapter implemented here uses two
techniques:
         * - It reuses the convertView passed to getView() to avoid inflating
View when it is not necessary
         * - It uses the ViewHolder pattern to avoid calling findViewById()
when it is not necessary
         *
         * The ViewHolder pattern consists in storing a data structure in the
tag of the view returned by
         * getView(). This data structures contains references to the views
we want to bind data to, thus
         * avoiding calls to findViewById() every time getView() is invoked.
         */


    private static class EfficientAdapter extends BaseAdapter {
        private LayoutInflater mInflater;
        private Bitmap mIcon1;
        private Bitmap mIcon2;

        public EfficientAdapter(Context context) {
            // Cache the LayoutInflate to avoid asking for a new one
each time.
            mInflater = LayoutInflater.from(context);

            // Icons bound to the rows.
            mIcon1 =
BitmapFactory.decodeResource(context.getResources(),
R.drawable.next_arrow);
            mIcon2 =
BitmapFactory.decodeResource(context.getResources(),
R.drawable.next_arrow);
        }

        public int getCount() {
            return DATA.length+1;
        }
        public Object getItem(int position) {
            return position;
        }

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

        public View getView(int position, View convertView, ViewGroup
parent) {
            ViewHolder holder;
            if(position == 0)
            {
                   convertView = mInflater.inflate(R.layout.main1, null);
                   Button button =
(Button)convertView.findViewById(R.id.button);
                   button.setOnClickListener(mButtonListener);
            }
            else
            {
            if (convertView == null) {
                convertView = mInflater.inflate(R.layout.main2, null);
                holder = new ViewHolder();
                holder.title = (TextView)
convertView.findViewById(R.id.title);
                holder.address = (TextView)
convertView.findViewById(R.id.address);
                holder.icon = (ImageView)
convertView.findViewById(R.id.icon);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            holder.title.setText(DATA[position-1]);
            holder.address.setText(ADDR[position-1]);
            holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 :
mIcon2);
            }
            return convertView;
        }
        static class ViewHolder {
            TextView title;
            TextView address;
            ImageView icon;
        }
    }

    private static OnClickListener mButtonListener = new
OnClickListener() {
        public void onClick(View v) {
          Intent myIntent = new Intent(v.getContext(),
firstandroid.class);
// How do i switch to other activity from here ????
//          startActivityForResult(myIntent, 0);
  //        finish();
          sendSearchRequest(8);

         }
    };
   public static String sendSearchRequest(int count)
   {
        HttpClient client = new DefaultHttpClient();
        String query = "http://ajax.googleapis.com/ajax/services/search/local?
hl=en&v=1.0&q=paris hotel&start=";
        query+=count;
        try {
                URL url = new URL(query);
                URI uri = new URI(url.getProtocol(), url.getHost(), 
url.getPath(),
url.getQuery(), null);
                HttpGet request = new HttpGet(uri);
                HttpResponse response = client.execute(request);
                result+=Userrequest(response);
        }catch (URISyntaxException e){

        }
        catch(Exception ex){
          //txtResult.setText("Failed!");
      }
        return result;
   }
    public static String Userrequest(HttpResponse response){
            try{
                InputStream in = response.getEntity().getContent();
                BufferedReader reader = new BufferedReader(new
InputStreamReader(in));
                StringBuilder str = new StringBuilder();
                String line = null;
                while((line = reader.readLine()) != null){
                    str.append(line + "\n");
                }
                in.close();
                result = str.toString();

            }catch(Exception ex){
                result = "Error";
            }
            return result;
        }
    public static void updateData(String result)
    {
         try
        {
         JSONObject json=new JSONObject(result);
         JSONArray ja;
         json = json.getJSONObject("responseData");
         ja = json.getJSONArray("results");

         int resultCount = ja.length();
         DATA = new String[resultCount];
         ADDR = new String[resultCount];
         for (int i = 0; i < resultCount; i++)
           {
           JSONObject resultObject = ja.getJSONObject(i);
           DATA[i]=resultObject.get("titleNoFormatting").toString();
           JSONArray addr;
           addr = resultObject.getJSONArray("addressLines");
           int count = addr.length();
           ADDR[i]="";
           for(int j=0;j<count;j++)
           {
               ADDR[i]+=addr.getString(j);
               if(j==0)
                  ADDR[i]+=',';
           }
           }
         }
         catch(Exception e)
         {


         }
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        sendSearchRequest(0);
        updateData(result);
        setListAdapter(new EfficientAdapter(this));
    }

}


main2.xml
----------------

<?xml version="1.0" encoding="utf-8" ?>


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/
android" android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView android:id="@+id/title"
android:layout_gravity="center_vertical"
android:layout_width="0dip"
android:layout_weight="1.0"
android:layout_height="wrap_content" />
<TextView android:id="@+id/address"
android:layout_gravity="center_vertical"
android:layout_width="0dip"
android:layout_weight="1.0"
android:layout_height="wrap_content" />

<ImageView android:id="@+id/icon"
android:layout_gravity="center_vertical"
android:layout_width="30dip"
android:layout_height="30dip" />

</LinearLayout>

main1.xml
---------------------

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/
android"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:orientation="vertical" >
<Button android:id="@+id/button"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="More" />
</LinearLayout>


Thanks,
- mani

-- 

2. Creating and using a 鈥渃om mon platform鈥?jar in Android - what works?

UPDATE!

Hah... typical... when I moved all the resources out of my platform
and into my app I did not properly pass these down from the app layer.
Thus, the code example I gave had no error. Using an intent rather
than linking decouples "arguments passed" from "arguments expected" of
course - and the compiler does not complain. With a corrected app,
this works.

Though I'd think creating a binary distribution platform is not
uncommon, I'm not finding much doc on it so I'll keep adding any
significant findings as I open the doors ... hope it's of use to
someone.




-- 

3. EditText field not update, how to do this?

4. Same SMS is received multiple times- HTC Tattoo

5. Is MapController's zoomToSpan() execution deferred?

6. Goodbye friends and thanks for all the help.

7. Porting Android 2.0 on Samsung 360 M1