Java 如何在异步任务中从onpostexecute启动新活动

Java 如何在异步任务中从onpostexecute启动新活动,java,android,android-asynctask,Java,Android,Android Asynctask,**我有三节课。我的Mainactivity、newactivity和扩展AsyncTask的活动,现在在扩展AsyncTask的活动中,我需要在AsyncTask中的OnPostExecute上启动新活动。我该怎么做?我已经完成了上下文,但我从mainactivity执行backgroundtask行中得到错误,但应用程序崩溃,请帮助** 这是活动课 public class MainActivity extends AppCompatActivity { Button click;

**我有三节课。我的Mainactivity、newactivity和扩展AsyncTask的活动,现在在扩展AsyncTask的活动中,我需要在AsyncTask中的OnPostExecute上启动新活动。我该怎么做?我已经完成了上下文,但我从mainactivity执行backgroundtask行中得到错误,但应用程序崩溃,请帮助**

这是活动课

public class MainActivity extends AppCompatActivity {

    Button click;
    //public static TextView data;
    public static LineChart mchart;
    List<Entry> x;
    ArrayList<String> y;
    private fetchdata list;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        click=(Button)findViewById(R.id.button);
        mchart=(LineChart)findViewById(R.id.linechart);
        //data=(TextView)findViewById(R.id.fetcheddata);
        list=new fetchdata();
        click.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                fetchdata process=new fetchdata();
                process.execute();


            }
        });


    }
}





 public class fetchdata extends AsyncTask<Void,Void,Void> {
        String data="";
        String dataparsed="";
        String singleparsed="";
        List<Entry> x;
        List<String> y;
        boolean flag=false;


        @Override
        protected Void doInBackground(Void... voids) {

            x = new ArrayList<Entry>();
            y = new ArrayList<String>();
            try {
                URL url=new URL("https://io.adafruit.com/api/v2/Yarev/feeds/pir-sensor/data");
                HttpURLConnection httpURLConnection=(HttpURLConnection) url.openConnection();
                InputStream inputStream=httpURLConnection.getInputStream();
                BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
                String line="";
                while (line!=null)
                {
                    line=bufferedReader.readLine();
                    data=data+line;
                }
                JSONArray JA=new JSONArray(data);
                for(int i=0;i<JA.length();i++)
                {
                    JSONObject JO= (JSONObject) JA.get(i);
                    singleparsed="Value:"+JO.get("value")+"\n"+
                            "Feed key:"+JO.get("feed_key")+"\n"+
                            "Created:"+JO.get("created_at")+"\n";
                    int value=JO.getInt("value");
                    float v1=value;
                    x.add(new Entry(i,v1));
                    dataparsed=dataparsed+singleparsed;
                }


            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                e.printStackTrace();
            }

            return null;
        }


        @Override
        protected void onPostExecute(Void aVoid) {

            super.onPostExecute(aVoid);

            //start new activity?????


        }
        public List<Entry> getList() {
            return x;
        }

    }

您必须使用上下文创建构造函数

public class fetchdata extends AsyncTask<Void,Void,Void> {
        String data="";
        String dataparsed="";
        String singleparsed="";
        List<Entry> x;
        List<String> y;
        boolean flag=false;

        private WeakReference<Context> contextRef;

        public fetchdata(Context context) {
            contextRef = new WeakReference<>(context);
        } 


        @Override
        protected Void doInBackground(Void... voids) {

            x = new ArrayList<Entry>();
            y = new ArrayList<String>();
            try {
                URL url=new URL("https://io.adafruit.com/api/v2/Yarev/feeds/pir-sensor/data");
                HttpURLConnection httpURLConnection=(HttpURLConnection) url.openConnection();
                InputStream inputStream=httpURLConnection.getInputStream();
                BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
                String line="";
                while (line!=null)
                {
                    line=bufferedReader.readLine();
                    data=data+line;
                }
                JSONArray JA=new JSONArray(data);
                for(int i=0;i<JA.length();i++)
                {
                    JSONObject JO= (JSONObject) JA.get(i);
                    singleparsed="Value:"+JO.get("value")+"\n"+
                            "Feed key:"+JO.get("feed_key")+"\n"+
                            "Created:"+JO.get("created_at")+"\n";
                    int value=JO.getInt("value");
                    float v1=value;
                    x.add(new Entry(i,v1));
                    dataparsed=dataparsed+singleparsed;
                }


            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                e.printStackTrace();
            }

            return null;
        }


        @Override
        protected void onPostExecute(Void aVoid) {

            super.onPostExecute(aVoid);

           if (context != null) {
            // start new activity with context
             Intent intent=new Intent(context,NewActivity.class);
             context.startActivity(intent);
           }


        }
        public List<Entry> getList() {
            return x;
        }

    }

你的活动背景在哪里?@pavan你需要校对和复制编辑你的问题,这很难理解,请像关注代码一样密切关注您的文本描述。您能否详细说明如何在postexecute中使用上下文和startactivity从mainactivity调用,我已经编辑了problem@pavansai我已经更新了答案
new fetchdata(this).execute();