我有一个从public static boolean checkIfOnline()
创建的布尔值。但我想用public void detectonline()
制作一个检查系统(来自值)。但是当我想在my protected void onCreate
上打电话时。我在Unhandled exceptions: org.json.JSONException, java.io.IOException
(在onCreate中)有错误:detectonline();
。
public class notification extends AppCompatActivity {
Boolean onair;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_notification);
detectonline();
}
public void detectonline() throws JSONException, IOException {
checkIfOnline();
final TextView t=(TextView)findViewById(R.id.textView); // Hors ligne
final TextView t2=(TextView)findViewById(R.id.textView2); // En ligne
if (onair == false) {
t.setVisibility(View.VISIBLE);
t2.setVisibility(View.INVISIBLE);
} else {
t.setVisibility(View.INVISIBLE);
t2.setVisibility(View.VISIBLE);
}
}
public static boolean checkIfOnline() throws JSONException, IOException {
String channerUrl = "https://api.dailymotion.com/video/x3p6d9r?fields=onair";
String jsonText = readFromUrl(channerUrl);// reads text from URL
JSONObject json = new JSONObject(jsonText); // You create a json object from your string jsonText
if(json.has("onair")) { // just a simple test to check the node that you need existe
boolean onair = json.getBoolean("onair"); // In the url that you gave onair value is boolean type
return onair;
}
return false;
}
private static String readFromUrl(String url) throws IOException {
URL page = new URL(url);
StringBuilder sb = new StringBuilder();
Scanner scanner = null;
try{
//scanner = new Scanner(page.openStream(), StandardCharsets.UTF_8.name()); Encodage qui merde avant l'API 19 d'android
scanner = new Scanner(page.openStream());
while (scanner.hasNextLine()){
sb.append(scanner.nextLine());
}
} finally {
if (scanner!=null)
scanner.close();
}
return sb.toString();
}
}
如何检查布尔值是true还是false以及如何对结果执行操作?
答案 0 :(得分:0)
您的全局变量onair
永远不会被初始化。
onair = checkIfOnline();
方法detectionline()
会抛出JSONException
和IOException
,所以无论何时调用此方法,您都必须通过捕获它们或重新抛出它们来处理此类异常
try{
detectionline();
}catch(JSONException | IOException e){
e.printstacktrace();
}
答案 1 :(得分:-1)
首先,你的checkIfOnline()函数返回boolean,但是你将它作为一个空格使用,即不在任何地方指定返回值。所以改变这个
public static boolean checkIfOnline()
到这个
public static void checkIfOnline()
其次,在checkIfOnline()函数中,你将boolean的值赋给局部变量onair,因为你在这里声明了函数本身的布尔值:
boolean onair = json.getBoolean("onair");
所以只需将其更改为:
onair = json.getBoolean("onair");
最后,将onair变量声明为私有/公共变量,以便函数可以修改它(并且,使用上面代码中编写的boolean not Boolean)。所以改变这个
Boolean onair;
到这个
private static boolean onair;
这可能会解决问题。如果没有,我会给你一个更好的答案,但先试试。