簡體   English   中英

從活動實例化IntentService時,Android中的Java空指針異常

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM