2017-10-06 66 views
-2

这是我的代码:应用程序崩溃,同时传输数据的Android

public class MainActivity extends AppCompatActivity { 

    ListView listView ; 

    ArrayList<String> StoreContacts, id; 
    Bundle bundle; 
    ArrayAdapter<String> arrayAdapter ; 
    Cursor cursor; 
    Intent intent; 
    String name, phonenumber ; 
    public static final int RequestPermissionCode = 1 ; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     listView = (ListView)findViewById(R.id.listview1); 



     StoreContacts = new ArrayList<String>(); 

     id = new ArrayList<String>(); 

     EnableRuntimePermission(); 



       GetContactsIntoArrayList(); 

       arrayAdapter = new ArrayAdapter<String>(
         MainActivity.this, 
         R.layout.contact_items_listview, 
         R.id.textView, StoreContacts 
       ); 

       listView.setAdapter(arrayAdapter); 




     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 



       bundle =new Bundle(); 

       /*SharedPreferences.Editor editor=getSharedPreferences("Suyash",MODE_PRIVATE).edit(); 

       editor.putString("ID",id.get(i)); 

       editor.apply();*/ 

       intent = new Intent(MainActivity.this, SingleContact.class); 

       bundle.putString("ID",id.get(i)); 

       intent.putExtra("ID",id.get(i)); 

       startActivity(intent); 

      } 
     }); 

    } 

    public void GetContactsIntoArrayList(){ 

     cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null, null, null); 

     while (cursor.moveToNext()) { 

      id.add(cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone._ID)));; 

      name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 

      phonenumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

      StoreContacts.add(name + " " + ":" + " " + phonenumber); 
     } 

     cursor.close(); 

    } 

    public void EnableRuntimePermission(){ 

     if (ActivityCompat.shouldShowRequestPermissionRationale(
       MainActivity.this, 
       Manifest.permission.READ_CONTACTS)) 
     { 

      Toast.makeText(MainActivity.this,"CONTACTS permission allows us to Access CONTACTS app", Toast.LENGTH_LONG).show(); 

     } else { 

      ActivityCompat.requestPermissions(MainActivity.this,new String[]{ 
        Manifest.permission.READ_CONTACTS}, RequestPermissionCode); 

     } 
    } 

    @Override 
    public void onRequestPermissionsResult(int RC, String per[], int[] PResult) { 

     switch (RC) { 

      case RequestPermissionCode: 

       if (PResult.length > 0 && PResult[0] == PackageManager.PERMISSION_GRANTED) { 

        Toast.makeText(MainActivity.this,"Permission Granted, Now your application can access CONTACTS.", Toast.LENGTH_LONG).show(); 

       } else { 

        Toast.makeText(MainActivity.this,"Permission Canceled, Now your application cannot access CONTACTS.", Toast.LENGTH_LONG).show(); 

       } 
       break; 
     } 

    } 
} 

在接收端:

public class SingleContact extends AppCompatActivity { 

    Bundle bundle=getIntent().getExtras(); 

    //SharedPreferences preferences=getSharedPreferences("Suyash",MODE_PRIVATE); 




    0String string = bundle.getString("ID",null); 

    Button button; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_single_contact); 

     button= (Button) findViewById(R.id.button); 

     //string= bundle.getString("ID"); 

     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Toast.makeText(SingleContact.this, string, Toast.LENGTH_SHORT).show(); 
      } 
     }); 

    } 
} 

的崩溃,当我点击该项目。 我也试过sharedpreference,它也做同样的事情。即时通讯使用android studio 2.3.3。 任何人都建议我应该做什么。 请帮助

+3

你可以分享你的崩溃报告 –

+1

@Suyash Shrivastava你不能得到的onCreate前束()把你的包代码中的onCreate(){ 束束= getIntent()getExtras()。 String string = bundle.getString(“ID”,null); } –

+0

好的,让我试试看。 –

回答

2

的onCreate之前,你不能得到包()。编写你的代码如下所示,它会解决你的错误。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_single_contact); 
    // Your bundle code. 
    Bundle bundle=getIntent().getExtras(); 
    String string = bundle.getString("ID",null); 
} 
+0

谢谢你的工作 –

+0

@SuyashShrivastava欢迎先生。您可以接受答案,以便管理员可以关闭此问题。 –

0

大概束的错误初始化在SingleContact活动数据,你应该初始化内部的onCreate方法

public class SingleContact extends AppCompatActivity { 

    Bundle bundle; 
    String string; 
    Button button; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_single_contact); 
     bundle = getIntent().getExtras() 
     button= (Button) findViewById(R.id.button); 

     string= bundle.getString("ID"); 

     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Toast.makeText(SingleContact.this, string, Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 
}