Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Activity onCreate从另一个活动返回时被调用两次_Android_Android Activity - Fatal编程技术网

Android Activity onCreate从另一个活动返回时被调用两次

Android Activity onCreate从另一个活动返回时被调用两次,android,android-activity,Android,Android Activity,我有一个应用程序,在用户在webview活动中使用OAuth进行身份验证后生成音乐,看起来像这样:主播放器活动OAuth活动返回主播放器活动。但是,从OAuth活动调用onCreate方法两次,导致同时生成和播放两个音频曲目。 以下是main活动的部分代码: public class MainActivity extends Activity { int pitch=60; private static final float VISUALIZER_HEIGHT_DIP = 50f; Rando

我有一个应用程序,在用户在webview活动中使用OAuth进行身份验证后生成音乐,看起来像这样:主播放器活动OAuth活动返回主播放器活动。但是,从OAuth活动调用onCreate方法两次,导致同时生成和播放两个音频曲目。 以下是main活动的部分代码:

public class MainActivity extends Activity {
int pitch=60;
private static final float VISUALIZER_HEIGHT_DIP = 50f;
Random rn;

boolean isRunning = true;  
boolean isPlaying=false;
SeekBar fSlider;
double sliderval;
MediaPlayer mediaPlayer=new MediaPlayer();
ImageButton startStopButton;
ImageButton stopButton;
SeekBar vSlider;
VisualizerView mVisualizerView;
private Visualizer mVisualizer;
ImageButton connectButton;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
   // point the slider to the GUI widget
    rn = new Random();
    fSlider = (SeekBar) findViewById(R.id.frequency);        
    fSlider.setProgress(0);
    vSlider= (SeekBar) findViewById(R.id.seekBar2);
    vSlider.setMax(10);
    vSlider.setProgress(0);
    TextView viewinterval=(TextView) findViewById(R.id.textView2);     
    viewinterval.setText("");
    startStopButton=(ImageButton) findViewById(R.id.imageButton2);
    View activity= this.findViewById(R.id.playerActivity); 
    stopButton=(ImageButton) findViewById(R.id.imageButton1);
    RelativeLayout.LayoutParams params= new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, (int)(VISUALIZER_HEIGHT_DIP * getResources().getDisplayMetrics().density));
    params.addRule(RelativeLayout.BELOW, R.id.seekBar2);
    mVisualizerView = new VisualizerView(this);
    mVisualizerView.setLayoutParams(params);
    ((ViewGroup) activity).addView(mVisualizerView);
    connectButton=(ImageButton) findViewById(R.id.imageButton3);
    connectButton.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View arg0) {
            mediaPlayer.pause();
            Intent intent= new Intent(getApplicationContext(), WebViewActivity.class);
            startActivity(intent);
        }           
    });
    if(riskscores.length !=0){
        viewinterval.setText("generating audio");
        new MIDISequence().execute();           
    }
   };

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}


@Override
protected void onPause() {
    super.onPause();
    if(mediaPlayer.isPlaying()){
        mediaPlayer.pause();
    }
}

class MIDISequence extends AsyncTask<String,Void,String>{
公共类MainActivity扩展活动{
内螺距=60;
专用静态最终浮子可视化仪\u高度\u倾角=50f;
随机rn;
布尔值isRunning=true;
布尔isplay=false;
西格巴滑翔机;
双滑块;
MediaPlayer=新的MediaPlayer();
图像按钮启动按钮;
图像按钮停止按钮;
SeekBar垂直滑翔机;
可视化视图mVisualizerView;
专用可视化工具mVisualizer;
图像按钮连接按钮;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//将滑块指向GUI小部件
rn=新随机数();
fSlider=(SeekBar)findviewbyd(R.id.frequency);
fSlider.setProgress(0);
vSlider=(SeekBar)findViewById(R.id.seekBar2);
vSlider.setMax(10);
vSlider.setProgress(0);
TextView viewinterval=(TextView)findViewById(R.id.textView2);
viewinterval.setText(“”);
startStopButton=(ImageButton)findViewById(R.id.imageButton2);
查看活动=this.findViewById(R.id.playerActivity);
stopButton=(ImageButton)findViewById(R.id.imageButton1);
RelativeLayout.LayoutParams params=新的RelativeLayout.LayoutParams(LayoutParams.MATCH_父项,(int)(可视化工具_高度_倾角*getResources().getDisplayMetrics().density));
参数addRule(RelativeLayout.down,R.id.seekBar2);
mVisualizerView=新的可视化视图(此视图);
mVisualizerView.setLayoutParams(参数);
((视图组)活动).addView(mVisualizerView);
connectButton=(ImageButton)findViewById(R.id.imageButton3);
connectButton.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图arg0){
mediaPlayer.pause();
Intent Intent=新的Intent(getApplicationContext(),WebViewActivity.class);
星触觉(意向);
}           
});
如果(riskscores.length!=0){
viewinterval.setText(“生成音频”);
新建MIDISequence().execute();
}
};
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(R.menu.main,menu);
返回true;
}
@凌驾
受保护的void onPause(){
super.onPause();
if(mediaPlayer.isPlaying()){
mediaPlayer.pause();
}
}
类MIDISequence扩展异步任务{
下面是我的OAuth活动的代码

public class WebViewActivity extends Activity {
private WebView gWebView;
final String REDIRECT_URI = "https://localhost:5000/receive_code";
final String CLIENT_ID = "can't post it here";
final String CLIENT_SECRET = "can't post it here";
final String SCOPE = "basic names genomes analyses";

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.webview);

    gWebView = (WebView) findViewById(R.id.webView1);

    gWebView.loadUrl("https://api.23andme.com/authorize/?redirect_uri="
            + REDIRECT_URI + "&response_type=code&client_id=" + CLIENT_ID
            + "&scope=" + SCOPE);

    Log.d("WEBVIEW", "got to webpage");

    gWebView.setWebViewClient(new WebViewClient() {

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            // TODO Auto-generated method stub
            super.onPageStarted(view, url, favicon);
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            if (url.startsWith(REDIRECT_URI)) {
                Log.d("WEBVIEW", "onpagefinished is called");
                System.out.println("got to override");
                if (url.indexOf("code=") != -1) {
                    //if the query contains code
                    String queryString = null;
                    try {
                        queryString = new URL(url).getQuery();
                    } catch (MalformedURLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    System.out.println(queryString);
                    String[] params = queryString.split("&");
                    String code = null;
                    for (String param : params) {
                        if (param.startsWith("code=")) {
                            code = param.substring(param.indexOf('=') + 1);
                        }
                    }
                    gWebView.setVisibility(View.GONE);
                    new PostRequest().execute(code);
                    // don't go to redirectUri
                }
            }
        }
    });


}
class PostRequest extends AsyncTask<String,Void,String>{


