【发布时间】:2020-08-30 12:45:31
【问题描述】:
我正在开发 Android_Q。尝试从 Android 进行 AB OTA 更新 应用。已提供更新引擎所需的信息。
E/MessageQueue-JNI:java.lang.NullPointerException:尝试调用 接口方法'布尔 android.os.IUpdateEngine.bind(android.os.IUpdateEngineCallback)' 在一个 空对象引用
public class MainActivity extends Activity {
private static final String TAG = "OTAupdate";
private UpdateEngine mUpdateEngine;
private final UpdateEngineCallbackImpl
mUpdateEngineCallback = new UpdateEngineCallbackImpl();
float progress;
int status;
ProgressBar progressBar;
Button startButton, pauseButton, stopButton;
boolean paused;
Context mContext;
private static String[] getInfo() {
return new String[]{
"FILE_HASH=/hcckhsjkchjhkjdhjk=",
"FILE_SIZE="22112",
"METADATA_HASH=wFVt2qsadadaddd",
"METADATA_SIZE=3353"
};
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startButton = (Button) findViewById(R.id.btn1);
pauseButton = (Button) findViewById(R.id.btn2);
stopButton = (Button) findViewById(R.id.btn3);
setupButtonListeners();
UECallback cb = new UECallback();
mUpdateEngine = new UpdateEngine();
}
class UpdateEngineCallbackImpl extends UpdateEngineCallback {
@Override
public void onStatusUpdate(int status, float percent) {
}
@Override
public void onPayloadApplicationComplete(int errorCode) {
Log.d(TAG,"onPayloadApplicationComplete");
}
}
@Override
public void onStart() {
super.onStart();
}
@Override
public void onRestart() {
super.onRestart();
}
@Override
public void onPause() {
super.onPause();
}
@Override
public void onStop() {
super.onStop();
}
private class UECallback extends android.os.UpdateEngineCallback {
public void onStatusUpdate(int aStatus, float aPercent) {
progress = aPercent * 100;
status = aStatus;
progressBar.setProgress(Math.round(progress), true);
Log.e(TAG, "current progress is" + (int) progress+"--status--"+aStatus);
}
public void onPayloadApplicationComplete(int errCode) {
Log.e(TAG, "Payload application complete, error:" + Integer.toString(errCode));
if (errCode == 0) {
Log.e(TAG, "Installation succeeded!");
}
}
}
private void setupButtonListeners() {
startButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Log.e(TAG, "####### start clicked");
mUpdateEngine.bind(new UpdateEngineCallback() {
@Override
public void onStatusUpdate(int i, float v) {
}
@Override
public void onPayloadApplicationComplete(int i) {
}
});
mUpdateEngine.applyPayload("file:///data/ota_package/payload.bin",0, 22112,getInfo());
}
});
pauseButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Log.e(TAG, "###### pause clicked");
if (paused) {
paused = false;
mUpdateEngine.resume();
pauseButton.setText("resume");
return;
}
paused = true;
pauseButton.setText("pause");
mUpdateEngine.suspend();
}
});
stopButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Log.e(TAG, "###### stop clicked");
mUpdateEngine.cancel();
paused = false;
}
});
}
}
但出现以下错误:
java.lang.NullPointerException: Attempt to invoke interface method 'boolean android.os.IUpdateEngine.bind(android.os.IUpdateEngineCallback)' on a null object reference
完整的错误日志:
(standard input):4838:05-13 09:50:48.563 3590 6403 I ActivityTaskManager: START u0
{act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000
pkg=com.example.android.systemupdatersample
cmp=com.example.android.systemupdatersample/.ui.MainActivity} from uid 1000
(standard input):4844:05-13 09:50:48.708 3590 3629 I ActivityManager: Start proc
6998:com.example.android.systemupdatersample/u0a58 for activity
{com.example.android.systemupdatersample/com.example.android.systemupdatersample.ui.MainActivity}
(standard input):4864:05-13 09:50:49.189 6998 6998 E AndroidRuntime: Process:
com.example.android.systemupdatersample, PID: 6998
(standard input):4865:05-13 09:50:49.189 6998 6998 E AndroidRuntime: java.lang.RuntimeException:
Unable to start activity
ComponentInfo
{com.example.android.systemupdatersample/com.example.android.systemupdatersample.ui.MainActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'boolean
android.os.IUpdateEngine.bind(android.os.IUpdateEngineCallback)' on a null object reference
standard input):4881:05-13 09:50:49.189 6998 6998 E AndroidRuntime: at
com.example.android.systemupdatersample.ui.MainActivity.onCreate(MainActivity.java:110)
(standard input):4887:05-13 09:50:49.195 3590 6403 W ActivityTaskManager: Force finishing activity
com.example.android.systemupdatersample/.ui.MainActivity
(standard input):4903:05-13 09:50:49.290 3590 6914 I ActivityManager: Process
com.example.android.systemupdatersample (pid 6998) has died: vis+99 TOP
(standard input):4912:05-13 09:50:49.697 3590 3622 W ActivityTaskManager: Activity top resumed state
loss timeout for ActivityRecord{462c162 u0 com.example.android.systemupdatersample/.ui.MainActivity t-1 f}
【问题讨论】: