无法使用 API 数据解析 ArrayAdapter 中的构造函数
Cannot resolve constructor in ArrayAdapter using API data
对于学校项目,我们正在制作一个基于 API 的应用程序,现在我们需要从 URL 获取数据并添加到微调器(下拉列表)中。在获取数据时一切正常(我认为,甚至还没有测试它),但是使用 ArrayAdapter 插入数据让我很头疼。
下面是我的 FetchData class:
package com.example.prege.randomklasgenerator;
import android.app.Activity;
import android.os.AsyncTask;
import android.widget.ArrayAdapter;
import android.widget.Toast;
import org.json.JSONArray;
import org.json.JSONObject;
private String data = "";
private ArrayList<String> klaslist = new ArrayList<>();
@Override
protected Void doInBackground(Void... voids) {
try {
URL url = new URL("http://mgroesink-001-site12.itempurl.com/api/student?studentclass=" + MainActivity.etKlas.getSelectedItem().toString());
HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
InputStream inputStream = urlConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String jsonstring = bufferedReader.readLine();
if(jsonstring != null) {
try {
JSONArray klassen = new JSONArray(jsonstring);
for(int i = 0; i < klassen.length(); i++) {
String klasnaam = klassen.getString(i);
klaslist.add(klasnaam);
}
jsonstring = "";
} catch (Exception e) {
e.printStackTrace();
}
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Void aVoid) {
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(, android.R.layout.simple_spinner_item, klaslist);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
MainActivity.etKlas.setAdapter(dataAdapter);
}
}
在 onPostExecute 上,我尝试创建一个 ArrayAdapter,但它总是在我需要为其提供上下文的参数上出现错误。
你只是错过了 this
。那里有逗号,但前面没有逗号。
protected void onPostExecute(Void aVoid) {
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(ClassName.this, android.R.layout.simple_spinner_item, klaslist);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
MainActivity.etKlas.setAdapter(dataAdapter);
}
希望现在应该可以工作了。
添加您的classname.this只需添加此参数
protected void onPostExecute(Void aVoid) {
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(FetchData.this, android.R.layout.simple_spinner_item, klaslist);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
MainActivity.etKlas.setAdapter(dataAdapter);
}
package com.example.prege.randomklasgenerator;
import android.app.Activity;
import android.os.AsyncTask;
import android.widget.ArrayAdapter;
import android.widget.Toast;
import org.json.JSONArray;
import org.json.JSONObject;
private String data = "";
private ArrayList<String> klaslist = new ArrayList<>();
//Make a constructor here - let name of class is MyClass
Context context;
public Myclass(Context context)
{
this.context = context;
}
@Override
protected Void doInBackground(Void... voids) {
try {
URL url = new URL("http://mgroesink-001-site12.itempurl.com/api/student?studentclass=" + MainActivity.etKlas.getSelectedItem().toString());
HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
InputStream inputStream = urlConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String jsonstring = bufferedReader.readLine();
if(jsonstring != null) {
try {
JSONArray klassen = new JSONArray(jsonstring);
for(int i = 0; i < klassen.length(); i++) {
String klasnaam = klassen.getString(i);
klaslist.add(klasnaam);
}
jsonstring = "";
} catch (Exception e) {
e.printStackTrace();
}
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Void aVoid) {
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(context, android.R.layout.simple_spinner_item, klaslist);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
MainActivity.etKlas.setAdapter(dataAdapter);
}
}
并且在执行此 class 时这样做:-
Myclass my = new Myclass(this);
my.execute();
这绝对适合你。
**Try to change this method**
protected void onPostExecute(Void aVoid) {
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this.context, android.R.layout.simple_spinner_item, klaslist);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
MainActivity.etKlas.setAdapter(dataAdapter);
}
对于学校项目,我们正在制作一个基于 API 的应用程序,现在我们需要从 URL 获取数据并添加到微调器(下拉列表)中。在获取数据时一切正常(我认为,甚至还没有测试它),但是使用 ArrayAdapter 插入数据让我很头疼。
下面是我的 FetchData class:
package com.example.prege.randomklasgenerator;
import android.app.Activity;
import android.os.AsyncTask;
import android.widget.ArrayAdapter;
import android.widget.Toast;
import org.json.JSONArray;
import org.json.JSONObject;
private String data = "";
private ArrayList<String> klaslist = new ArrayList<>();
@Override
protected Void doInBackground(Void... voids) {
try {
URL url = new URL("http://mgroesink-001-site12.itempurl.com/api/student?studentclass=" + MainActivity.etKlas.getSelectedItem().toString());
HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
InputStream inputStream = urlConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String jsonstring = bufferedReader.readLine();
if(jsonstring != null) {
try {
JSONArray klassen = new JSONArray(jsonstring);
for(int i = 0; i < klassen.length(); i++) {
String klasnaam = klassen.getString(i);
klaslist.add(klasnaam);
}
jsonstring = "";
} catch (Exception e) {
e.printStackTrace();
}
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Void aVoid) {
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(, android.R.layout.simple_spinner_item, klaslist);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
MainActivity.etKlas.setAdapter(dataAdapter);
}
}
在 onPostExecute 上,我尝试创建一个 ArrayAdapter,但它总是在我需要为其提供上下文的参数上出现错误。
你只是错过了 this
。那里有逗号,但前面没有逗号。
protected void onPostExecute(Void aVoid) {
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(ClassName.this, android.R.layout.simple_spinner_item, klaslist);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
MainActivity.etKlas.setAdapter(dataAdapter);
}
希望现在应该可以工作了。
添加您的classname.this只需添加此参数
protected void onPostExecute(Void aVoid) {
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(FetchData.this, android.R.layout.simple_spinner_item, klaslist);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
MainActivity.etKlas.setAdapter(dataAdapter);
}
package com.example.prege.randomklasgenerator;
import android.app.Activity;
import android.os.AsyncTask;
import android.widget.ArrayAdapter;
import android.widget.Toast;
import org.json.JSONArray;
import org.json.JSONObject;
private String data = "";
private ArrayList<String> klaslist = new ArrayList<>();
//Make a constructor here - let name of class is MyClass
Context context;
public Myclass(Context context)
{
this.context = context;
}
@Override
protected Void doInBackground(Void... voids) {
try {
URL url = new URL("http://mgroesink-001-site12.itempurl.com/api/student?studentclass=" + MainActivity.etKlas.getSelectedItem().toString());
HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
InputStream inputStream = urlConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String jsonstring = bufferedReader.readLine();
if(jsonstring != null) {
try {
JSONArray klassen = new JSONArray(jsonstring);
for(int i = 0; i < klassen.length(); i++) {
String klasnaam = klassen.getString(i);
klaslist.add(klasnaam);
}
jsonstring = "";
} catch (Exception e) {
e.printStackTrace();
}
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Void aVoid) {
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(context, android.R.layout.simple_spinner_item, klaslist);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
MainActivity.etKlas.setAdapter(dataAdapter);
}
}
并且在执行此 class 时这样做:-
Myclass my = new Myclass(this);
my.execute();
这绝对适合你。
**Try to change this method**
protected void onPostExecute(Void aVoid) {
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this.context, android.R.layout.simple_spinner_item, klaslist);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
MainActivity.etKlas.setAdapter(dataAdapter);
}