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);
}
}
Publiez le logcat du téléphone s'il vous plaît – Egor
Vous devez fournir trace de logcat. Il est difficile de tracer le problème sans logcat. – Hasandroid
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. –