我尝试从我的应用程序中读取JSON
文件,但是当我运行它时显示空白页面。
如果有人知道原因只是告诉我。提前致谢
适配器
public class QuestionsActivity extends ArrayAdapter<quizzes> {
protected quizzes[] quizzesList;
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater flat = LayoutInflater.from(getContext());
View customView = flat.inflate(R.layout.activity_questions, parent, false);
quizzes q=quizzesList[position];
TextView title=(TextView)customView.findViewById(R.id.title);
title.setText(q.title);
return convertView;
}
QuestionsActivity(Context context, quizzes[] lst) {
super(context, R.layout.activity_questions, lst);
this.quizzesList=lst;}
@Override
public quizzes getItem(int position) {
return quizzesList[position];
}
}
主要
public class Quiz extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_quiz);
AsyncTask<Void, Void, String> async = new AsyncTask<Void, Void, String>()
{
@Override
protected String doInBackground(Void... params) {
try{
return getData();
}catch (IOException e){
e.printStackTrace();
}
return "";
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
@Override
protected void onPostExecute(final String s)
{
try {
final JSONArray jsonArray=new JSONArray(s);
final quizzes[] q=new quizzes[jsonArray.length()];
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject=jsonArray.getJSONObject(i);
String title=jsonObject.getString("title");
quizzes Quizzes =new quizzes(title);
q[i]=Quizzes;
}
final ListAdapter quizz_adapter=new QuestionsActivity(getApplicationContext(),q);
final ListView listView =(ListView) findViewById(R.id.list1);
listView.setAdapter(quizz_adapter);
Log.w("","");
}catch (JSONException e) {
e.printStackTrace();
}
Log.w("received data",s);
super.onPostExecute(s);
}
};
async.execute();
}
private String getData() throws IOException {
URL url = new URL("http://quizz.pl/v28/api/quizs?limit=10&offset=0&order=FILL");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.connect();
int resCode = urlConnection.getResponseCode();
String s = "";
try {
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line = "";
while ((line = br.readLine()) != null) {
s = s + line;
}
} finally {
urlConnection.disconnect();
return s;
}
}
}
JSON
文件的启动程序属性
public class quizzes {
String title;
public quizzes( String title)
{
this.title=title;
}
}
答案 0 :(得分:0)
Ahmed El-elaimy!
我怀疑您在将数据设置到适配器后忘记拨打quizz_adapter.notifyDataSetChanged()
。
祝你好运!
答案 1 :(得分:0)
通过运行代码,在final JSONArray jsonArray=new JSONArray(s)
之后抛出异常,这是因为您的Web服务不返回和数组,而是在属性quizs
内部的对象是一个数组。
为了避免在解析Json字符串时遇到问题,我建议您使用the Gson library,这会消除很多工作
在提出问题之前,请尝试调试代码并阅读logcats
答案 2 :(得分:0)
我认为问题在于您如何使用 inpustream 和 bufferedReader 对象。
这里有一个解决您问题的方法:
public static String getData(String urlp) throws JSONException {
InputStreamReader in = null;
StringBuilder sb = new StringBuilder();
HttpURLConnection conn = null;
try {
URL url = new URL(urlp);
conn = (HttpURLConnection)url.openConnection();
if (conn != null && conn.getInputStream() != null) {
in = new InputStreamReader(conn.getInputStream(),
Charset.defaultCharset()
/*FROM JAVA DOC
Charset
Description
US-ASCII Seven-bit ASCII, a.k.a. ISO646-US, a.k.a. the Basic Latin block of the Unicode character set
ISO-8859-1 ISO Latin Alphabet No. 1, a.k.a. ISO-LATIN-1
UTF-8 Eight-bit UCS Transformation Format
UTF-16BE Sixteen-bit UCS Transformation Format, big-endian byte order
UTF-16LE Sixteen-bit UCS Transformation Format, little-endian byte order
UTF-16 Sixteen-bit UCS Transformation Format, byte order identified by an optional byte-order mark
*/);
BufferedReader bufferedReader = new BufferedReader(in);
if (bufferedReader != null) {
int i;
while ((i = bufferedReader.read()) != -1) {
sb.append((char) i);
}
bufferedReader.close();
}
}
in.close();
} catch (Exception e) {
//..dosomething
}
return sb.toString();
}
在您的AsyncTask中或您需要的任何地方:
String url = "http://quizz.pl/v28/api/quizs?limit=10&offset=0&order=FILL";
JSONObject jsonbject = new JSONObject(getData(url));
JSONArray jsonarray = jsonbject.getJSONArray("quizs");