data.technologies 是一个数组,我想获得该数组的输出。
这是输出的data.technologies样子:
this.profileService.getEntities().subscribe(data => {
for (const technology of data.technologies) {
console.log(technology);
}
});
Run Code Online (Sandbox Code Playgroud)
的类型getEntities()是Observable<IprofileData>。
export interface IprofileData {
technologies: object;
}
Run Code Online (Sandbox Code Playgroud)
TypeScript 给了我错误:
TS2488:类型“object”必须有一个返回迭代器的“Symbol.iterator”方法。
我究竟做错了什么?
我的目标是让设备用人声说出文本。所以我正在使用 Google 的 Text-to-Speech API。
这是我的代码的样子:
package ch.yourclick.kitt;
import android.media.MediaPlayer;
import android.os.Build;
import android.os.Bundle;
import android.os.StrictMode;
import android.view.View;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import com.google.android.material.tabs.TabLayout;
import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.cloud.texttospeech.v1.AudioConfig;
import com.google.cloud.texttospeech.v1.AudioEncoding;
import com.google.cloud.texttospeech.v1.SsmlVoiceGender;
import com.google.cloud.texttospeech.v1.SynthesisInput;
import com.google.cloud.texttospeech.v1.SynthesizeSpeechResponse;
import com.google.cloud.texttospeech.v1.TextToSpeechClient;
import com.google.cloud.texttospeech.v1.TextToSpeechSettings;
import com.google.cloud.texttospeech.v1.VoiceSelectionParams;
import com.google.common.html.HtmlEscapers;
import com.google.protobuf.ByteString;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import ch.yourclick.kitt.ui.main.SectionsPagerAdapter;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); …Run Code Online (Sandbox Code Playgroud) 我正在使用一个简单的代码来使用 Text-To-Speech:
package ch.yourclick.kitt.fragments;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import android.speech.tts.TextToSpeech;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import java.util.Locale;
import ch.yourclick.kitt.R;
/**
* A simple {@link Fragment} subclass.
* Use the {@link GeneralFragment#newInstance} factory method to
* create an instance of this fragment.
*/
public class GeneralFragment extends Fragment {
private TextToSpeech tts;
public GeneralFragment() {
// Required empty public constructor
}
/**
* Use this factory method to create a new instance of
* this fragment …Run Code Online (Sandbox Code Playgroud) 我想多次使用audio-visualizer-android 的可视化工具。
据我所知,图书馆不支持,但我在这里收到了很好的答案。
这是它的代码:
public class CopyBarVisualizer extends BarVisualizer {
private List<UpdateListener> listeners = new ArrayList<>();
public CopyBarVisualizer(Context context) {
super(context);
}
public CopyBarVisualizer(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public CopyBarVisualizer(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public void addUpdateListener(UpdateListener listener) {
listeners.add(listener);
}
public void copyFrom(CopyBarVisualizer other) {
other.addUpdateListener(new UpdateListener() {
@Override
public void update(byte[] data) {
mRawAudioBytes = data;
CopyBarVisualizer.this.invalidate();
}
});
}
@Override
public void …Run Code Online (Sandbox Code Playgroud) 我有一个基本文本字段,但 Google Chrome 将其指定为密码字段。
<form [formGroup]="formBuilder">
<p>
<mat-form-field appearance="fill">
<mat-label>Title</mat-label>
<input matInput placeholder="Type a title" formControlName="title">
</mat-form-field>
</p>
<p>
<mat-form-field appearance="fill">
<mat-label>Description</mat-label>
<textarea matInput></textarea>
</mat-form-field>
</p>
<p>
<mat-form-field appearance="fill">
<mat-label>Label of a detail</mat-label>
<input matInput type="text"> <!-- THE PROBLEM -->
</mat-form-field>
<mat-form-field appearance="fill">
<mat-label>Description of a detail</mat-label>
<input matInput type="text">
</mat-form-field>
</p>
</form>
Run Code Online (Sandbox Code Playgroud)
如果我单击该输入字段,则结果如下:
我在StackBlitz上尝试过相同的代码,但看起来不错,而且我没有看到问题所在。
我在 localhost:4200 上运行该页面。为什么这个字段是密码字段?
我想在我的 Android 应用程序中使用Google 文本转语音。
根据文档,我已经完成了所有这些步骤:
- 在 Cloud Console 中,转到创建服务帐号密钥页面。
- 从服务帐户列表中,选择新服务帐户。
- 在服务帐户名称字段中,输入名称。
- 从角色列表中,选择项目 > 所有者。
- 单击“创建”。包含您的密钥的 JSON 文件将下载到您的计算机。
我正在使用Google 的代码来传递凭据,这是我下载的 JSON 文件:
public void main(String... args) throws Exception {
// You can specify a credential file by providing a path to GoogleCredentials.
// Otherwise credentials are read from the GOOGLE_APPLICATION_CREDENTIALS environment variable.
InputStream stream = getResources().openRawResource(R.raw.credential); // R.raw.credential is credential.json
GoogleCredentials credentials = GoogleCredentials.fromStream(new FileInputStream(String.valueOf(stream)))
.createScoped(Lists.newArrayList(Collections.singleton("https://www.googleapis.com/auth/cloud-platform")));
Storage storage = StorageOptions.newBuilder().setCredentials(credentials).build().getService();
System.out.println("Buckets:");
Page<Bucket> buckets = storage.list(); …Run Code Online (Sandbox Code Playgroud) 我有一张桌子,当我向下滚动时,我希望第 3 行保持在顶部。
body {
height: 200vh;
}
.sticky {
position: sticky;
top: 0;
}Run Code Online (Sandbox Code Playgroud)
<table>
<tr>
<td>#</td>
<td>1</td>
</tr>
<tr>
<td>#</td>
<td>2</td>
</tr>
<tr class="sticky">
<td>#</td>
<td>3</td>
</tr>
</table>Run Code Online (Sandbox Code Playgroud)
我可以sticky在元素上使用该类<table>并且可以正常工作,但不能在<tr>.