CODE
public class MainActivity extends AppCompatActivity{
ArrayList<Movie_setget> arrlist = null;
ListView _lvlist = null;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
_lvlist = (ListView)findViewById(R.id.lvlist);
Showdata obj = new Showdata();
obj .execute();
}
public class Showdata extends AsyncTask<String , Void, Long>
{
@Override
protected Long doInBackground(String... params)
{
JsonParser jp = new JsonParser();
JSONObject jobj = jp.getJsonFromUrl("https://api.myjson.com/bins/4xdbu");
arrlist = new ArrayList<Movie_setget>();
try
{
JSONArray jarr = jobj.getJSONArray("Superhero");
for(int i=0; i<jarr.length(); i++)
{
JSONObject m = jarr.getJSONObject(i);
String name = m.getString("name");
String image = m.getString("img");
Movie_setget obj = new Movie_setget();
obj.setName(name);
obj.setImg(image);
arrlist.add(obj);
}
}
catch(JSONException e)
{
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Long result)
{
_lvlist.setAdapter(new CustomerAdapter());
super.onPostExecute(result);
}
}
public class CustomerAdapter extends BaseAdapter
{
@Override
public int getCount()
{
return arrlist.size();
}
@Override
public Object getItem(int position)
{
return null;
}
@Override
public long getItemId(int position)
{
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
LayoutInflater inf = getLayoutInflater();
View v =inf.inflate(R.layout.rowdetails, parent, false);
TextView _tvname = (TextView)v.findViewById(R.id.tvname);
//ImageView _ivimg = (ImageView)v.findViewById(R.id.ivimg);
Movie_setget m = new Movie_setget();
m = arrlist.get(position);
_tvname.setText(m.getName());
ImageLoaderTask task = new ImageLoaderTask();
try
{
Bitmap image = task.execute(m.getImg()).get();
_ivimg.setImageBitmap(image);
}
catch(Exception e)
{
e.printStackTrace();
}
return v;
}
}
public class ImageLoaderTask extends AsyncTask<String, Void, Bitmap>
{
@Override
protected Bitmap doInBackground(String... params)
{
try
{
URL url = new URL(params[0]);
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.connect();
InputStream is = connection.getInputStream();
Bitmap bitmap = BitmapFactory.decodeStream(is);
return bitmap;
}
catch(Exception e)
{
e.printStackTrace();
}
return null;
}
}
}
和 logcat
06-03 16:59:26.570 9720-9757 / com.example.abhijitroy.superhero E / AndroidRuntime:FATAL EXCEPTION:AsyncTask#1进程:com.example.abhijitroy.superhero,PID:9720 java.lang.RuntimeException:An在java.util.concurrent.FutureTask.setException的java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)上的android.os.AsyncTask $ 3.done(AsyncTask.java:304)执行doInBackground()时发生错误(FutureTask.java:222)java.util.concurrent.ThreadPoolExecutor上java.util.concurrent.FutureTask.run(FutureTask.java:242)的android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:231) .runWorker(ThreadPoolExecutor.java:1112)java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:587)at java.lang.Thread.run(Thread.java:818)引起:java.lang . NullPointerException:尝试在com.example.abhijitroy.superhero.MainActivity $ Showdata上的空对象引用上调用虚方法'org.json.JSONArray org.json.JSONObject.getJSONArray(java.lang.String)' .doInBackground(MainActivity.java:54)位于java.util的android.os.AsyncTask $ 2.call(AsyncTask.java:292)的com.example.abhijitroy.superhero.MainActivity $ Showdata.doInBackground(MainActivity.java:43) .concurrent.FutureTask.run(FutureTask.java:237)在android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:231)java. java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)at java java.lang.Thread.run中的.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:587)(Thread.java:818)
2 回答
你的json对象为null,这就是为什么它会给你这个错误
尝试这个代码我已经为jsonobject和jsonarray添加了if语句,用于检查它是否为null .
你好PLese使用Volly进行json解析
在这里我得到完美的回应
StringRequest类
它完美的给我这个日志