我的除錯陳述句正確顯示資料庫,在出現問題并收到錯誤后:未處理的例外:NoSuchMethodError:類'int'沒有實體方法'[]'。當我嘗試顯示在我的應用程式中時,我得到空資料,這是因為我用來存盤值的串列的長度為 0
以下是我的課
class UserDetails extends ChangeNotifier {
final String? userId;
final String? mobileno;
bool? userStatus;
final String? adhar;
final String? pan;
final String? adharno;
final String? panno;
UserDetails(
{this.userId,
this.mobileno,
this.userStatus = false,
this.adhar,
this.pan,
this.adharno,
this.panno});
}
以下是我面臨錯誤的 api
Future<void> getUsers(BuildContext context) async {
final url = '${PurohitApi().baseUrl}${PurohitApi().users}';
final List<UserDetails> loadedUsers = [];
try {
final client = RetryClient(
http.Client(),
retries: 4,
when: (response) {
return response.statusCode == 401 ? true : false;
},
onRetry: (req, res, retryCount) async {
//print('retry started $token');
if (retryCount == 0 && res?.statusCode == 401) {
var accessToken = await Provider.of<Auth>(context, listen: false)
.restoreAccessToken();
// Only this block can run (once) until done
req.headers['Authorization'] = accessToken;
}
},
);
var response = await client.get(
Uri.parse(url),
headers: {'Authorization': authToken!},
);
final extractedData = json.decode(response.body) as Map<String, dynamic>;
print(extractedData);
if (extractedData['data'] == null) {
return;
}
extractedData.forEach((userId, userData) {
print(userId);
loadedUsers.add(
UserDetails(
userId: userData['data']['id'],
mobileno: userData['data']['mobileno'],
userStatus: userData['data']['userstatus'],
adhar: userData['data']['adhar'],
pan: userData['data']['pan'],
adharno: userData['data']['adharno'],
panno: userData['data']['panno'],
),
);
});
_users = loadedUsers.reversed.toList();
//print(users);
notifyListeners();
} catch (e) {
print(e);
}
}
}
我面臨 NoSuchMethodError: Class 'int' has no instance method '[]' 嘗試呼叫:來自上面的 api 以下是我的回應

uj5u.com熱心網友回復:
我認為 userId 不應該是字串,它應該是一個整數
class UserDetails extends ChangeNotifier {
final int? userId;
final String? mobileno;
bool? userStatus;
final String? adhar;
final String? pan;
final String? adharno;
final String? panno;
UserDetails(
{this.userId,
this.mobileno,
this.userStatus = false,
this.adhar,
this.pan,
this.adharno,
this.panno});
}
uj5u.com熱心網友回復:
嘗試在此錯誤中列印您的資料我認為您的資料應該像 userData['id'],
上面的錯誤是你嘗試在回傳的資料中使用 int 作為物件
回傳的 userData 是一個 int
uj5u.com熱心網友回復:
更改此代碼:
extractedData.forEach((userId, userData) {
print(userId);
loadedUsers.add(
UserDetails(
userId: userData['data']['id'],
mobileno: userData['data']['mobileno'],
userStatus: userData['data']['userstatus'],
adhar: userData['data']['adhar'],
pan: userData['data']['pan'],
adharno: userData['data']['adharno'],
panno: userData['data']['panno'],
),
);
});
對此:
loadedUsers.add(
UserDetails(
userId: extractedData['data']['id'],
mobileno: extractedData['data']['mobileno'],
userStatus: extractedData['data']['userstatus'],
adhar: extractedData['data']['adhar'],
pan: extractedData['data']['pan'],
adharno: extractedData['data']['adharno'],
panno: extractedData['data']['panno'],
),
);
當你呼叫函式時:extractedData是 a的原因:
值不是 map,是 an ,或者。關鍵是一個。當你呼叫這個函式時:map<String,dynamic>forEach(key, value)ObjectdynamicString
value['data]
它會拋出那個錯誤
如果您extractedData是 Map 串列,則可以保留原始代碼,并將提取資料的型別更改為 List :
final extractedData = json.decode(response.body) as List<Map<String, dynamic>>;
編輯:您在回應中的資料是地圖串列,因此代碼將是這樣的:
final extractedData = json.decode(response.body) as Map<String,dynamic>;
List<Map<String,dynamic>> data = extractedData['data'];
for (var map in data){
loadedUsers.add(
UserDetails(
userId: map['id'],
mobileno: map['mobileno'],
userStatus: map['userstatus'],
adhar: map['adhar'],
pan: map['pan'],
adharno: map['adharno'],
panno: map['panno'],
),
);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/519582.html
標籤:扑api
上一篇:job()缺少1個必需的位置引數
