Question

I have a listview of names(imported from database).When a name on the list is clicked,I want to get the details of the name from the database so I have to pass the name to the next class where I am retrieving the details.I am trying to pass a name from one class to another class. I don't know if I am passing the string wrong or getting the name of the string in a wrong way.

contact.java:

public class Contacts extends Activity implements OnClickListener {
    int NewContact_Request_Code = 1;
    Button newcontact;
    ListView listview;
    public static final String LOG_TAG = "Contacts";
    int mInt = 0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.contactview);// Set the content to contactview.xml

        // newcontact = NEW CONTACT button
        // listview = MyList List View
        newcontact = (Button) findViewById(R.id.baddcontact);
        listview = (ListView) findViewById(R.id.mylist);

        // Make a New Database
        DBContact info = new DBContact(this);
        // Open , get Information from database and close it
        info.open();
        String[] data = info.queryAll();
        info.close();
        // listview = getListView();
        listview.setTextFilterEnabled(true);
        // Display the names
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(Contacts.this,
                android.R.layout.simple_list_item_1, data);
        listview.setAdapter(adapter);
        listview.setOnItemClickListener(new OnItemClickListener() {

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

                String nameclicked = ((TextView)view).getText().toString();
                Intent viewintent = new Intent(Contacts.this, ViewContact.class);
                viewintent.putExtra("name_clicked", nameclicked);
                startActivity(viewintent);

            }
        });
        newcontact.setOnClickListener(this);

    }

    public void onClick(View v) {
        // TODO Auto-generated method stub
        Intent newintent = new Intent(Contacts.this, AddNewContact.class);
        // start activity for result - to get the name of the new contact
        startActivityForResult(newintent, 0);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);
        // pass the value of the string via cursor and update the list
    }

}

viewcontact.java:

public class ViewContact extends Activity implements OnClickListener {
    Button ViewPPhone, ViewHPhone, ViewOPhone, EditContact;
    TextView ViewName;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.viewcontact);
        savedInstanceState = getIntent().getExtras();
        String name = savedInstanceState.getString("name_clicked");
        Long l = Long.parseLong(name);
        DBContact getdetails = new DBContact(this);
        getdetails.open();
        String returnedname = getdetails.getName(l);
        String returnedpphone = getdetails.getPphone(l);
        String returnedhphone = getdetails.getHphone(l);
        String returnedophone = getdetails.getOphone(l);
        getdetails.close();
        ViewName.setText(returnedname);
        ViewPPhone.setText(returnedpphone);
        ViewHPhone.setText(returnedhphone);
        ViewOPhone.setText(returnedophone);

        EditContact = (Button) findViewById(R.id.bEditContact);
        EditContact.setOnClickListener(this);
        ViewPPhone = (Button) findViewById(R.id.ViewPersonalPhoneNumber);
        ViewPPhone.setOnClickListener(this);
        ViewHPhone = (Button) findViewById(R.id.ViewHomePhoneNumber);
        ViewHPhone.setOnClickListener(this);
        ViewOPhone = (Button) findViewById(R.id.ViewOfficePhoneNumber);
        ViewOPhone.setOnClickListener(this);

    }

    public void onClick(View view) {
        // TODO Auto-generated method stub
        switch (view.getId()) {
        case R.id.ViewPersonalPhoneNumber:
        /*  Intent dialpersonalphone = new
            Intent(android.content.Intent.ACTION_DIAL,
            Uri.parse("returnedpphone"));
            startActivity(dialpersonalphone );*/
            break;

        case R.id.ViewHomePhoneNumber:
            /*Intent dialhome = new
            Intent(android.content.Intent.ACTION_DIAL,
            Uri.parse("returnedhphone"));
            startActivity(dialhome);*/
            break;

        case R.id.ViewOfficePhoneNumber:
            /*Intent dialoffice = new
            Intent(android.content.Intent.ACTION_DIAL,
            Uri.parse("returnedophone"));
            startActivity(dialoffice);*/
            break;

        case R.id.bEditContact:
            startActivity(new Intent("com.example.contactlist.EDITCONTACT"));
            break;
        }
    }

}

LOGCAT

