是的,不使用AsyncTask也可以从URL获取JSON。以下是一个使用线程的示例代码:
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private TextView mResultTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mResultTextView = findViewById(R.id.result_textview);
// 创建一个新的线程
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
// 在新线程中执行网络请求
String json = fetchDataFromUrl("https://example.com/api/data");
// 在主线程中更新UI
runOnUiThread(new Runnable() {
@Override
public void run() {
// 在TextView中显示结果
mResultTextView.setText(json);
}
});
}
});
// 启动线程
thread.start();
}
// 从URL获取JSON数据的方法
private String fetchDataFromUrl(String urlString) {
StringBuilder result = new StringBuilder();
try {
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
// 读取服务器的响应
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
result.append(line);
}
reader.close();
} catch (IOException e) {
Log.e(TAG, "Error fetching data from URL: " + e.getMessage());
}
return result.toString();
}
}
这个例子中,通过创建一个新的线程,在新线程中执行网络请求,然后在主线程中更新UI。在fetchDataFromUrl()方法中,使用HttpURLConnection来发送GET请求,并读取服务器的响应数据。最后,将获取到的JSON数据显示在TextView中。