我有一个小应用程序,基本上设置一个计时器,一个接一个地播放2个声音的集合.
我尝试了2个计时器,因为我希望每次都能在两个声音的同时开始.我给应用程序500ms用于在开始之前设置两个计时器
Calendar cal = Calendar.getInstance();
Date start = new Date(cal.getTime().getTime() + 500);
timerTask1 = new TimerTask() { //1st timer
@Override
public void run() {
soundManager.playSound(1);
}
};
timer1 = new Timer();
timer1.schedule(timerTask1, start, 550);
timerTask2 = new TimerTask() { //2nd timer
@Override
public void run() {
soundManager.playSound(2);
}
};
timer2 = new Timer();
timer2.schedule(timerTask2, start, 550);
}
Run Code Online (Sandbox Code Playgroud)
soundManager是一个基于本教程的SoundManager对象.因为我同时只播放2个声音,所以我所做的唯一改变就是将可用流的数量从20减少到2.
现在问题.它不是在我的Motorola RAZR或仿真器上以相同的速率播放.应用程序有时会减速,制动时间比预期长.我不能让这种情况发生.这可能有什么问题?
我在OGG格式中使用非常短的声音
编辑:我做了一些研究.使用了2个aproaches.我正在测量声音之间的毫秒距离.刷新率为500毫秒.
我对此非常困惑.我有一个actionbar列表导航.我点击列表fragment一个接一个地打开2 并显示在同一个活动中.我基本上用这种方法替换它们:
public void openFragment(AprilAppsFragment createdFragment){
if (createdFragment.getClass().isInstance(getDisplayedFragment()))
return;
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
transaction.replace( R.id.main_fragment, createdFragment, "displayed fragment");
transaction.addToBackStack(null);
transaction.commit();
}
Run Code Online (Sandbox Code Playgroud)
我打开片段A,然后打开片段B,然后旋转屏幕.片段A正在重新创建崩溃我的应用程序
是的,因为我正在使用替换?如何避免重新创建不再显示的片段,而不会失去对其进行反压的可能性?
我正在尝试使用示例GAE/Android应用程序.有实体.
在生成的PlaceEndpoint类中有一个方法:
@ApiMethod(name = "listGame")
public CollectionResponse<Place> listPlace(
@Nullable @Named("cursor") String cursorString,
@Nullable @Named("limit") Integer limit) {
EntityManager mgr = null;
Cursor cursor = null;
List<Game> execute = null;
try {
mgr = getEntityManager();
Query query = mgr.createQuery("select from Place as Place");
if (cursorString != null && cursorString != "") {
cursor = Cursor.fromWebSafeString(cursorString);
query.setHint(JPACursorHelper.CURSOR_HINT, cursor);
}
if (limit != null) {
query.setFirstResult(0);
query.setMaxResults(limit);
}
execute = (List<Game>) query.getResultList();
cursor = JPACursorHelper.getCursor(execute);
if (cursor != null)
cursorString = cursor.toWebSafeString();
// …Run Code Online (Sandbox Code Playgroud) 我更新到Android Studio 1.0 RC后,出现此错误:
AppEnginePlugin : Unsupported major.minor version 51.0
Run Code Online (Sandbox Code Playgroud)
由于appengine是用java 1.7编译的,为什么它说它不受支持?
这是我的java版本:
java version "1.7.0_67"
Java(TM) SE Runtime Environment (build 1.7.0_67-b01)
Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)
Run Code Online (Sandbox Code Playgroud) 在一些论坛的答案后,我正在使用这个:
while (fileReader.nextLine() != null) {
String line = fileReader.nextLine();
System.out.println(line);
}
Run Code Online (Sandbox Code Playgroud)
...但它最后会抛出异常(线程中的异常"main"java.util.NoSuchElementException:找不到行)
这真的很奇怪.我有一个看起来几乎相同但不抛出异常的函数.这是有问题的代码:
public Header[] generateHeaders() {
Header[] headers = new Header[2];
headers[0] = new BasicHeader("Client", "android");
headers[1] = new BasicHeader("Accept", "application/json; charset=UTF-8");
return headers;
}
public HttpPost getHttpRequestPost() throws URISyntaxException {
HttpPost request = new HttpPost(new URI(generateQueryUrl()));
request.setHeaders(generateHeaders());
setTimeout(request);
return request;
}
protected Query buildQuery() {
Query query = null;
query = new Query(new Config(), getContext());
query.addOrderedParam(FUNCTION_NAME);
return query;
}
Run Code Online (Sandbox Code Playgroud)
下面的代码导致ClientProtocolException,正是这样:Caused by: org.apache.http.ProtocolException: Invalid header: :
public HttpResponse execute() throws URISyntaxException, ClientProtocolException,
IOException {
HttpClient client = new …Run Code Online (Sandbox Code Playgroud) 我试图在Android应用程序中使用java后端的方法(问题可能是后端使用的是JAVA 1.7,以及Android应用程序JAVA 1.6).方法是:
public static boolean isAlphabetCharacter(String letter) {
String pattern = "\\A\\pL+\\z";
return letter.matches(pattern);
}
Run Code Online (Sandbox Code Playgroud)
它崩溃了: Incorrect Unicode property near index ...
至少看过2个类似的问题,但都考虑了eclipse非gradle构建.
我正在尝试使用gradle组装发布:
./gradlew myapp:assembleRelease --stacktrace
Run Code Online (Sandbox Code Playgroud)
除了最新的Google proguard示例,我的proguard.txt还包含:
# ButterKnife
-keep class *$$ViewInjector{}
-dontwarn butterknife.Views$InjectViewProcessor
-dontwarn butterknife.internal.**
#JodaTime
-dontwarn org.joda.time.**
#Apache
-dontnote org.apache.**
-dontwarn org.apache.**
Run Code Online (Sandbox Code Playgroud)
这似乎消除了所有的警告,但现在正在与神秘的挣扎
Caused by: java.lang.UnsupportedOperationException: Method must be overridden in [proguard.optimize.peephole.ClassMerger] if ever called
Run Code Online (Sandbox Code Playgroud)
......我不知道这意味着什么.
我试图替换String匹配我的正则表达式的第一次出现,同时像这样迭代这些出现:
(这段代码非常简化,所以不要试图找到一些更大的意义)
Matcher tagsMatcher = Pattern.compile("\\{[sdf]\\}").matcher(value);
int i = 0;
while (tagsMatcher.find()) {
value = value.replaceFirst("\\{[sdf]\\}", "%" + i + "$s");
i++;
}
Run Code Online (Sandbox Code Playgroud)
我正在IllegalArgumentException: Illegal group reference执行replaceFirst. 为什么?
我正在尝试使用 ?s 作为参数来构建我的查询,但它显然有问题。希望文档至少提供一个示例...
SQLDb.rawQuery("SELECT C.?, B.?, B.?, B.? FROM ? C, ? B WHERE C.? = B.?", new String[]
{Tables.CATEGORIES_NAME, Tables.BUDGET_DATE, Tables.BUDGET_VALUE, Tables.KIND, Tables.CATEGORIES, Tables.BUDGET, Tables.CATEGORIES, Tables.TABLE_ID, Tables.TABLE_ID});
Run Code Online (Sandbox Code Playgroud)
那些 const 都是字符串,只是列的名称。我究竟做错了什么?