我的应用程序以一种意想不到的方式崩溃。每当我运行应用程序的mainactivity时,它就会被执行。但当我点击ID为"R.ID.msgnow"的按钮时,我的应用程序崩溃了。我尝试了之前在stackoverflow中给出的所有解决方案,验证了我的manifest.xml,一切似乎都是正确的。但我仍然搞不清是什么原因导致了崩溃。任何建议都会很有帮助。感谢
MainActivity.class
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button now = (Button) findViewById(R.id.msgnow);
assert now != null;
now.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
try {
Intent i = new Intent(MainActivity.this, Msg_now.class);
startActivity(i);
}
catch (ActivityNotFoundException e){
e.printStackTrace();
}
// Toast.makeText(getApplicationContext(), "Add SMS..", Toast.LENGTH_LONG).show();
}
});
}
}
Msg_now.class
public class Msg_now extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_msg_now);
EditText cN = (EditText) findViewById(R.id.enter_recipients);
EditText msgContent = (EditText) findViewById(R.id.msg_content);
Button find = (Button) findViewById(R.id.add_contacts);
assert find != null;
final String contactName = cN.getText().toString();
final String messageContent = msgContent.getText().toString();
Button send = (Button) findViewById(R.id.msg_send);
Intent myIntent = new Intent(this,Contacts.class);
myIntent.putExtra("mytext",contactName);
startActivity(myIntent);
assert send != null;
send.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
try {
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(contactName, null, messageContent, null, null);
}
catch (IllegalArgumentException e) {
e.printStackTrace();
Toast.makeText(Msg_now.this, "Recepient or message content missing.", Toast.LENGTH_SHORT).show();
}
}
});
find.setOnClickListener(new View.OnClickListener(){
public void onClick(View view){
Intent i = new Intent(Msg_now.this, Contacts.class);
startActivity(i);
}
});
}
}
联系人.java
public class Contacts extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contacts);
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
ContactsFragment fragment = new ContactsFragment();
fragmentTransaction.add(R.id.contacts, fragment);
fragmentTransaction.commit();
/*getFragmentManager().beginTransaction()
.add(R.id.contacts, new ContactsFragment() )
.commit();*/
}
}
ContactFragment.java
public class ContactsFragment extends Fragment implements LoaderManager.LoaderCallbacks<Cursor>, AdapterView.OnItemClickListener {
// The column index for the _ID column
private static final int CONTACT_ID_INDEX = 0;
// The column index for the LOOKUP_KEY column
private static final int LOOKUP_KEY_INDEX = 1;
@SuppressLint("InlinedApi")
private static final String[] PROJECTION =
{
ContactsContract.Contacts._ID,
ContactsContract.Contacts.LOOKUP_KEY,
Build.VERSION.SDK_INT
>= Build.VERSION_CODES.HONEYCOMB ?
ContactsContract.Contacts.DISPLAY_NAME_PRIMARY :
ContactsContract.Contacts.DISPLAY_NAME
};
@SuppressLint("InlinedApi")
private static final String SELECTION =
Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ?
ContactsContract.Contacts.DISPLAY_NAME_PRIMARY + " LIKE ?" :
ContactsContract.Contacts.DISPLAY_NAME + " LIKE ?";
// Defines a variable for the search string
Intent intent = getActivity().getIntent();
private String mSearchString = intent.getStringExtra("mytext");
// Defines the array to hold values that replace the ?
private String[] mSelectionArgs = { mSearchString };
private final static String[] FROM_COLUMNS = {
Build.VERSION.SDK_INT
>= Build.VERSION_CODES.HONEYCOMB ?
ContactsContract.Contacts.DISPLAY_NAME_PRIMARY :
ContactsContract.Contacts.DISPLAY_NAME
};
private final static int[] TO_IDS = {
android.R.id.text1
};
ListView mContactsList;
// Define variables for the contact the user selects
// The contact's _ID value
long mContactId;
// The contact's LOOKUP_KEY
String mContactKey;
// A content URI for the selected contact
Uri mContactUri;
// An adapter that binds the result Cursor to the ListView
private SimpleCursorAdapter mCursorAdapter;
//constructor
public ContactsFragment() {}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the fragment layout
return inflater.inflate(R.layout.contacts,container, false);
}
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// Gets the ListView from the View list of the parent activity
mContactsList = (ListView) getActivity().findViewById(R.id.list);
// Gets a CursorAdapter
mCursorAdapter = new SimpleCursorAdapter(
getActivity(),
R.layout.contacts,
null,
FROM_COLUMNS, TO_IDS,
0);
mContactsList.setAdapter(mCursorAdapter);
mContactsList.setOnItemClickListener(this);
getLoaderManager().initLoader(0, null, this);
}
@Override
public void onItemClick(
AdapterView<?> parent, View item, int position, long rowID) {
// Get the Cursor
Cursor cursor = mCursorAdapter.getCursor();
// Move to the selected contact
cursor.moveToPosition(position);
// Get the _ID value
mContactId = Long.valueOf(CONTACT_ID_INDEX);
// Get the selected LOOKUP KEY
mContactKey = Integer.toString(LOOKUP_KEY_INDEX);
// Create the contact's content Uri
mContactUri = ContactsContract.Contacts.getLookupUri(mContactId, mContactKey);
/*
* You can use mContactUri as the content URI for retrieving
* the details for a contact.
*/
}
@Override
public Loader<Cursor> onCreateLoader(int loaderId, Bundle args) {
/*
* Makes search string into pattern and
* stores it in the selection array
*/
mSelectionArgs[0] = "%" + mSearchString + "%";
// Starts the query
return new CursorLoader(
getActivity(),
ContactsContract.Contacts.CONTENT_URI,
PROJECTION,
SELECTION,
mSelectionArgs,
null
);
}
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
// Put the result Cursor in the adapter for the ListView
mCursorAdapter.swapCursor(cursor);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
// Delete the reference to the existing Cursor
mCursorAdapter.swapCursor(null);
}
}
---
我的错误------崩溃的开始
11-05 00:39:21.040 2393-2393/com.example.nishant.textontym E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.nishant.textontym, PID: 2393
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.nishant.textontym/com.example.nishant.textontym.Msg_now}: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.nishant.textontym/com.example.nishant.textontym.ContactsFragment}; have you declared this activity in your AndroidManifest.xml?
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.nishant.textontym/com.example.nishant.textontym.ContactsFragment}; have you declared this activity in your AndroidManifest.xml?
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1794)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1512)
at android.app.Activity.startActivityForResult(Activity.java:3917)
at android.app.Activity.startActivityForResult(Activity.java:3877)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:842)
at android.app.Activity.startActivity(Activity.java:4200)
at android.app.Activity.startActivity(Activity.java:4168)
at com.example.nishant.textontym.Msg_now.onCreate(Msg_now.java:27)
at android.app.Activity.performCreate(Activity.java:6237)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
11-05 00:39:26.263 2393-2393/com.example.nishant.textontym I/Process: Sending signal. PID: 2393 SIG: 9
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.nishant.textontym">
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.SEND_SMS" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".Contacts" />
<activity android:name=".Msg_now"></activity>
</application>
Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.nishant.textontym/com.example.nishant.textontym.ContactsFragment}; have you declared this activity in your AndroidManifest.xml?
调用清单中未声明的com.example.nishant.textontym.ContactsFragment
活动,或者如果ContactsFragment是Fragment,则必须将其添加到活动中,不能通过intent调用。