2011-06-30 2 views
1

L'activité suivante se lance bien dans mon émulateur mais montre un message d'erreur quand je l'essaie et le lance sur un vrai téléphone android.Je ne sais pas quel est le problème. Je ne sais pas comment je peux obtenir le coz l'erreur est dans le téléphone. Voici le code:Le code fonctionne sur l'émulateur mais pas sur le vrai téléphone android

package com.messageHider; 

import java.util.ArrayList; 

import android.app.Activity; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.database.Cursor; 
import android.net.Uri; 
import android.os.Bundle; 
import android.provider.ContactsContract; 
import android.telephony.PhoneNumberUtils; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ListView; 
import android.widget.SimpleCursorAdapter; 
import android.widget.TextView; 
import android.widget.Toast; 

public class sms extends Activity implements OnItemClickListener 
{ 
    ListView listViewSMS; 
    Button addMenuItem; 
    Uri smsUri=Uri.parse("content://sms"); 
    Uri contactUri=ContactsContract.Contacts.CONTENT_URI; 
    Uri phoneUri=ContactsContract.CommonDataKinds.Phone.CONTENT_URI; 
    Cursor cursor; 
    SimpleCursorAdapter adapter; 
    public String menu_name; 
    private SharedPreferences prefs; 
    public static final String PREFERENCE_FILE="prefs"; 
    public long sms_id; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.sms); 
     listViewSMS=(ListView)findViewById(R.id.listViewsms); 
     listViewSMS.setOnItemClickListener(this); 
    } 
    @Override 
    protected void onStart() { 
     super.onStart(); 
     getsms(); 
    } 
    private void getsms() 
    { 
     int count=cursor.getCount(); 
     String[]sender_number=new String[count]; 
     String[]sender_names=new String[count]; 
     String[]contact_id=new String[count]; 
     int counter=0; 
     while(cursor.moveToNext()) 
     { 
      sender_number[counter]=cursor.getString(cursor.getColumnIndex("address")); 
      counter++; 
     } 
     int mycounter=0; 
     for(int x=0;x<sender_number.length;x++) 
     { 
      Cursor mycursor=getContentResolver().query(phoneUri,null,ContactsContract.CommonDataKinds.Phone.NUMBER+"=?" ,new String[]{PhoneNumberUtils.formatNumber(sender_number[x])}, null); 
      while(mycursor.moveToNext()) 
      { 
       contact_id[mycounter]=mycursor.getString(mycursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID)); 
       mycounter++; 
      } 
     } 
     int names_counter=0; 
     for(int i=0;i<contact_id.length;i++) 
     { 
      if(contact_id[i]!=null) 
      { 
      Cursor cursor_names=getContentResolver().query(contactUri, null, ContactsContract.Contacts._ID+"=?", new String[]{contact_id[i]}, null); 
      while(cursor_names.moveToNext()) 
      { 
       sender_names[names_counter]=cursor_names.getString(cursor_names.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
       names_counter++; 
      } 
      } 
     } 
     //Populate the list with the array content 
     ArrayList<String>arrayList=new ArrayList<String>(); 
     for(int j=0;j<sender_names.length;j++) 
     { 
      if(!arrayList.contains(sender_names[j])) 
      { 
       arrayList.add(sender_names[j]); 
      } 
     } 
     ArrayAdapter<String> sendersArrayAdapter=new ArrayAdapter<String>(getApplicationContext(),android.R.layout.simple_list_item_1,arrayList); 
     listViewSMS.setAdapter(sendersArrayAdapter); 
    } 
    @Override 
    public void onItemClick(AdapterView<?> arg0, View v, int position, long id) { 
     String sender=((TextView)v).getText().toString(); 
     Toast.makeText(getApplicationContext(),sender,Toast.LENGTH_LONG).show(); 
     prefs=getSharedPreferences(PREFERENCE_FILE, 0); 
     SharedPreferences.Editor editor=prefs.edit(); 
     editor.putString("smsid", String.valueOf(id)); 
     editor.putString("smssender", sender); 
     editor.commit(); 
     Intent intent=new Intent(sms.this,contactsmses.class); 
     intent.putExtra("sender",sender); 
     startActivity(intent); 
    } 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflator=getMenuInflater(); 
     inflator.inflate(R.menu.smsmenu, menu); 
     return super.onCreateOptionsMenu(menu); 
    } 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch(item.getItemId()) 
     { 
     case R.id.itemAutoHide: 
      startActivity(new Intent(sms.this,autohide.class)); 
      break; 
     case R.id.itemHiddenMessages: 
      startActivity(new Intent(sms.this,hiddenMessages.class)); 
      break; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

} 
+2

Publiez le logcat du téléphone s'il vous plaît – Egor

+0

Vous devez fournir trace de logcat. Il est difficile de tracer le problème sans logcat. – Hasandroid

+1

Un problème évident avec votre code est que vous avez beaucoup d'accès à la base de données sur le thread de l'interface utilisateur, ce qui est une très mauvaise idée car cela rendrait votre application inerte et pourrait même entraîner des ANR. Essayez de faire votre base de données dans une asyncTask ou un service. Je ne pense pas que ce soit la cause de votre problème directement, cependant. –

Répondre

1

Vous n'êtes pas INITIALISATION cursor avant de commencer à l'utiliser au début de getsms(), et cela jette un NullPointerException.

Je serais extrêmement surpris si cela fonctionnait dans l'émulateur.

Questions connexes