10-02 10:30:23.064: E/AndroidRuntime(1045): FATAL EXCEPTION: main
10-02 10:30:23.064: E/AndroidRuntime(1045): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.contactlist/com.example.contactlist.ViewContact}: java.lang.NumberFormatException: Invalid long: "nishanth"
10-02 10:30:23.064: E/AndroidRuntime(1045):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
10-02 10:30:23.064: E/AndroidRuntime(1045):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
10-02 10:30:23.064: E/AndroidRuntime(1045):     at android.app.ActivityThread.access$600(ActivityThread.java:130)
10-02 10:30:23.064: E/AndroidRuntime(1045):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
10-02 10:30:23.064: E/AndroidRuntime(1045):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-02 10:30:23.064: E/AndroidRuntime(1045):     at android.os.Looper.loop(Looper.java:137)
10-02 10:30:23.064: E/AndroidRuntime(1045):     at android.app.ActivityThread.main(ActivityThread.java:4745)
10-02 10:30:23.064: E/AndroidRuntime(1045):     at java.lang.reflect.Method.invokeNative(Native Method)
10-02 10:30:23.064: E/AndroidRuntime(1045):     at java.lang.reflect.Method.invoke(Method.java:511)
10-02 10:30:23.064: E/AndroidRuntime(1045):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
10-02 10:30:23.064: E/AndroidRuntime(1045):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-02 10:30:23.064: E/AndroidRuntime(1045):     at dalvik.system.NativeStart.main(Native Method)
10-02 10:30:23.064: E/AndroidRuntime(1045): Caused by: java.lang.NumberFormatException: Invalid long: "nishanth"
10-02 10:30:23.064: E/AndroidRuntime(1045):     at java.lang.Long.invalidLong(Long.java:125)
10-02 10:30:23.064: E/AndroidRuntime(1045):     at java.lang.Long.parse(Long.java:362)
10-02 10:30:23.064: E/AndroidRuntime(1045):     at java.lang.Long.parseLong(Long.java:353)
10-02 10:30:23.064: E/AndroidRuntime(1045):     at java.lang.Long.parseLong(Long.java:319)
10-02 10:30:23.064: E/AndroidRuntime(1045):     at com.example.contactlist.ViewContact.onCreate(ViewContact.java:23)
10-02 10:30:23.064: E/AndroidRuntime(1045):     at android.app.Activity.performCreate(Activity.java:5008)
10-02 10:30:23.064: E/AndroidRuntime(1045):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
10-02 10:30:23.064: E/AndroidRuntime(1045):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
10-02 10:30:23.064: E/AndroidRuntime(1045):     ... 11 more
Was it helpful?

Solution

when I am passing information with bundles I find that I need to instantiate an os.Bundle object which I then go on to populate with my bundle information before adding this bundle to the intent.

Modify your contact.java code to read;

    Intent viewintent = new Intent(Contacts.this, ViewContact.class);
    final Bundle bundle = new Bundle();
    bundle.putString("name_clicked", nameclicked);
    viewintent.putExtras(bundle);
    startActivity(viewintent);

and re-run to see if that works.

EDIT

The problem is that String nameclicked = ((TextView)view).getText().toString(); doesn't return a long- it returns the contact name, "nishanth"! This is clear in the logcat log which states;

10-02 10:30:23.064: E/AndroidRuntime(1045): Caused by: java.lang.NumberFormatException: Invalid long: "nishanth"

The view returned by ((TextView)view) is not the phone number- rather it is the name of the contact as alluded to by your key "name_clicked". Change this view to target the phone number. Note that a phone number can contain "+" and "-" symbols so this implementation of retrieving the selected phone number is not fool-proof.

OTHER TIPS

you're trying to get the String from the savedInstanceState Bundle. What you want to do is getting the String from the Intent that started the activity:

getIntent().getStringExtra("name_clicked");

EDIT:

It might be because you're trying to parse the String name into a Long. Are you sure the name is all numbers?

It would also be easier to pin-point the problem if you'd provide a stacktrace

see this we got idea Use setter and getters it is very use full this lisk click

 list.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                      

                Object  ob = (Object) view.getTag();                 
                if(ob != null) 
                {                       
                    Data da = (Data) view.getTag();              
                    String a = da.getSelected();
                    String a1 = da.getfunction();
                    int a2 = da.getImage();

                    Log.i(" val one " ,"_" +a);
                    Log.i(" val two ", "_"  +a1);
                    Log.i(" val three","_" +a2); 

                    Intent intent = new Intent(ListMobileActivity.this, Display.class);                         
                    intent.putExtra("passed", a);
                    intent.putExtra("passed1", a1);     
                    intent.putExtra("passed2" ,a2);                      

                    startActivity(intent);          
                }
            }        
        });

this second activity

 TextView text = (TextView)findViewById(R.id.textView);
            TextView text1 = (TextView)findViewById(R.id.textView1);
            ImageView image = (ImageView)findViewById(R.id.imageView);

            message = getIntent().getExtras().getString("passed");
            message1 = getIntent().getExtras().getString("passed1");
            message2 = getIntent().getExtras().getInt("passed2");                          

            text.setText(message);
            text1.setText(message1);
            image.setBackgroundResource(message2);  

and this is setter and getter class

   public class Data {

    private String first;
    private String value;   
    private int image; 

    public void setSelected(String str) {
        this.first = str;
    }
    public String getSelected() {
        return first;
    }
    public void setfunction(String string) {
        this.value = string;
    }
    public String getfunction() {
        return value;
    }
    public void setImage(int image2) {
        this.image = image2;
    }
    public int getImage() {
        return image;
    }    

}

For passing

viewintent.putExtra("name_clicked", nameclicked);

For getting in viewcontact.java

String name = getIntent().getStringExtra("name_clicked");

Edit----------

You are sending a string to another activity then after catching it tried to convert that string to long.

For that reason you are getting NumberFormatException

Please see ViewContact.java's 23 no line where you are converting string to long.

Caused by: java.lang.NumberFormatException: Invalid long: "nishanth"

at com.example.contactlist.ViewContact.onCreate(ViewContact.java:23)
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top