Error in passing data
-
12-12-2019 - |
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
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)