2012-10-02 16 views
0

데이터베이스에서 가져온 이름의 목록보기가 있습니다. 목록의 이름을 클릭하면 데이터베이스에서 이름의 세부 정보를 가져 와서 이름을 다음으로 전달해야합니다. 클래스를 검색하는 클래스입니다. 한 클래스에서 다른 클래스로 이름을 전달하려고합니다. 틀린 문자열을 전달하는지 또는 문자열의 이름을 잘못된 방법으로 얻는 지 나는 모른다. 데이터를 전달하는 중 오류가 발생했습니다.

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 : 당신이 savedInstanceState Bundle에서 문자열을 얻기 위해 노력하고

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 

답변

1

나는 내가 그 목적이 번들을 추가하기 전에 내 번들 정보를 채우기 위해 계속 os.Bundle 개체를 인스턴스화 할 필요가 찾을 수 있습니다.

contact.java 코드를 읽도록 수정하십시오.

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

그리고 다시 작동하는지 확인하십시오.

편집

문제는 String nameclicked = ((TextView)view).getText().toString();이는 연락처 이름, "nishanth"를 반환하는 장기를 반환하지 않는다는 것입니다! 이것은 logcat 로그에서 명확합니다.

10-02 10 : 30 : 23.064 : E는/AndroidRuntime (1045) java.lang.NumberFormatException의 :에 의한 잘못된 긴 "nishanth는"

((TextView)view) 의해 반환 도면이다 전화 번호가 아니라 연락처 "name_clicked"에 의해 암시 된 이름입니다. 이보기를 변경하여 전화 번호를 타겟팅하십시오. 전화 번호에는 "+"및 "-"기호가 포함될 수 있으므로 선택한 전화 번호를 검색하는 구현은 바보가 아닙니다.

+0

시도했지만 작동하지 않았습니다. 전체 코드를 붙여 넣었습니다. 제발보십시오 – chitranna

+0

간단한 문제입니다. 정보의 어떤 비트와 혼동하는 것 같습니다. 내 업데이트 된 답변보기 – OceanLife

1

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; 
     } 
    } 

} 

로그 캣. 싶은 것은 activity을 시작 Intent에서 String를 받고 있습니다 :

getIntent().getStringExtra("name_clicked"); 

편집 :

당신이 LongString name을 구문 분석을 시도하고 있기 때문에 그것은있을 수 있습니다. 이름이 모두 숫자라고 확신합니까?

당신이 viewcontact.java 점점 들어

viewintent.putExtra("name_clicked", nameclicked); 

을 통과시키기위한 스택 트레이스

+0

로그 고양이와 함께 전체 코드를 업데이트했습니다. – chitranna

+0

이전에 지적했듯이 문제는 Long에 문자가 들어있는 String을 구문 분석하려고한다는 것입니다. Contact.java에서 잘못된 값을 전달하거나 코드 구현을 재고해야합니다. 전화 번호는 일반적으로 숫자로 된 다른 값을 포함 할 수 있으므로 long으로 저장하면 안됩니다. DBContact의 getPphone (l) 메소드를 String 대신 매개 변수로 받아들이도록하는 것이 좋습니다. – Rob

1

을 제공 할 것입니다 경우에도 문제가 핀 포인트에 쉬울 것

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

편집 ----------

문자열을 다른 활동에 붙잡은 후 잡는다면 문자열에서 으로 변환하려고 시도했습니다. 당신이 NumberFormatException이에게 점점 그 이유

참조하십시오 ViewContact.java의 23 당신이 문자열을 변환하는 선 없음. 내가 번들로 정보를 전달하고 때

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

at com.example.contactlist.ViewContact.onCreate(ViewContact.java:23) 
+0

Didnt work :(. 내 전체 코드를 붙여 넣었습니다. 제발 보십시요 – chitranna

+0

내 대답을 편집했습니다. 이 오류가 발생하는 이유는 문자열을 길게 변환하는 것입니다. –

1

우리가 가진 아주 가득이 다 리스크 사용되는 아이디어를 사용 세터와 게터가

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);   
       } 
      }   
     }); 

이 두 번째 활동

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); 

를 클릭하여이 문제를보고이 세터와 게터 클래스

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; 
    }  

} 
입니다
+0

여전히 작동하지 않습니다. 전체 코드를 붙여 넣었습니다. 제발보십시오. – chitranna

관련 문제