    @Override
    protected String doInBackground(String... params) {
               code retrieving client data.....


            } catch (ClientProtocolException e) {
                // TODO Auto-generated catch block
                System.out.println("CPE" + e);
            } catch(SocketException ex)
               {
                 Log.e("Error : " , "Error on soapPrimitiveData() " + ex.getMessage());
                   ex.printStackTrace();
                   return "error occured";
               } catch (JSONException e) {
                e.printStackTrace();
                return "error occured";
            } catch (IllegalStateException e) {
                e.printStackTrace();
                return "error occured";
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                return "error occured";
            }
        }
        return "request complete";
    }

    @Override
    protected void onPostExecute(String result) {       
        super.onPostExecute(result);
        Log.d("Post result", result);
        Intent intent = new Intent(getApplicationContext(), MainActivity.class);
        startActivity(intent);
    }

}
公共类WebViewActivity扩展活动{
私有网络视图;
最终字符串重定向_URI=”https://localhost:5000/receive_code";
最终字符串CLIENT_ID=“无法在此发布”;
最后一个字符串CLIENT_SECRET=“无法在此处发布”;
final String SCOPE=“基本名称基因组分析”;
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.webview);
gWebView=(WebView)findViewById(R.id.webView1);
gWebView.loadUrl(“https://api.23andme.com/authorize/?redirect_uri="
+重定向_URI+“&response_type=code&client_id=“+client_id
+“&scope=“+scope”);
Log.d(“网络视图”,“进入网页”);
setWebViewClient(新的WebViewClient(){
@凌驾
public void onPageStarted(WebView视图、字符串url、位图favicon){
//TODO自动生成的方法存根
super.onPageStarted(视图、url、favicon);
}
@凌驾
公共void onPageFinished(WebView视图,字符串url){
super.onPageFinished(视图、url);
if(url.startsWith(重定向URI)){
Log.d(“WEBVIEW”,“称为onpagefinished”);
System.out.println(“得到覆盖”);
如果(url.indexOf(“code=)!=-1){
//如果查询包含代码
字符串queryString=null;
试一试{
queryString=新URL(URL).getQuery();
}捕获(格式错误){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
System.out.println(查询字符串);
String[]params=queryString.split(&);
字符串代码=null;
for(字符串参数:params){
if(参数startsWith(“code=)){
代码=参数子字符串(参数indexOf('=')+1);
}
}
gWebView.setVisibility(View.GONE);
new PostRequest().execute(代码);
//不要去看电影
}
}
}
});
}
类PostRequest扩展异步任务{
@凌驾
受保护的字符串doInBackground(字符串…参数){
正在检索客户端数据的代码。。。。。
}捕获(客户端协议例外e){
//TODO自动生成的捕捉块
系统输出打印项次(“CPE”+e);
}捕获(SocketException例外)
{
Log.e(“错误:”,“soapPrimitiveData()上的错误”+ex.getMessage());
例如printStackTrace();
返回“发生错误”;
}捕获(JSONException e){
e、 printStackTrace();
返回“发生错误”;
}捕获(非法状态){
e、 printStackTrace();
返回“发生错误”;
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace()
@Override
protected void onPostExecute(String result) {       
    super.onPostExecute(result);
    Log.d("Post result", result);
    Intent intent = new Intent(getApplicationContext(), MainActivity.class);
    startActivity(intent);
}
@Override
protected void onPostExecute(String result) {       
    super.onPostExecute(result);
    Log.d("Post result", result);
    finish();
}
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash_screen);

        if(savedInstanceState == null){
            // everything else that doesn't update UI
        }
    }