0

Pls가이 오류가 발생하는 이유를 알려 줄 수 있습니까? .. 내 코드를 검사하고 다시 검사 한 결과 모든 것이 정상적으로 보입니다. 내가 그것을 실행할 때, 그것은 나에게이 오류 java.lang.RuntimeException가 있습니다 이유하지만 난 모르겠어요 :) 를 Looper.prepare을 (호출하지 스레드 내부 핸들러를 만들 수 없습니다 여기에 내 자바 코드RunTimeException 오류

public class Sync extends ListActivity implements OnClickListener { 
// Progress Dialog 
private ProgressDialog pDialog; 

//cursor loader 
SimpleCursorAdapter mAdapter; 

List<HashMap<String, String>> contactList; 

private static final String DisplayName=""; 
private static final String Given=""; 
private static final String Family=""; 
private static final String NickName=""; 
private static final String HomePhone=""; 
private static final String MobilePhone=""; 
private static final String WorkPhone=""; 
private static final String HomeEmail=""; 
private static final String WorkEmail=""; 
private static final String CompanyName=""; 
private static final String Title=""; 
ArrayList<String> list; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    //ContactHoldObject co; 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.test); 
    //ListView contactView = (ListView) findViewById(R.id.list); 
    contactList = new ArrayList<HashMap<String, String>>(); 

    registerForContextMenu(getListView()); 
    // Loading products in Background Thread 
    new LoadAllContacts().execute(); 

} 

    class LoadAllContacts extends AsyncTask<String, String, String> { 


     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      pDialog = new ProgressDialog(Sync.this); 
      pDialog.setMessage("Loading list of training centers. Please wait..."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(false); 
      pDialog.show(); 
     } 
     /** 
     * getting All contacts 
     * */ 
     protected String doInBackground(String... args) { 
      Uri contactsUri = ContactsContract.Contacts.CONTENT_URI; 
     // Querying the table ContactsContract.Contacts to retrieve all the contacts 
     Cursor contactsCursor = getContentResolver().query(contactsUri, null, null, null, 
       ContactsContract.Contacts.DISPLAY_NAME + " ASC "); 
     // ContactHoldObject.contactinfo =new ContactInfo[contactsCursor.getCount()]; 
     //co=new ContactHoldObject(); 
     try{ 


     if(contactsCursor.moveToFirst()){ 
      do{ 
       long contactId = contactsCursor.getLong(contactsCursor.getColumnIndex("_ID")); 

       Uri dataUri = ContactsContract.Data.CONTENT_URI; 

      // creating new HashMap 
       HashMap<String, String> map = new HashMap<String, String>(); 
       Cursor dataCursor = getContentResolver().query(dataUri, null, 
         ContactsContract.Data.CONTACT_ID + "=" + contactId, 
         null, null); 


       String displayName=""; 
       String given=""; 
       String family=""; 
       String nickName=""; 
       String homePhone=""; 
       String mobilePhone=""; 
       String workPhone=""; 
       String homeEmail=""; 
       String workEmail=""; 
       String companyName=""; 
       String title=""; 

       displayName=dataCursor.getString(dataCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
       //contactView. 
       map.put(DisplayName, displayName); 

       if(dataCursor.moveToFirst()){ 

        String whereName = ContactsContract.Data.MIMETYPE + " = ? AND " + ContactsContract.CommonDataKinds.StructuredName.CONTACT_ID + " = " + contactId; 
        String[] whereNameParams = new String[] { ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE }; 
        Cursor nameCur = getContentResolver().query(ContactsContract.Data.CONTENT_URI, null, whereName, whereNameParams, ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME); 
        while (nameCur.moveToNext()) { 
         if(nameCur.getString(nameCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME)) != null 
           && !nameCur.getString(nameCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME)).equals("")){ 
          given = nameCur.getString(nameCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME)); 
         }else{ 
          given="No firstname"; 
         } 
         map.put(Given, given); 
         /*given = nameCur.getString(nameCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME)); 
         family = nameCur.getString(nameCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME)); 
         displayName = dataCursor.getString(dataCursor.getColumnIndex(ContactsContract.Data.DISPLAY_NAME)); 
         String string = nameCur.getString(nameCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.DATA13));*/ 

         /*System.out.println("Name: " + given + " Family: " + family + " Displayname: " + display + "MIDDLE_NAME"+MIDDLE_NAME+"PHONETIC_FAMILY_NAME"+PHONETIC_FAMILY_NAME+" PHONETIC_MIDDLE_NAME: "+PHONETIC_MIDDLE_NAME+"PREFIX :"+PREFIX+ "SUFFIX :" +SUFFIX+"DATA1:: "+DATA1+ "DATA1 :"+DATA1);*/ 
        }nameCur.close(); 
        do{ 

         // Getting NickName 
         if(dataCursor.getString(dataCursor.getColumnIndex("mimetype")).equals(ContactsContract.CommonDataKinds.Nickname.CONTENT_ITEM_TYPE)) 
          nickName = dataCursor.getString(dataCursor.getColumnIndex("data1")); 
         //System.out.println("nickName "+nickName); 
         // Getting Phone numbers 
         if(dataCursor.getString(dataCursor.getColumnIndex("mimetype")).equals(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)){ 
          switch(dataCursor.getInt(dataCursor.getColumnIndex("data2"))){ 
          case ContactsContract.CommonDataKinds.Phone.TYPE_HOME : 
           homePhone = dataCursor.getString(dataCursor.getColumnIndex("data1")); 
           break; 
          case ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE : 
           mobilePhone = dataCursor.getString(dataCursor.getColumnIndex("data1")); 
           break; 
          case ContactsContract.CommonDataKinds.Phone.TYPE_WORK : 
           workPhone = dataCursor.getString(dataCursor.getColumnIndex("data1")); 
           break; 
          } 
         } 


         if(dataCursor.getString(dataCursor.getColumnIndex("mimetype")).equals(ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)) { 
          switch(dataCursor.getInt(dataCursor.getColumnIndex("data2"))){ 
          case ContactsContract.CommonDataKinds.Email.TYPE_HOME : 
           homeEmail = dataCursor.getString(dataCursor.getColumnIndex("data1")); 
           break; 
          case ContactsContract.CommonDataKinds.Email.TYPE_WORK : 
           workEmail = dataCursor.getString(dataCursor.getColumnIndex("data1")); 
           break; 
          } 
         } 

         // Getting Organization details 
         if(dataCursor.getString(dataCursor.getColumnIndex("mimetype")).equals(ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE)){ 
          companyName = dataCursor.getString(dataCursor.getColumnIndex("data1")); 
          title = dataCursor.getString(dataCursor.getColumnIndex("data4")); 
         } 



        }while(dataCursor.moveToNext()); 
        String details = ""; 
        String email=" "; 
        // Concatenating various information to single s 
        if(homePhone != null && !homePhone.equals("")) 
         details = "HomePhone : " + homePhone + "\n"; 
        if(mobilePhone != null && !mobilePhone.equals("")) 
         details += "MobilePhone : " + mobilePhone + "\n"; 
        if(workPhone != null && !workPhone.equals("")) 
         details += "WorkPhone : " + workPhone + "\n"; 
        if(nickName != null && !nickName.equals("")) 
         details += "NickName : " + nickName + "\n"; 
        if(homeEmail != null && !homeEmail.equals("")){ 
         details += homeEmail + "\n"; 
         email=homeEmail; 
        } 
        if(workEmail != null && !workEmail.equals("")){ 
         details += workEmail + "\n"; 
         email=workEmail; 
        } 
        if(companyName != null && !companyName.equals("")) 
         details += "CompanyName : " + companyName + "\n"; 
        if(title != null && !title.equals("")) 
         details += "Title : " + title + "\n"; 

        if(details!= null && !details.equals("")){ 
         // System.out.println(given+"\n"+details); 


         // adding each child node to HashMap key => value 

         map.put(Family, family); 
         map.put(NickName, nickName); 
         map.put(HomePhone, homePhone); 
         map.put(WorkPhone, workPhone); 
         map.put(HomeEmail, homeEmail); 
         map.put(MobilePhone, mobilePhone); 
         map.put(WorkEmail, workEmail); 
         map.put(CompanyName, companyName); 
         map.put(Title, title); 



         // adding HashList to ArrayList 
         contactList.add(map); 
         list = new ArrayList<String>(map.values()); 
         //addContacts(given,email); 
        } 
       }dataCursor.close(); 
      }while(contactsCursor.moveToNext()); 
     }contactsCursor.close(); 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
      Toast.makeText(getBaseContext(), "can't get it", Toast.LENGTH_LONG).show(); 

     } 

     return null; 
    } 

     protected void onPostExecute(String file_url) { 
      // dismiss the dialog after getting all products 
      pDialog.dismiss(); 
      // updating UI from Background Thread 
      runOnUiThread(new Runnable() { 
       public void run() { 
        /** 
        * Updating parsed JSON data into ListView 
        * */ 
        ListAdapter adapter = new SimpleAdapter(
          Sync.this, contactList, 
          R.layout.trackrow, new String[] { 
            DisplayName}, 
          new int[] { R.id.textName }); 
        // updating listview 
        setListAdapter(adapter); 

       } 
      }); 

     } 
     //return "success"; 
} 
    @Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
     Map<String,String> item = (Map<String, String>) l.getItemAtPosition(position); 

    } 
    @Override 
public boolean onContextItemSelected(MenuItem item) { 
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); 
return true; 
} 

@Override 
public void onClick(View arg0) { 
    // TODO Auto-generated method stub 


} 
} 
+0

를 사용할 수 없습니다? 토스트 하나? – user2336315

+0

pls, 귀하의 질문을 이해할 수 없습니다 .. – uchman21

답변

0

UI가 아닌 스레드 (doInBackGround)에서 UI 작업을 수행하려고합니다.

Toast.makeText(getBaseContext(), "can't get it", Toast.LENGTH_LONG).show(); 

봅니다 doInBackGround이 토스트를 제거하거나 toast을 표시 runonUithead를 사용합니다.

그리고 onPostExecute 이미 UI 스레드에서 실행하지 않아도이 추가 어떤 행에 runonUiThread

+0

하지만 이제는 나에게주는 05-25 18 : 14 : 13.598 : E/AndroidRuntime (19206) : 원인 : android.database.CursorIndexOutOfBoundsException : 크기 7 – uchman21