Android SetTextColor Error: Screen switching during mySQL call
Android SetTextColor Error: Screen switching during mySQL call
正常,正常运行。
但是,当您快速按下按钮并在 0.1 秒内切换屏幕时,它可能会关闭。
似乎在DB中加载角色时切换屏幕发生了错误。 (我用的是android工作室-php-mySQL)
快速换屏时,关闭点为setTextColor。
// Since the timetable is up to 13th grade, i <14;
for(int i = 0; i<14; i++)
{
// if the value in the current array is not empty
if(!this.monday[i].equals(""))
{
// In this way, the contents of the array will be populated in a text view named 'monday'.
monday[i].setText(this.monday[i]);
// The color of the text changes when the lecture is present.
monday[i].setTextColor(context.getResources().getColor(R.color.colorPrimaryDark));
}
else
{
// If it is blank, it adjusts the table size according to maxString.
monday[i].setText(maxString);
}
}
和一起出错的代码就是Android连接DB的地方。这个地方根本不会造成任何问题。 (如果你慢慢按下按钮)
class BackgroundTask extends AsyncTask<Void, Void, String>
{
String target;
@Override
protected void onPreExecute() {
try
{
target = "http://MyHomepageID.cafe24.com/ScheduleList.php?userID=" + URLEncoder.encode(MainActivity. userID, "UTF-8"); //해당 웹 서버에 접속
}
catch (Exception e)
{
e.printStackTrace();
}
}
@Override
protected String doInBackground(Void... voids) {
try {
URL url = new URL(target);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
InputStream inputStream = httpURLConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String temp;
StringBuilder stringBuilder = new StringBuilder();
while ((temp=bufferedReader.readLine()) != null)
{
stringBuilder.append(temp + "\n");
}
bufferedReader.close();
inputStream.close();
httpURLConnection.disconnect();
return stringBuilder.toString().trim();
}
catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
public void onProgressUpdate(Void... values) {
super.onProgressUpdate();
}
@Override
public void onPostExecute(String result) {
try {
JSONObject jsonObject = new JSONObject(result);
JSONArray jsonArray = jsonObject.getJSONArray("response");
int count = 0;
String courseProfessor;
String courseTime;
String courseTitle;
int courseID;
while (count < jsonArray.length())
{
JSONObject object = jsonArray.getJSONObject(count);
courseID = object.getInt("courseID");
courseProfessor = object.getString("courseProfessor");
courseTime = object.getString("courseTime");
courseTitle = object.getString("courseTitle");
schedule.addSchedule(courseTime, courseTitle, courseProfessor);
count++;
}
} catch (Exception e) {
e.printStackTrace();
}
schedule.setting(monday, tuesday, wednesday, thursday, friday, getContext());
}
}
上面列出了错误日志中显示为蓝色的两个代码。
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.aaaaa.registeration, PID: 12358
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
at com.example.aaaaa.registeration.Schedule.setting(Schedule.java:685)
at com.example.aaaaa.registeration.ScheduleFragment$BackgroundTask.onPostExecute(ScheduleFragment.java:258)
at com.example.aaaaa.registeration.ScheduleFragment$BackgroundTask.onPostExecute(ScheduleFragment.java:159)
at android.os.AsyncTask.finish(AsyncTask.java:667)
at android.os.AsyncTask.-wrap1(AsyncTask.java)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:684)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Application terminated.
问题总结:
正常正常使用。 (android - php - mysql)
但是,如果我在 0.1 秒内按下另一个按钮切换屏幕,则在从 DB 加载值之前切换屏幕,然后关闭。
我该如何解决?
您的 context
对象为空,这就是为什么您得到 NullPointerException
它可能尚未初始化的原因。
以及,低于
monday[i].setTextColor(context.getResources().getColor(R.color.colorPrimaryDark);
在上面的语句中,getResources().getColor()
被弃用,而不是那个,使用如下 -
monday[i].setTextColor(ContextCompat.getColor(this, R.color.color_orange_text));
正常,正常运行。 但是,当您快速按下按钮并在 0.1 秒内切换屏幕时,它可能会关闭。 似乎在DB中加载角色时切换屏幕发生了错误。 (我用的是android工作室-php-mySQL)
快速换屏时,关闭点为setTextColor。
// Since the timetable is up to 13th grade, i <14;
for(int i = 0; i<14; i++)
{
// if the value in the current array is not empty
if(!this.monday[i].equals(""))
{
// In this way, the contents of the array will be populated in a text view named 'monday'.
monday[i].setText(this.monday[i]);
// The color of the text changes when the lecture is present.
monday[i].setTextColor(context.getResources().getColor(R.color.colorPrimaryDark));
}
else
{
// If it is blank, it adjusts the table size according to maxString.
monday[i].setText(maxString);
}
}
和一起出错的代码就是Android连接DB的地方。这个地方根本不会造成任何问题。 (如果你慢慢按下按钮)
class BackgroundTask extends AsyncTask<Void, Void, String>
{
String target;
@Override
protected void onPreExecute() {
try
{
target = "http://MyHomepageID.cafe24.com/ScheduleList.php?userID=" + URLEncoder.encode(MainActivity. userID, "UTF-8"); //해당 웹 서버에 접속
}
catch (Exception e)
{
e.printStackTrace();
}
}
@Override
protected String doInBackground(Void... voids) {
try {
URL url = new URL(target);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
InputStream inputStream = httpURLConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String temp;
StringBuilder stringBuilder = new StringBuilder();
while ((temp=bufferedReader.readLine()) != null)
{
stringBuilder.append(temp + "\n");
}
bufferedReader.close();
inputStream.close();
httpURLConnection.disconnect();
return stringBuilder.toString().trim();
}
catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
public void onProgressUpdate(Void... values) {
super.onProgressUpdate();
}
@Override
public void onPostExecute(String result) {
try {
JSONObject jsonObject = new JSONObject(result);
JSONArray jsonArray = jsonObject.getJSONArray("response");
int count = 0;
String courseProfessor;
String courseTime;
String courseTitle;
int courseID;
while (count < jsonArray.length())
{
JSONObject object = jsonArray.getJSONObject(count);
courseID = object.getInt("courseID");
courseProfessor = object.getString("courseProfessor");
courseTime = object.getString("courseTime");
courseTitle = object.getString("courseTitle");
schedule.addSchedule(courseTime, courseTitle, courseProfessor);
count++;
}
} catch (Exception e) {
e.printStackTrace();
}
schedule.setting(monday, tuesday, wednesday, thursday, friday, getContext());
}
}
上面列出了错误日志中显示为蓝色的两个代码。
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.aaaaa.registeration, PID: 12358
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
at com.example.aaaaa.registeration.Schedule.setting(Schedule.java:685)
at com.example.aaaaa.registeration.ScheduleFragment$BackgroundTask.onPostExecute(ScheduleFragment.java:258)
at com.example.aaaaa.registeration.ScheduleFragment$BackgroundTask.onPostExecute(ScheduleFragment.java:159)
at android.os.AsyncTask.finish(AsyncTask.java:667)
at android.os.AsyncTask.-wrap1(AsyncTask.java)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:684)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Application terminated.
问题总结:
正常正常使用。 (android - php - mysql)
但是,如果我在 0.1 秒内按下另一个按钮切换屏幕,则在从 DB 加载值之前切换屏幕,然后关闭。
我该如何解决?
您的 context
对象为空,这就是为什么您得到 NullPointerException
它可能尚未初始化的原因。
以及,低于
monday[i].setTextColor(context.getResources().getColor(R.color.colorPrimaryDark);
在上面的语句中,getResources().getColor()
被弃用,而不是那个,使用如下 -
monday[i].setTextColor(ContextCompat.getColor(this, R.color.color_orange_text));