2016-01-05 21 views
0

我想從ActMain傳遞一個字符串到SoundClsRslt,但是我的SoundClsRslt沒有擴展Activity。我嘗試了擴展活動,但它會導致其他問題,我問這裏:has no default constructor in android manifestgetIntent without extend活動

一切正常,直到程序到達「startActivity(i);」 ,應用程序崩潰並且logcat顯示「無法找到顯式活動類{/com.Hugler.CB.SoundClsRslt};你是否在你的AndroidManifest.xml中聲明瞭這個活動?」。你知道什麼是錯的嗎?

接近ActMain的onCreate意圖的結束,以及對於getintent的SoundClsRslt的onSegment。

我ActMain代碼:

package com.Hugler; 

import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.Locale; 

import com.Audio.CAudio; 
import com.Hugler.ADK.ADK; 
import com.Hugler.CB.SoundClsRslt; 
import com.Hugler.Lib.Cfg; 
import com.Hugler.Lib.MyDebug; 
import com.Hugler.Network.Server; 
import com.Hugler.Network.StreamingServer; 

import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.telephony.SmsManager; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.Hugler.Personality.Personality; 
import com.Hugler.Personality.Miti.PerMiti; 
import com.Hugler.TeleOp.TeleOp; 
import com.Motor.Motor; 
import com.TTS.PCMPlayback; 

public class ActMain extends Activity implements ADK.IADK { 
    private TextView m_pTxtRslt; 
    private TextView m_pTxtRslt1; 

    private TextView m_pTxtview; 
    private TextView m_pTxtview1; 

    public static Button m_pBtnHeadToggle; 
    public static Button m_pBtnEarToggle; 

    private SoundClsRslt m_pSoundClsRslt; 
    private static ActMain _p; 

    public static int level; 

    final Intent i = new Intent(this, SoundClsRslt.class); 
    final Context context = this; 
    private TextView result; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 



     _p = this; 

     if (Cfg.Init()) { 
      setContentView(R.layout.main); 

      // get prompts.xml view 
      LayoutInflater li = LayoutInflater.from(context); 
      View promptsView = li.inflate(R.layout.prompts, null); 

      AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
        context); 

      // set prompts.xml to alertdialog builder 
      alertDialogBuilder.setView(promptsView); 

      final EditText userInput = (EditText) promptsView 
        .findViewById(R.id.editTextDialogUserInput); 

      // set dialog message 
      alertDialogBuilder 
        .setCancelable(false) 
        .setPositiveButton("OK", 
          new DialogInterface.OnClickListener() { 
           public void onClick(DialogInterface dialog, int id) { 
            // get user input and set it to result 
            // edit text 
            result.setText(userInput.getText()); 
           } 

          }) 
        .setNegativeButton("Cancel", 
          new DialogInterface.OnClickListener() { 
           public void onClick(DialogInterface dialog, int id) { 
            dialog.cancel(); 
           } 
          }); 

      // create alert dialog 
      AlertDialog alertDialog = alertDialogBuilder.create(); 

      // show it 
      alertDialog.show(); 

      result = (TextView) findViewById(R.id.editTextResult); 
      result.setText(null); 

      m_pTxtRslt = (TextView) findViewById(R.id.TxtRslt); 
      m_pTxtRslt1 = (TextView) findViewById(R.id.TxtRslt1); 

      m_pTxtview = (TextView) findViewById(R.id.textView2); 
      m_pTxtview1 = (TextView) findViewById(R.id.textView3); 

      MyDebug.Init(this, m_pTxtRslt); 

      m_pTxtRslt.setText("Non-Glass"); 
      m_pTxtRslt1.setText(null); 

      m_pTxtview.setText("Glass"); 
      m_pTxtview1.setText(null); 

      m_pSoundClsRslt = new SoundClsRslt(this); 
      SimpleDateFormat pSDF = new SimpleDateFormat("yyyyMMddHHmmss", Locale.US); 
      String sNow = pSDF.format(new Date()); 
      m_pSoundClsRslt.StartLog(Cfg.GetLogDir() + "/" + sNow + ".csv"); 

