在搜索城市之前使显示数据文本视图不可见
Make display data textviews invisible until a city is searched
我在我的天气应用程序上设置我的文本视图,以便在我的搜索面板上搜索时显示城市数据(即 temp_out.setText(response.body().getMain().getTemp() + " ℃"););
。它工作得很好,只是用于显示这些数据的文本视图仍然反映在应用程序(即 temp_out
)。我想将其设置为在搜索城市之前文本视图不可见,然后该城市的数据将显示在文本视图部分。
这些是我要实现的目标的说明:
打开应用时应该是看不到的(打红勾的部分):
那么网上搜索一个城市后应该会显示这个数据(打红勾的部分):
到目前为止,我已经尝试使用此代码 findViewById(R.id.textView9).setVisibility(View.GONE)
;在 activity 中用于我的文本视图之一 (time_field
).
搜索城市前后完全不可见,还报这个异常:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
at com.viz.lightweatherforecast.Activity.HomeActivity.onResponse(HomeActivity.java:112)
at retrofit2.DefaultCallAdapterFactory$ExecutorCallbackCall.lambda$onResponse[=10=]$DefaultCallAdapterFactory$ExecutorCallbackCall(DefaultCallAdapterFactory.java:89)
at retrofit2.-$$Lambda$DefaultCallAdapterFactory$ExecutorCallbackCallwC8FyV4pyjrzrYL5U0mlYiviZw.run(Unknown Source:6)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6819)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:497)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:912)
然后我尝试在 layout.xml android:visibility="gone"
和 android:visibility="invisible"
上使用相同的文本视图。搜城前后也是看不见的,但也不例外。
我别无选择,只能问一下推荐的方法是什么?
以下是用于显示数据的文本视图:
这是我的片段:
public void onResponse(@NonNull Call<Example> call, @NonNull Response<Example> response) {
try {
assert response.body() != null;
current_temp.setText(response.body().getMain().getTemp() + " ℃");
current_output.setText(response.body().getWeather().get(0).getDescription());
rise_time.setText(response.body().getSys().getSunrise() + " ");
set_time.setText(response.body().getSys().getSunset() + " ");
temp_out.setText(response.body().getMain().getTemp() + " ℃");
Press_out.setText(response.body().getMain().getPressure() + " hpa");
Humid_out.setText(response.body().getMain().getHumidity() + " %");
Ws_out.setText(response.body().getWind().getSpeed() + " Km/h");
Visi_out.setText(response.body().getVisibility() + " m");
Cloud_out.setText(response.body().getClouds().getAll() + " %");
} catch (Exception e) {
Log.e("TAG", "No City found");
Toast.makeText(getActivity(), "No City found", Toast.LENGTH_SHORT).show();
}
}
这是给我的 Activity:
public void onResponse(@NonNull Call<Example> call, @NonNull Response<Example> response) {
try {
assert response.body() != null;
time_field.setText("Last Updated:" + " " + response.body().getDt());
} catch (Exception e) {
time_field.setText("Last Updated: Unknown");
Log.e("TAG", "No City found");
Toast.makeText(HomeActivity.this, "No City found", Toast.LENGTH_SHORT).show();
}
}
我不知道是否需要发布完整代码,因为我正在尽力遵循 https://whosebug.com/help/minimal-reproducible-example,但是如果
需要,请告诉我。
在XML文件中添加android:visibility="gone"
和你的 java class
public void onResponse(@NonNull Call<Example> call, @NonNull Response<Example> response) {
try {
assert response.body() != null;
current_temp.setVisibility(View.VISIBLE);
current_temp.setText(response.body().getMain().getTemp() + " ℃");
//all other stuffs
} catch (Exception e) {
Log.e("TAG", "No City found");
current_temp.setVisibility(View.GONE);
Toast.makeText(getActivity(), "No City found", Toast.LENGTH_SHORT).show();
}
}
我在我的天气应用程序上设置我的文本视图,以便在我的搜索面板上搜索时显示城市数据(即 temp_out.setText(response.body().getMain().getTemp() + " ℃"););
。它工作得很好,只是用于显示这些数据的文本视图仍然反映在应用程序(即 temp_out
)。我想将其设置为在搜索城市之前文本视图不可见,然后该城市的数据将显示在文本视图部分。
这些是我要实现的目标的说明:
打开应用时应该是看不到的(打红勾的部分):
那么网上搜索一个城市后应该会显示这个数据(打红勾的部分):
到目前为止,我已经尝试使用此代码 findViewById(R.id.textView9).setVisibility(View.GONE)
;在 activity 中用于我的文本视图之一 (time_field
).
搜索城市前后完全不可见,还报这个异常:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
at com.viz.lightweatherforecast.Activity.HomeActivity.onResponse(HomeActivity.java:112)
at retrofit2.DefaultCallAdapterFactory$ExecutorCallbackCall.lambda$onResponse[=10=]$DefaultCallAdapterFactory$ExecutorCallbackCall(DefaultCallAdapterFactory.java:89)
at retrofit2.-$$Lambda$DefaultCallAdapterFactory$ExecutorCallbackCallwC8FyV4pyjrzrYL5U0mlYiviZw.run(Unknown Source:6)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6819)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:497)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:912)
然后我尝试在 layout.xml android:visibility="gone"
和 android:visibility="invisible"
上使用相同的文本视图。搜城前后也是看不见的,但也不例外。
我别无选择,只能问一下推荐的方法是什么?
以下是用于显示数据的文本视图:
这是我的片段:
public void onResponse(@NonNull Call<Example> call, @NonNull Response<Example> response) {
try {
assert response.body() != null;
current_temp.setText(response.body().getMain().getTemp() + " ℃");
current_output.setText(response.body().getWeather().get(0).getDescription());
rise_time.setText(response.body().getSys().getSunrise() + " ");
set_time.setText(response.body().getSys().getSunset() + " ");
temp_out.setText(response.body().getMain().getTemp() + " ℃");
Press_out.setText(response.body().getMain().getPressure() + " hpa");
Humid_out.setText(response.body().getMain().getHumidity() + " %");
Ws_out.setText(response.body().getWind().getSpeed() + " Km/h");
Visi_out.setText(response.body().getVisibility() + " m");
Cloud_out.setText(response.body().getClouds().getAll() + " %");
} catch (Exception e) {
Log.e("TAG", "No City found");
Toast.makeText(getActivity(), "No City found", Toast.LENGTH_SHORT).show();
}
}
这是给我的 Activity:
public void onResponse(@NonNull Call<Example> call, @NonNull Response<Example> response) {
try {
assert response.body() != null;
time_field.setText("Last Updated:" + " " + response.body().getDt());
} catch (Exception e) {
time_field.setText("Last Updated: Unknown");
Log.e("TAG", "No City found");
Toast.makeText(HomeActivity.this, "No City found", Toast.LENGTH_SHORT).show();
}
}
我不知道是否需要发布完整代码,因为我正在尽力遵循 https://whosebug.com/help/minimal-reproducible-example,但是如果 需要,请告诉我。
在XML文件中添加android:visibility="gone"
和你的 java class
public void onResponse(@NonNull Call<Example> call, @NonNull Response<Example> response) {
try {
assert response.body() != null;
current_temp.setVisibility(View.VISIBLE);
current_temp.setText(response.body().getMain().getTemp() + " ℃");
//all other stuffs
} catch (Exception e) {
Log.e("TAG", "No City found");
current_temp.setVisibility(View.GONE);
Toast.makeText(getActivity(), "No City found", Toast.LENGTH_SHORT).show();
}
}