2012-08-31 59 views
0

我有一個Android的AIDL文件的問題。我從互聯網下載了一個示例項目,我在代碼中看到他們有一個AIDL文件。我不知道這個文件是什麼,我做了一些研究並編寫了一些代碼。Android「cl無法解析爲變量」錯誤

創建一個AIDL文件後,我宣佈這樣

interface IRemoteService{ 
    Map onClick(in int id, in Map state); 
} 

的方法然後Eclipse會自動生成一個文件IRemoteService.java並返回錯誤:

cl cannot be resolved to a variable 

難道我做錯了什麼?

編輯 這是自動生成的IRemoteService.java。

/* 
* This file is auto-generated. DO NOT MODIFY. 
* Original file: /home/nampham/Data/works/workspace/MapAidl/src/nampham/mapaidl/IRemoteService.aidl 
*/ 
package nampham.mapaidl; 
public interface IRemoteService extends android.os.IInterface 
{ 
/** Local-side IPC implementation stub class. */ 
public static abstract class Stub extends android.os.Binder implements nampham.mapaidl.IRemoteService 
{ 
private static final java.lang.String DESCRIPTOR = "nampham.mapaidl.IRemoteService"; 
/** Construct the stub at attach it to the interface. */ 
public Stub() 
{ 
this.attachInterface(this, DESCRIPTOR); 
} 
/** 
* Cast an IBinder object into an nampham.mapaidl.IRemoteService interface, 
* generating a proxy if needed. 
*/ 
public static nampham.mapaidl.IRemoteService asInterface(android.os.IBinder obj) 
{ 
if ((obj==null)) { 
return null; 
} 
android.os.IInterface iin = (android.os.IInterface)obj.queryLocalInterface(DESCRIPTOR); 
if (((iin!=null)&&(iin instanceof nampham.mapaidl.IRemoteService))) { 
return ((nampham.mapaidl.IRemoteService)iin); 
} 
return new nampham.mapaidl.IRemoteService.Stub.Proxy(obj); 
} 
public android.os.IBinder asBinder() 
{ 
return this; 
} 
@Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException 
{ 
switch (code) 
{ 
case INTERFACE_TRANSACTION: 
{ 
reply.writeString(DESCRIPTOR); 
return true; 
} 
case TRANSACTION_click: 
{ 
data.enforceInterface(DESCRIPTOR); 
int _arg0; 
_arg0 = data.readInt(); 
java.util.Map _arg1; 
java.lang.ClassLoader cl = (java.lang.ClassLoader)this.getClass().getClassLoader(); 
_arg1 = data.readHashMap(cl); 
java.util.Map _result = this.click(_arg0, _arg1); 
reply.writeNoException(); 
reply.writeMap(_result); 
return true; 
} 
} 
return super.onTransact(code, data, reply, flags); 
} 
private static class Proxy implements nampham.mapaidl.IRemoteService 
{ 
private android.os.IBinder mRemote; 
Proxy(android.os.IBinder remote) 
{ 
mRemote = remote; 
} 
public android.os.IBinder asBinder() 
{ 
return mRemote; 
} 
public java.lang.String getInterfaceDescriptor() 
{ 
return DESCRIPTOR; 
} 
public java.util.Map click(int id, java.util.Map state) throws android.os.RemoteException 
{ 
android.os.Parcel _data = android.os.Parcel.obtain(); 
android.os.Parcel _reply = android.os.Parcel.obtain(); 
java.util.Map _result; 
try { 
_data.writeInterfaceToken(DESCRIPTOR); 
_data.writeInt(id); 
_data.writeMap(state); 
mRemote.transact(Stub.TRANSACTION_click, _data, _reply, 0); 
_reply.readException(); 
_result = _reply.readHashMap(cl); `<<< This line return error` 
} 
finally { 
_reply.recycle(); 
_data.recycle(); 
} 
return _result; 
} 
} 
static final int TRANSACTION_click = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0); 
} 
public java.util.Map click(int id, java.util.Map state) throws android.os.RemoteException; 
} 

在此先感謝。

+2

什麼是'AIDL file'?你可以發佈整個跟蹤 – iTurki

+0

嗨,請看看這個頁面:[Android接口定義語言(AIDL)](http://developer.android.com/guide/components/aidl.html) 你會知道aidl文件是什麼。 – NamPham

+0

使用CAPS!現在發佈完整的跟蹤。 – iTurki

回答

0

的問題是:

_result = _reply.readHashMap(cl); 

cl can't be resolved to a variable因爲clonTransact()本地定義:

java.lang.ClassLoader cl = (java.lang.ClassLoader)this.getClass().getClassLoader(); 

我不知道,如果auto-generated code意味着它不應該是修改它不能被修改。不過,我可以告訴你的是錯誤永遠不會消失,除非你編輯的代碼:

  • 錯誤行前添加另一個cl定義:

    java.lang.ClassLoader cl = (java.lang.ClassLoader)this.getClass().getClassLoader(); 
    _result = _reply.readHashMap(cl); 
    
+0

謝謝你的時間。 如上所述,我在錯誤行之前添加了上面的行,但在保存文件後Eclipse返回錯誤。錯誤是「IRemoteService.java被手動修改!恢復到生成的版本!」。 – NamPham

+0

@NamPham對不起。我想不出別的什麼。 – iTurki

+0

順便謝謝你的時間。 – NamPham