      PCMPlayback.Init(); 
      Personality.Init(new PerMiti()); 
      TeleOp.Init(m_pSoundClsRslt); 

      if (result != null){ 
       String easyPuzzle = result.getText().toString(); 
       i.putExtra("numberfrom", easyPuzzle); 
       startActivity(i); 
       Toast.makeText(this, "msg msg", Toast.LENGTH_SHORT).show(); 
      } //passing string 

     } else { 
      AlertDialog.Builder pDlg = new AlertDialog.Builder(this); 
      pDlg.setTitle("Fail loading configuration"); 
      pDlg.setMessage(Cfg.ErrMsg()); 
      pDlg.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 
        ActMain.this.finish(); 
       } 
      }); 
      pDlg.show(); 
     } 
    } 

    protected void onResume() { 
     super.onResume(); 
     if (Cfg.ErrMsg() != null) 
      return; 

     Server.Init(); 
      CAudio.Init(m_pSoundClsRslt); 
      CAudio.ResumeSoundCls(); 

     View decorView = getWindow().getDecorView(); 

     int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; 
     decorView.setSystemUiVisibility(uiOptions); 
    } 

    public void Show0(final String sTxt) { 
     runOnUiThread(new Runnable() { 
      public void run() { 
       m_pTxtRslt.setText(sTxt); 
      } 
     }); 
    } 

    public void Show1(final String sTxt) { 

     runOnUiThread(new Runnable() { 
      public void run() { 
       m_pTxtRslt1.setText(sTxt); 
      } 
     }); 
    } 

    public void Show2(final String sTxt) { 
     runOnUiThread(new Runnable() { 
      public void run() { 
       m_pTxtview.setText(sTxt); 
      } 
     }); 
    } 

    public void Show3(final String sTxt) { 
     runOnUiThread(new Runnable() { 
      public void run() { 
       m_pTxtview1.setText(sTxt); 
      } 
     }); 
    } 

    public void OnADKStat(int iStat, String sMsg) { 

     if (iStat == ADK.S_CONNECTED) 
      Motor.Connect(ADK.GetInStream(), ADK.GetOutStream()); 
     else if (iStat == ADK.S_DISCONNECTED) 
      runOnUiThread(new Runnable() { 
       public void run() { 
        Motor.Disconnect(); 
        ActMain.this.finish(); 
       } 
      }); 
    } 
} 

我SoundClsRslt代碼:

package com.Hugler.CB; 

import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.nio.ByteBuffer; 
import java.nio.ByteOrder; 
import java.nio.ShortBuffer; 
import java.nio.channels.FileChannel; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.Locale; 

import com.Hugler.ActMain; 
import com.Hugler.TeleOp.TeleOp; 
import com.SoundClassification.SoundClassification.ISC; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Environment; 
import android.telephony.SmsManager; 

public class SoundClsRslt implements ISC { 

    public static int interact; 

    private ActMain m_pMain; 
    private static int m_iID; 
    private static int m_iID1; 
    private FileOutputStream _fLog; 

    public SoundClsRslt(ActMain pMain) { 
     m_pMain = pMain; 
     m_iID = 0; 
     m_iID1 = 0; 
     _fLog = null; 
    } 

