如果声明带有来自布尔值的JSON数据

时间:2016-08-30 16:51:33

标签: java android boolean

我有一个从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以及如何对结果执行操作?

2 个答案:

答案 0 :(得分:0)

  1. 您的全局变量onair永远不会被初始化。

    onair = checkIfOnline();

  2. 方法detectionline()会抛出JSONExceptionIOException,所以无论何时调用此方法,您都必须通过捕获它们或重新抛出它们来处理此类异常

  3.     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;

这可能会解决问题。如果没有,我会给你一个更好的答案,但先试试。