[英]Java Null Pointer Exception in Android while Instantiating an IntentService from an Activity
我正在創建一個具有活動和意圖服務的應用程序,將從該活動中調用該服務。 Intent服務的目的是將文件從android設備發送到遠程服務器。 該文件由應用程序創建。
問題是:當我嘗試從活動中的方法(我創建的)實例化意圖服務時,我得到了空指針異常。
這是Eclipse顯示的錯誤:
08-07 03:09:18.720: E/AndroidRuntime(1182): FATAL EXCEPTION: main
08-07 03:09:18.720: E/AndroidRuntime(1182): Process: com.viruni.authentication, PID: 1182
08-07 03:09:18.720: E/AndroidRuntime(1182): java.lang.RuntimeException: Unable to instantiate service com.viruni.authentication.DataUploader: java.lang.NullPointerException
08-07 03:09:18.720: E/AndroidRuntime(1182): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2556)
08-07 03:09:18.720: E/AndroidRuntime(1182): at android.app.ActivityThread.access$1800(ActivityThread.java:135)
08-07 03:09:18.720: E/AndroidRuntime(1182): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
08-07 03:09:18.720: E/AndroidRuntime(1182): at android.os.Handler.dispatchMessage(Handler.java:102)
08-07 03:09:18.720: E/AndroidRuntime(1182): at android.os.Looper.loop(Looper.java:136)
08-07 03:09:18.720: E/AndroidRuntime(1182): at android.app.ActivityThread.main(ActivityThread.java:5017)
08-07 03:09:18.720: E/AndroidRuntime(1182): at java.lang.reflect.Method.invokeNative(Native Method)
08-07 03:09:18.720: E/AndroidRuntime(1182): at java.lang.reflect.Method.invoke(Method.java:515)
08-07 03:09:18.720: E/AndroidRuntime(1182): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
08-07 03:09:18.720: E/AndroidRuntime(1182): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
08-07 03:09:18.720: E/AndroidRuntime(1182): at dalvik.system.NativeStart.main(Native Method)
08-07 03:09:18.720: E/AndroidRuntime(1182): Caused by: java.lang.NullPointerException
08-07 03:09:18.720: E/AndroidRuntime(1182): at android.content.ContextWrapper.getContentResolver(ContextWrapper.java:99)
08-07 03:09:18.720: E/AndroidRuntime(1182): at com.viruni.authentication.DataUploader.<init>(DataUploader.java:25)
08-07 03:09:18.720: E/AndroidRuntime(1182): at java.lang.Class.newInstanceImpl(Native Method)
08-07 03:09:18.720: E/AndroidRuntime(1182): at java.lang.Class.newInstance(Class.java:1208)
08-07 03:09:18.720: E/AndroidRuntime(1182): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2553)
08-07 03:09:18.720: E/AndroidRuntime(1182): ... 10 more
Eclipse的控制台輸出為:
[2014-08-07 10:40:02 - ddms] null
java.nio.BufferOverflowException
at java.nio.HeapByteBuffer.put(HeapByteBuffer.java:200)
at com.android.ddmlib.JdwpPacket.movePacket(JdwpPacket.java:235)
at com.android.ddmlib.Debugger.sendAndConsume(Debugger.java:347)
at com.android.ddmlib.Client.forwardPacketToDebugger(Client.java:665)
at com.android.ddmlib.MonitorThread.processClientActivity(MonitorThread.java:344)
at com.android.ddmlib.MonitorThread.run(MonitorThread.java:263)
調用啟動意圖服務的代碼是:
Intent iservice = new Intent(Viewer1.this, DataUploader.class);
startService(iservice);
Viewer1是我要從中調用服務的活動。 DataUploader是我正在嘗試啟動的Intent服務。
誰能幫助我調試錯誤。 我確信活動的任何其他部分都沒有錯誤。
注意:我正在從創建的方法中調用startService()方法。
這是我的dataUploader類:
public class DataUploader extends IntentService{
String encoded_string;
String android_id;
public DataUploader() {
super("Empty Constructor");
android_id = Secure.getString(getContentResolver(),Secure.ANDROID_ID);
}
public DataUploader(String name) {
super("DataUploader");
}
@Override
protected void onHandleIntent(Intent intent) {
String filename = intent.getStringExtra("filename");
Log.d("Testing","File name : " + filename);
//doFileUpload();
}
public int doFileUpload() {
int serverResponseCode = 0;
String uploadServerUri = "my_URL string";
Date d = new Date();
d.getTime();
File file = new File(path to the file, "r");
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(uploadServerUri);
InputStreamEntity reqEntity = new InputStreamEntity(
new FileInputStream(file), -1);
reqEntity.setContentType("binary/octet-stream");
reqEntity.setChunked(true); // Send in multiple parts if needed
httppost.setEntity(reqEntity);
HttpResponse response = httpclient.execute(httppost);
//Do something with response...
} catch (Exception e) {
// show error
}
Log.i("FileUpload", "FileUpload: Time : " + d.getTime());
return 0;
}
}
進行小更正...
意圖iservice =新意圖(Viewer1.this,DataUploader.class); this.startService(iservice);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.