Java 尝试使用适配器内的变量设置BackgroundColor时StringIndexOutofBoundsException
当我尝试放置一个字符串变量,其中包含十六进制颜色,以设置适配器类上edittext的Java 尝试使用适配器内的变量设置BackgroundColor时StringIndexOutofBoundsException,java,android,Java,Android,当我尝试放置一个字符串变量,其中包含十六进制颜色,以设置适配器类上edittext的setbackgroundcolor(color.parseColor(String s)),它说 StringIndexOutofBoundsException,长度=0,索引=0 当我手动在parseColor中插入字符串时,例如parseColor(“#ffffff”),它可以工作 我的适配器类: public class TasksAdapter extends ArrayAdapter<Tasks
setbackgroundcolor(color.parseColor(String s))
,它说
StringIndexOutofBoundsException,长度=0,索引=0
当我手动在parseColor
中插入字符串时,例如parseColor(“#ffffff”)代码>,它可以工作
我的适配器类:
public class TasksAdapter extends ArrayAdapter<Tasks> {
private Context sContext;
private List<Tasks> taskData = new ArrayList<>();
public TasksAdapter(@NonNull Context context, @SuppressLint("SupportAnnotationUsage") @LayoutRes ArrayList<Tasks> list){
super(context, 0, list);
sContext = context;
taskData = list;
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent){
View listItem = convertView;
if(listItem == null)
listItem = LayoutInflater.from(sContext).inflate(R.layout.item_tasks, parent,false);
final Tasks presenteTask = taskData.get(position);
TextView taskTitle = (TextView) listItem.findViewById(R.id.tasksTitle);
taskTitle.setText(presenteTask.getTitle());
EditText taskColor = (EditText) listItem.findViewById(R.id.taskColor);
taskColor.setBackgroundColor(Color.parseColor(presenteTask.getHexaColor()));
return listItem;
}
}
公共类TasksAdapter扩展了ArrayAdapter{
私人语境;
private List taskData=new ArrayList();
公共任务适配器(@NonNull上下文上下文,@SuppressLint(“SupportAnnotationUsage”)@LayoutRes ArrayList列表){
超级(上下文,0,列表);
sContext=上下文;
任务数据=列表;
}
@非空
@凌驾
公共视图getView(int位置,@Nullable视图convertView,@NonNull视图组父级){
查看列表项=转换视图;
如果(listItem==null)
listItem=LayoutInflater.from(sContext).充气(R.layout.item\u任务,父项,false);
最终任务PresentTask=taskData.get(位置);
TextView任务标题=(TextView)listItem.findViewById(R.id.tasksTitle);
taskTitle.setText(presentTask.getTitle());
EditText taskColor=(EditText)listItem.findViewById(R.id.taskColor);
setBackgroundColor(Color.parseColor(presentTask.getHexaColor());
返回列表项;
}
}
错误:
E/AndroidRuntime:致命异常:主
进程:com.example.mylcm,PID:672
java.lang.StringIndexOutOfBoundsException:长度=0;索引=0
位于java.lang.String.charAt(本机方法)
位于android.graphics.Color.parseColor(Color.java:1384)
位于com.example.mylcm.Utils.Adapters.TasksAdapter.getView(TasksAdapter.java:49)
在android.widget.AbsListView.obtainView(AbsListView.java:2365)
位于android.widget.ListView.makeAndAddView(ListView.java:2052)
在android.widget.ListView.fillDown(ListView.java:786)中
位于android.widget.ListView.fillFromTop(ListView.java:847)
位于android.widget.ListView.layoutChildren(ListView.java:1826)
在android.widget.AbsListView.onLayout(AbsListView.java:2164)
在android.view.view.layout(view.java:19659)
位于android.view.ViewGroup.layout(ViewGroup.java:6075)
位于android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791)
位于android.widget.LinearLayout.layouuthorizontal(LinearLayout.java:1780)
位于android.widget.LinearLayout.onLayout(LinearLayout.java:1546)
在android.view.view.layout(view.java:19659)
位于android.view.ViewGroup.layout(ViewGroup.java:6075)
在android.widget.RelativeLayout.onLayout(RelativeLayout.java:1083)上
在android.view.view.layout(view.java:19659)
位于android.view.ViewGroup.layout(ViewGroup.java:6075)
位于android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
位于android.widget.FrameLayout.onLayout(FrameLayout.java:261)
在android.view.view.layout(view.java:19659)
位于android.view.ViewGroup.layout(ViewGroup.java:6075)
位于android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791)
位于android.widget.LinearLayout.layoutVertical(LinearLayout.java:1635)
位于android.widget.LinearLayout.onLayout(LinearLayout.java:1544)
在android.view.view.layout(view.java:19659)
位于android.view.ViewGroup.layout(ViewGroup.java:6075)
位于android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
位于android.widget.FrameLayout.onLayout(FrameLayout.java:261)
在android.view.view.layout(view.java:19659)
位于android.view.ViewGroup.layout(ViewGroup.java:6075)
位于android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791)
位于android.widget.LinearLayout.layoutVertical(LinearLayout.java:1635)
位于android.widget.LinearLayout.onLayout(LinearLayout.java:1544)
在android.view.view.layout(view.java:19659)
位于android.view.ViewGroup.layout(ViewGroup.java:6075)
位于android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
位于android.widget.FrameLayout.onLayout(FrameLayout.java:261)
位于com.android.internal.policy.DecorView.onLayout(DecorView.java:761)
在android.view.view.layout(view.java:19659)
位于android.view.ViewGroup.layout(ViewGroup.java:6075)
在android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2496)
在android.view.ViewRootImpl.performTraversals上(ViewRootImpl.java:2212)
位于android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1392)
在android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6752)
在android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
位于android.view.Choreographer.doCallbacks(Choreographer.java:723)
位于android.view.Choreographer.doFrame(Choreographer.java:658)
在android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)中
位于android.os.Handler.handleCallback(Handler.java:790)
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:164)
位于android.app.ActivityThread.main(ActivityThread.java:6494)
位于java.lang.reflect.Method.invoke(本机方法)
位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
在TaskAdapter的getView()
内,在执行presentTask.getHexaColor()
期间,您的taskData
项返回空hexaColor
。尝试下面的代码,它将停止您的应用程序被强制关闭,您将获得
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent){
View listItem = convertView;
if(listItem == null)
listItem = LayoutInflater.from(sContext).inflate(R.layout.item_tasks, parent,false);
try {
final Tasks presenteTask = taskData.get(position);
TextView taskTitle = (TextView) listItem.findViewById(R.id.tasksTitle);
taskTitle.setText(presenteTask.getTitle());
EditText taskColor = (EditText) listItem.findViewById(R.id.taskColor);
taskColor.setBackgroundColor(Color.parseColor(presenteTask.getHexaColor()));
} catch(Exception ex) {
Log.v(TasksAdapter.class.getSimpleName(), "Exception at: " + position);
}
return listItem;
}
taskColor.setBackgroundColor(Color.parseColor(presenteTask.getHexaColor()));