2017-12-26 32 views
1

API 25 일, 그것은 NULL을 반환합니다. 예를 들어intent.getParcelableExtra() API 23 일에 있지만 나는 <code>intent.getParcelableExtra()</code>이 <strong>API 25</strong>에 <strong>API (23)</strong> 아니라에서 잘 작동이 이상한 문제가 있습니다

사용자 클래스 : 여기

내가 적은 코드로 문제를 재현하는 방법이다

public class User implements Parcelable { 
    private String name; 
    private int age; 

    public User(String name, int age) { 
     this.name = name; 
     this.age =age; 
    } 

    @Override 
    public int describeContents() { 
     return 0; 
    } 

    @Override 
    public void writeToParcel(Parcel out, int flags) { 
     out.writeString(name); 
     out.writeInt(age); 
    } 

    public User(Parcel in) { 
     this.name = in.readString(); 
     this.age = in.readInt(); 
    } 

    public static final Parcelable.Creator<User> CREATOR = new Parcelable.Creator<User>() { 
     @Override 
     public User createFromParcel(Parcel source) { 
      return new User(source); 
     } 

     @Override 
     public User[] newArray(int size) { 
      return new User[size]; 
     } 
    }; 
} 

MainActivity :

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     /*setting view*/ 

     AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
     Intent intent = new Intent(this, AlarmReceiver.class); 
     User user = new User("test", 25); 
     intent.putExtra("user", user); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
     alarmManager.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 3000, pendingIntent); 

    } 
} 

그리고 수신기

public class AlarmReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     android.os.Debug.waitForDebugger(); 
     User user = intent.getParcelableExtra("user"); 
    } 
} 

나는 디버거를 사용하여 실행을 중지하고 사용자 개체를 수신기에서 평가합니다.

에뮬레이터 안드로이드 6.0 API 레벨 23 사용 : 내 휴대 전화 안드로이드 7.1.2 API 레벨 25을 사용하는 경우 사용자가 제대로 전달을하지만, : 사용자가 어떤 도움에 감사드립니다 NULL

입니다.

+1

https://commonsware.com/blog/2016/07/22/be-careful-where-you-use-custom-parcelables.html – CommonsWare

답변

0

CommonsWare 덕분에 문제를 이해할 수있었습니다. 그것은 Android와 관련이있는 것으로 보이며 사용 방법을 제외하고는 우리가 할 수있는 일이 없습니다. 여전히 Parcelable를 사용하고자하는 사람들을 위해

, 이것을 사용 : 나를 위해 How to marshall and unmarshall a Parcelable to a byte array with help of Parcel?

가, 내가 (JSON을 사용하여) 파일로 통과 할 개체를 저장 한 후, 나는 같은 파일의 이름을 통과 문자열을 AlarmManager에 입력 한 다음 수신기에서 파일을 읽으십시오.

+0

이 대답을 수락하십시오. 다른 사람들을 도울 것이고 답이없는 질문 목록에서이 질문을 삭제할 것입니다. –