我是一位Android开发人员,是Xamarin的新手。我想做的是,我从服务器获取JSON请求并将其添加到List(Object)中。然后,我想检查列表中的一些值,并根据这些值将这些数据添加到新的列表(相同结构)中。我已经在Android中使用JAVA做到了这一点,但是在c#中该方法不起作用。当我尝试将值添加到新列表时,循环首先中断。
我的服务...
public async Task<List<FpRankData>> GetFpData(string accessToken)
{
List<FpRankData> myFpList = null;
try
{
var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", accessToken);
var json = await client.GetStringAsync("http://203.115.11.236:10455/MobileAuthWS/api/Agent/GetFP2018Rank");
myFpList = JsonConvert.DeserializeObject<List<FpRankData>>(json);
}
catch (Exception e)
{
myFpList = null;
Debug.WriteLine("fp_error : ", e);
}
return myFpList;
}
进行检查的方法...
public List<FpRankData> fpFullList;
public List<FpRankData> fpTempList;
public List<FpRankData> fpRankList
public async Task getFpDataAsync(string accessToken)
{
IsBusy = true;
fpFullList = await _apiServices.GetFpData(accessToken);
foreach (FpRankData item in fpFullList) {
if (item.agentCode1.Equals(Settings.agentCode))
{
item.AgentName = ExceptBlanks(item.AgentName);
fpTempList.Add(item);
if (item.rank == 1)
{
List<FpRankData> finList1 = new List<FpRankData>(fpFullList.GetRange(1, 1));
fpTempList.AddRange(finList1);
}
else
{
List<FpRankData> finList1 = new List<FpRankData>(fpFullList.GetRange(0, 1));
fpTempList.AddRange(finList1);
}
if (item.rank == 110)
{
List<FpRankData> finList110 = new List<FpRankData>(fpFullList.GetRange(108, 1));
fpTempList.AddRange(finList110);
}
else
{
List<FpRankData> finList110 = new List<FpRankData>(fpFullList.GetRange(109, 1));
fpTempList.AddRange(finList110);
}
if (item.rank != 30)
{
List<FpRankData> finList30 = new List<FpRankData>(fpFullList.GetRange(29, 1));
fpTempList.AddRange(finList30);
}
if (item.rank != 60)
{
List<FpRankData> finList60 = new List<FpRankData>(fpFullList.GetRange(59, 1));
fpTempList.AddRange(finList60);
}
Debug.WriteLine(item.AgentName, " AgentName");
Debug.WriteLine("");
}
else {
Debug.WriteLine("AgentName ", " AgentName");
}
}
fpRankList = fpTempList;
Debug.WriteLine("ListCount : ", fpTempList.Count.ToString());
IsBusy = false;
}
public string ExceptBlanks(string str)
{
string pattern = "\\s+";
string replacement = " ";
Regex rx = new Regex(pattern);
string result = rx.Replace(str, replacement);
return result;
}
我已使用“设置”保存了代理的代码,并将其与列表进行了比较。
public class FpRankData
{
public string agentCode1 { get; set; }
public string agentCode2 { get; set; }
public string AgentName { get; set; }
public string Role { get; set; }
public string branchCode { get; set; }
public string branchName { get; set; }
public string region { get; set; }
public int nop_count { get; set; }
public double fp { get; set; }
public string lastPersistencyYear { get; set; }
public string persistencyValue { get; set; }
public int rank { get; set; }
public string acheivement { get; set; }
}
我在Java android中所做的...(有效)
ArrayList<UserData> finList = new ArrayList<>();
finList.clear();
for (UserData customer : rList) {
if (customer.getAgentCode().equals(rAgentCode)) {
finList.add(customer);
if (customer.getuPosition() == 1) {
ArrayList<UserData> finList1 = new ArrayList<>(rList.subList(1, 2));
finList.addAll(finList1);
} else {
ArrayList<UserData> finList1 = new ArrayList<>(rList.subList(0, 1));
finList.addAll(finList1);
}
if (customer.getuPosition() == 110) {
ArrayList<UserData> finList110 = new ArrayList<>(rList.subList(108, 109));
finList.addAll(finList110);
} else {
ArrayList<UserData> finList110 = new ArrayList<>(rList.subList(109, 110));
finList.addAll(finList110);
}
if (customer.getuPosition() != 30) {
ArrayList<UserData> finList30 = new ArrayList<>(rList.subList(29, 30));
finList.addAll(finList30);
}
if (customer.getuPosition() != 60) {
ArrayList<UserData> finList60 = new ArrayList<>(rList.subList(59, 60));
finList.addAll(finList60);
}
}
答案 0 :(得分:2)
好像您没有实例化fpTempList
和fpRankList
的概率,而您试图向这些列表添加项目时却得到了NullReferenceException
。因此,您可以在声明时将它们初始化为lkie以下内容,或者可以检查null并在getFpDataAsync()
方法中对其进行初始化[使用它们之前]:
public List<FpRankData> fpTempList = new List<FpRankData>();
public List<FpRankData> fpRankList = new List<FpRankData>();
答案 1 :(得分:1)
您必须使用以下新列表初始化fpTempList
和fpRankList
:
public List<FpRankData> fpTempList = new List<FpRankData>();
public List<FpRankData> fpRankList = new List<FpRankData>();
未经初始化,您无法将任何对象添加到列表中,它将给您NullReferenceException
。