问题描述:

Introduction:

I have the following set up:

  1. A MainActivity with methods onNewIntent and processNewIntent, the MainActivity also implements FragmentActivity; and has a tabbed fragment which implements FragmentList

  2. A listaddactivity activity that creates a new Parcelable listControlObject

  3. The listaddactivity activity sends an intent carrying a parcel which then reconstructs the listControlObject inside of the MainActivity's onNewIntent and processNewIntent class.

  4. However; I can take in the intent into my onNewIntent method and it constructs the new listControlObject fine; but when I call the adapter.notifyDataSetChanged method on my FragmentList class.

Logcat error:

03-24 04:18:44.149: E/Trace(16964): error opening trace file: No such file or directory (2)

03-24 04:18:49.543: E/AndroidRuntime(16964): FATAL EXCEPTION: main

03-24 04:18:49.543: E/AndroidRuntime(16964): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.nanospark.upcdemo/com.nanospark.upcdemo.MainActivity}: java.lang.NullPointerException

03-24 04:18:49.543: E/AndroidRuntime(16964): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)

03-24 04:18:49.543: E/AndroidRuntime(16964): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2211)

03-24 04:18:49.543: E/AndroidRuntime(16964): at android.app.ActivityThread.access$600(ActivityThread.java:149)

03-24 04:18:49.543: E/AndroidRuntime(16964): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1300)

03-24 04:18:49.543: E/AndroidRuntime(16964): at android.os.Handler.dispatchMessage(Handler.java:99)

03-24 04:18:49.543: E/AndroidRuntime(16964): at android.os.Looper.loop(Looper.java:153)

03-24 04:18:49.543: E/AndroidRuntime(16964): at android.app.ActivityThread.main(ActivityThread.java:4987)

03-24 04:18:49.543: E/AndroidRuntime(16964): at java.lang.reflect.Method.invokeNative(Native Method)

03-24 04:18:49.543: E/AndroidRuntime(16964): at java.lang.reflect.Method.invoke(Method.java:511)

03-24 04:18:49.543: E/AndroidRuntime(16964): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821)

03-24 04:18:49.543: E/AndroidRuntime(16964): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)

03-24 04:18:49.543: E/AndroidRuntime(16964): at dalvik.system.NativeStart.main(Native Method)

03-24 04:18:49.543: E/AndroidRuntime(16964): Caused by: java.lang.NullPointerException

03-24 04:18:49.543: E/AndroidRuntime(16964): at com.nanospark.upcdemo.MainActivity.processNewIntent(MainActivity.java:102)

03-24 04:18:49.543: E/AndroidRuntime(16964): at com.nanospark.upcdemo.MainActivity.onCreate(MainActivity.java:81)

03-24 04:18:49.543: E/AndroidRuntime(16964): at android.app.Activity.performCreate(Activity.java:5020)

03-24 04:18:49.543: E/AndroidRuntime(16964): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)

03-24 04:18:49.543: E/AndroidRuntime(16964): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)

03-24 04:18:49.543: E/AndroidRuntime(16964): ... 11 more

The onNewIntent method:

 @Override

protected void onNewIntent(Intent intent) {

super.onNewIntent(intent);

processNewIntent(intent);

}

The processNewIntent method:

private void processNewIntent(Intent intent) {

cyclefragment = new cycleviewfragment();

Log.d("TEST", "METHOD CALLED TEST");

if (intent.hasExtra("custom_object")) {

if (intent.getParcelableExtra("custom_object").equals(null)) {

Log.d("Testing null", "Object is null");

} else {

Log.d("Testing null", "Object is not null");

cyclefragment.getA1().add((listControlObject)

intent.getParcelableExtra("custom_object"));

cyclefragment.adapter.notifyDataSetChanged();

}

}

The specific line that throws the nullpointerexception:

 cyclefragment.adapter.notifyDataSetChanged(); // - THIS IS LINE 102

The ListFragment class:

public class cycleviewfragment extends ListFragment {

public View cycleviewfragment;

public ArrayList<listControlObject> a1 = new ArrayList<listControlObject>();

public ArrayAdapter<listControlObject> adapter;

public Button addButton;

public Context context;

public View onCreateView(LayoutInflater viewInflation, ViewGroup container,

Bundle SavedInstantState) {

cycleviewfragment = viewInflation.inflate(

R.layout.cycleviewfragment_page, container, false);

context = getActivity().getApplicationContext();

a1.add(new listControlObject(1, "Name", 1, 1, 1, 1, 1, 1, 1, 1, 1));

adapter = new ArrayAdapter<listControlObject>(getActivity()

.getApplicationContext(), android.R.layout.simple_list_item_1,

a1);

this.setListAdapter(adapter);

addButton = (Button) cycleviewfragment.findViewById(R.id.addbutton);

addButton.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

Intent myIntent = new Intent(getActivity(),

listaddactivity.class);

// myIntent.putExtra("Array", a1); // Optional parameters

getActivity().startActivity(myIntent);

}

});

return cycleviewfragment;

}

public ArrayAdapter<listControlObject> getAdapter() {

return adapter;

}

public void setAdapter(ArrayAdapter<listControlObject> adapter) {

this.adapter = adapter;

}

public ArrayList<listControlObject> getA1() {

return a1;

}

public void setA1(ArrayList<listControlObject> a1) {

this.a1 = a1;

}

}

网友答案:

Try this:

if (cyclefragment != null && cyclefragment.adapter != null) {
    cyclefragment.adapter.notifyDataSetChanged();
}
相关阅读:
Top