好的,我已经解决了我自己的问题。这是我学到的一切以及我所做的一切。如果他们遇到这个问题,我想帮助其他人解决这个问题。首先,我将此添加到我的 androidmanifest.xml:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
然后我在 androidmanifest.xml 的标签之间添加了这个,因为我从中解析 JSON 的链接是一个 HTTP 链接:
android:usesCleartextTraffic="true"
真正快速地将所有这些导入到您的 mainactiviy.java 中:
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
然后我们开始讨论困难的事情。解析来自 Internet 的 JSON 数据有两个部分。首先,您必须从 URL 中读取 JSON(将在线的 JSON 转换为字符串),然后您必须将 JSON 的字符串组织成单独的变量。因此,让我们从 HTTP 请求开始。我在我在网上找到的 MainActivity.java(在 OnCreate 下)中创建了一个 Async 类,如下所示:
public class HttpGetRequest extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
try {
String url = "http://example.com/example.php";
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
int responseCode = con.getResponseCode();
System.out.println("\nSending 'GET' request to URL : " + url);
System.out.println("Response Code : " + responseCode);
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
System.out.println("Test");
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
String jsonResponse = response.toString();
return jsonResponse;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
try {
JSONObject json = new JSONObject(result);
boolean myJsonBool = json.optBoolean("samplestringinyourjson");
if(hasPaid){
//do something
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
好的,所以基本上我们将它放在 Async 类中的原因是因为 java 不允许您在 OnCreate 中发出 HTTP 请求。 doInBackground 正在做的是获取 JSON 数据并将其放入字符串中,就像我说的那样。 OnPostExecute 将该字符串分离为布尔值并对其进行处理。最后,将其粘贴到您的 OnCreate 中,否则将无法正常工作:
new HttpGetRequest().execute();
就是这样。如果您有任何问题,希望我能看到。