当前位置: 首页 > 知识库问答 >
问题:

不幸的是app已经停止

仲孙文乐
2023-03-14

代码

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 972 0-9757/com.example.abhijitroy.superhero E/AndroidRuntime:致命异常:AsyncTask#1进程:com.example.abhijitroy.superhero,PID:9720 java.lang.RuntimeException:在Android.os.AsyncTask$3上执行doInBackground()时出错。done(AsyncTask.java:304)在java.util.concurrent.FutureTask.FinishCompletion(futureTask.java:355)在java.util.concurrent.FutureTask.SetException(futureTask.java:222)在retask.run(FutureTask.java:242)在Android.os.AsyncTask$SerialExecutor$1处运行(asyntask.java:231)在java.util.concurrent.ThreadPoolExecutor.runworker(ThreadPoolExecutor.1112)在java.util.concurrent.ThreadPoolExecutor$worker.run(ThreadPoolExecutor.587)在java.lang.Thread.Run(ThreadPoolExecutor.818)原因:java.lang.NullPointerException:尝试在null对象引用上调用虚拟方法“org.json.jsonArray org.json.JsonObject.GetJsonArray(java.lang.String)”com.example.abhijitroy.superhero.mainactivity$showdata.doInBackground(mainActivity.java:54),在com.example.abhijitroy.superhero.mainActivity$showdata.doINBackground(mainActivity.java:43),在android.os.asynctask$2。call(asynctask.java:292),在java.util.concurrent.futuretask.run(futuretask.java:237),在android.os.asynctask$serialexecutor$1。run(asynctask.java:231) 在java.util.concurrent.ThreadPoolExecutor.RunWorker(ThreadPoolExecutor.java:1112) 在java.util.concurrent.ThreadPoolExecutor$worker.run(ThreadPoolExecutor.java:587) 在java.lang.thread.run(thread.java:818) 

共有1个答案

羊舌胡非
2023-03-14

您的json对象为空,这就是为什么它会给您这个错误

@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
    {
      if(jobj!=null){
        JSONArray jarr = jobj.getJSONArray("Superhero");

        if(jarr!=null){
        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;
}

试试这段代码,为jsonobject和jsonarray添加if语句,以检查它是否为空。

 类似资料:
  • 如有任何帮助,不胜感激。

  • 这个想法是在警报开始时启动一个游戏。我已经在下面展示了manifest.xml。如果我犯了错误,请纠正我。因为我是Android的新手,所以我不太懂。PS:我已经搜索了其他类似的问题,并更正了很多其他错误,但问题依然存在。 这是我从一个教程(AndroidTimeActivity)得到的警报代码: 这是AlarmReceiver类: 这里是Manager类,当警报接收器接收到意图时,我要调用它:

  • 我正在通过proj.android-studio编译一个新项目,使用:

  • 我会在我的模拟器上得到谷歌地图。我按照上面的说明操作,当我运行应用程序时,会出现一条错误消息:不幸的是,DemoGoogleMapsV2已经停止。 我的AndroidManifest.xml: 我的activity_main.xml: my mainactivity.java: 日志错误: 09-04 17:43:51.170:E/trace(1477):打开跟踪文件时出错:没有这样的文件或目录(

  • 我正在尝试将我的launcher活动更改为我刚刚使用twitter数字开发的身份验证活动,我已经在我的android和java代码中做了必要的调整,但注意到每次我尝试启动时应用程序都会崩溃,身份验证活动的名称是,在调试会话期间,我从我的android monitor控制台中观察到,这一行在com.close.close.aboutactivity.onCreate(aboutactivity.ja

  • 我的申请已经停止了。项目将场景转换为作业列表的主要应用,但是,作业列表转换为练习列表,我得到了这些“不幸的应用程序已经停止了”。这是我的类。我也是致命的,除了在logcat。 ApplicationMain.java joblist.java ExpresseList.java AndroidManifest.xml