要从JSON文件的URL填充Android微调器(Spinner),你需要执行以下步骤:
AndroidManifest.xml
中添加INTERNET权限。AsyncTask
或其他异步处理机制来避免在主线程上进行网络操作。JSONObject
或Gson
库来解析JSON数据。<uses-permission android:name="android.permission.INTERNET"/>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Spinner
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
public class Item {
private String name;
public Item(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import androidx.appcompat.app.AppCompatActivity;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private Spinner spinner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
spinner = findViewById(R.id.spinner);
new FetchDataTask().execute("https://example.com/data.json");
}
private class FetchDataTask extends AsyncTask<String, Void, List<Item>> {
@Override
protected List<Item> doInBackground(String... urls) {
HttpURLConnection urlConnection = null;
BufferedReader reader = null;
List<Item> items = new ArrayList<>();
try {
URL url = new URL(urls[0]);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.connect();
InputStream inputStream = urlConnection.getInputStream();
StringBuilder buffer = new StringBuilder();
if (inputStream == null) {
return null;
}
reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
buffer.append(line).append("\n");
}
if (buffer.length() == 0) {
return null;
}
String jsonString = buffer.toString();
JSONArray jsonArray = new JSONArray(jsonString);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String name = jsonObject.getString("name");
items.add(new Item(name));
}
} catch (IOException | JSONException e) {
e.printStackTrace();
} finally {
if (urlConnection != null) {
urlConnection.disconnect();
}
if (reader != null) {
try {
reader.close();
} catch (final IOException e) {
e.printStackTrace();
}
}
}
return items;
}
@Override
protected void onPostExecute(List<Item> items) {
if (items != null) {
ArrayAdapter<Item> adapter = new ArrayAdapter<>(MainActivity.this,
android.R.layout.simple_spinner_item, items);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
}
}
}
}
try-catch
块捕获异常并打印堆栈跟踪,以便更好地理解问题所在。AndroidManifest.xml
中声明了必要的权限。通过以上步骤,你可以成功地从JSON文件的URL填充Android Spinner控件。
领取专属 10元无门槛券
手把手带您无忧上云