    public void StartLog(String sFile) { 
     if (_fLog != null) 
      return; 
     try { 
      _fLog = new FileOutputStream(sFile); 
      String sHdr = "Time,Event,Confidence\n"; 
      _fLog.write(sHdr.getBytes()); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    public void OnLog(String sLog) { 
    } 

    public void OnLog2(String sLog) { 
    } 

    public void OnSegment(double[] pBuf, int iLen, String sCls, double dConf) { 
     sCls = sCls.toLowerCase(Locale.getDefault()); 
     { 
      if (sCls.contains("glass")) { 

       m_iID1++; 
       m_pMain.Show2(m_iID1 + "." + sCls); 
       m_pMain.Show3("" + dConf); 

       //convert short to byte 
       ByteBuffer myByteBuffer = ByteBuffer.allocate(iLen * 2); 
       myByteBuffer.order(ByteOrder.LITTLE_ENDIAN); 

       //open pcm 
       ShortBuffer myShortBuffer = myByteBuffer.asShortBuffer(); 
       for (int i = 0; i < iLen ; i++) { 
        myShortBuffer.put((short)(pBuf[i])); 
       } 
       File file; 

       FileChannel out = null; 

       try { 
        String filepath = Environment.getExternalStorageDirectory().getPath(); 
        SimpleDateFormat pSDF = new SimpleDateFormat("yyyyMMdd_HH_mm_ss", Locale.UK); 
        String sNow = pSDF.format(new Date()); 
        file = new File(filepath,"AudioRecorder" + "/segment_" + sNow + ".pcm"); 

        Intent intent = getIntent(); 

        SimpleDateFormat smsdate = new SimpleDateFormat("yyyy/MM/dd_HH:mm:ss", Locale.US); 
        String messageToSend = "Glass breaking sound detected at "+ smsdate.format(new Date()) + " (yyyy/MM/dd_HH:mm:ss)"; 
        String number = intent.getExtras().getString("numberfrom"); 
        SmsManager.getDefault().sendTextMessage(number, null, messageToSend, null, null); 

        // if file doesnt exists, then create it 
        if (!file.exists()) { 
         file.createNewFile(); 
        } 
        out = new FileOutputStream(file).getChannel(); 

        //write to pcm 
        out.write(myByteBuffer); 
        //close pcm 
        out.close(); 
       } catch (IOException e) { 
      e.printStackTrace(); 
       } finally { 
        try { 
         if (out != null) { 
          out.close(); 
         } 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
       } 

      } else { 
      m_iID++; 
      m_pMain.Show0(m_iID + "." + sCls); 
       m_pMain.Show1("" + dConf); 
      } 
     } 
     TeleOp.SendInteraction(); 

     if (_fLog != null) { 
      SimpleDateFormat pSDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US); 
      String sNow = pSDF.format(new Date()); 
      String sLog = sNow + "," + sCls + "," + dConf + "\n"; 
      try { 
       _fLog.write(sLog.getBytes()); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 
+0

你能解釋一下你想傳遞給SoundClsRslt類的字符串嗎 – rahul

+0

只是一個字符串?把它放在SharedPrefences中 – Nirel

+0

爲了intent而在ActMain的onCreate的結尾附近,以及在onClass的SoundClsRslt for getintent。 –

回答

0

您可以定義在類的構造函數的上下文。聊天后,你可以得到的意圖與myContext.getIntent()你的構造應該是這樣的:

private Context myContext 
public SoundClsRslt(ActMain pMain, Context context) { 
    m_pMain = pMain; 
    m_iID = 0; 
    m_iID1 = 0; 
    this.myContext = context; 
    _fLog = null; 
} 
+0

一切正常,直到程序到達「startActivity(i);」 ,應用程序崩潰並且logcat顯示「無法找到顯式活動類{/com.Hugler.CB.SoundClsRslt};你是否在你的AndroidManifest.xml中聲明瞭這個活動?」。你知道什麼是錯的嗎? –

0

您已經通過您的ActMain實例您SoundClsRslt。因此,將m_pMain.getIntent()而不是getIntent()放在SoundClsRslt中並嘗試。

+0

一切正常,直到程序到達「startActivity(i);」 ,應用程序崩潰並且logcat顯示「無法找到顯式活動類{/com.Hugler.CB.SoundClsRslt};你是否在你的AndroidManifest.xml中聲明瞭這個活動?」。你知道什麼是錯的嗎? –

+0

你無法啓動SoundClsRslt作爲一項活動。因爲這不是一項活動(根據你的代碼)。 – TdSoft

+0

如果您想將easyPuzzle字符串傳遞給SoundClsRslt。首先在SoundClsRslt中創建一個setter方法,將其稱爲this(例如:m_pSoundClsRslt.yourMethodName(easyPuzzle);) – TdSoft