【发布时间】:2021-02-03 07:13:29
【问题描述】:
当我想用 java 显示来自 android 的 json 数据时遇到问题 它在这里什么都没有显示
但是从 json 生成器它很好 这里是json的例子http://www.json-generator.com/api/json/get/cfYdxbAzma?indent=2
这是我的 MainActivity.java
package com.example.callapi;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.AsyncTask;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
public class MainActivity extends AppCompatActivity {
private ListView listView;
private static String url = "http://www.json-generator.com/api/json/get/cfYdxbAzma?indent=2";
ArrayList<HashMap<String,String>> bookList;
private ProgressDialog progressDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.listview);
bookList = new ArrayList<>();
}
private class getBooks extends AsyncTask<Void, Void,Void> {
@Override
protected void onPostExecute(Void aVoid){
super.onPostExecute(aVoid);
if(progressDialog.isShowing())
{
progressDialog.dismiss();
}
ListAdapter listAdapter = new SimpleAdapter(MainActivity.this, bookList,R.layout.item,new String[]{"book_name"},new int[]{R.id.book_name});
listView.setAdapter(listAdapter);
}
@Override
protected void onPreExecute(){
super.onPreExecute();
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setMessage("Loading.....");
progressDialog.setCancelable(false);
progressDialog.show();
}
@Override
protected Void doInBackground(Void... voids){
Handler handler = new Handler();
String jsonString = handler.httpServiceCall(url);
if(jsonString!=null){
try {
JSONObject jsonObject = new JSONObject(jsonString);
JSONArray books = jsonObject.getJSONArray("Book");
for(int i= 0; i<books.length(); i++){
JSONObject jsonObject1 = books.getJSONObject(i);
String id_book = jsonObject1.getString("id_book");
String book_name = jsonObject1.getString("book_name");
HashMap<String,String> bookMap = new HashMap<>();
bookMap.put("id_book",id_book);
bookMap.put("book_name",book_name);
bookList.add(bookMap);
}
} catch (JSONException e) {
Toast.makeText(getApplicationContext(),"Json Parsing Error",Toast.LENGTH_LONG).show();
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),"Json Parsing Error",Toast.LENGTH_LONG).show();
}
});
}
}
else {
Toast.makeText(getApplicationContext(),"Server Error",Toast.LENGTH_LONG).show();
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),"Json Parsing Error",Toast.LENGTH_LONG).show();
}
});
}
return null;
}
}
}
我看到类似android.os.AsyncTask 已被弃用
这里发生了什么?我的代码有问题吗?
谢谢
【问题讨论】:
-
请调试您的代码流是否进入 doInBackground 的 catch 块?
-
除了“覆盖 android.os.asyncTask 中已弃用的方法”之外什么都没有显示