我正在使用进度dialog.i需要在用户关闭progressdialog时停止该线程.不幸的是它给出了异常请帮助我..
在内心阶级
class UpdateThread extends Thread{
public void run() {
while (true){
count=adapter.getCount();
try {
mHandler.post( new Runnable() {
public void run() {
Log.i(TAG,count+"count");
progressDialog.setMessage(count + "Device found");
}
});
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
在OnCreate
updateThread=new UpdateThread();
progressDialog= new ProgressDialog(GroupListActivity.this);
synchronized (this) {
updateThread.start();
}
Run Code Online (Sandbox Code Playgroud)
ondismissal
progressDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
try {
synchronized (this) {
updateThread.wait(300);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
Log.i(TAG,"Thread is stopped");
} …
Run Code Online (Sandbox Code Playgroud) 我正在对Android Contacts ContentProvider进行查询.我需要一个Group By子句.在Gingerbread和Honeycomb中,我这样做是为了同时搜索电话号码和电子邮件:
(实际的WHERE子句要复杂得多,因为它包含类型检查.这是一种简化,但它会产生相同的结果)
String request = Phone.NUMBER + " LIKE ? OR " + Email.DATA + " LIKE ?";
String[] params = new String["%test%", "%test%"];
Cursor cursor = getContentResolver().query(
Data.CONTENT_URI,
new String[] { Data._ID, Data.RAW_CONTACT_ID },
request + ") GROUP BY (" + Data.RAW_CONTACT_ID,
params, "lower(" + Data.DISPLAY_NAME + ") ASC");
Run Code Online (Sandbox Code Playgroud)
注入')'完成WHERE子句并允许插入GROUP BY子句.
但是,在Ice Cream Sandwich中,似乎ContentProvider会检测到这一点,并添加正确数量的括号以防止我的注射.在单个游标查询中执行此操作的任何其他方式?
目前,我已经删除了GROUP BY,并添加了一个MatrixCursor来限制影响,但我宁愿拥有一个真正的游标:
MatrixCursor result = new MatrixCursor(new String[] { Data._ID, Data.RAW_CONTACT_ID });
Set<Long> seen = new HashSet<Long>();
while (cursor.moveToNext()) {
long …
Run Code Online (Sandbox Code Playgroud) 好吧我正在创建一个ArrayAdapter并在我的Alert Dialog中使用它,因为我不想在SingleItemSelection对话框中显示默认的单选按钮.
相反,我想要更改所选项目的背景,然后当用户按下肯定按钮时,我将执行与所选项目相关的操作.
private void showAlertDialog()
{
final String[] options = getResources().getStringArray(R.array.dialog_options);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, options);
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
dialogBuilder.setTitle("My Dialog");
dialogBuilder.setAdapter(adapter, new OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
Toast.makeText(getApplicationContext(), "item clicked at index " + which, Toast.LENGTH_LONG).show();
// Here I need to change the background color of the item selected and prevent the dialog from being dismissed
}
});
//String strOkay = getString(R.string.okay);
dialogBuilder.setPositiveButton("OK", null); // TODO
dialogBuilder.setNegativeButton("Cancel", null); // …
Run Code Online (Sandbox Code Playgroud) 我有一个SVG图像,我想包含在Android项目中.
该项目的minSdk版本为9.Android Studio为SVG生成PNG文件.
但是,对于API 21+,Android studio将SVG包含在drawable-anydpi-v21
资源文件夹中.
这意味着运行API 21及更高版本的任何设备都将使用SVG而不是PNG.
这就是问题所在:我的SVG需要android:fillType="evenOdd"
.
PNG是正确生成的,但对于SVG,因为该属性是API 24+,它在API 21设备上被忽略,并且图像显示为填充而不是类似线框的图像.
反正有没有说服Android工作室只包含PNG并完全放弃SVG?
还有其他解决方案吗?
我遇到了一个问题,其中海报试图让一个线程等待一秒钟.他们正在使用wait
,但在一个synchronized
街区之外,因此它崩溃了.
给定一个正在运行的线程,暂停执行给定时间,可以执行以下操作:
Thread.sleep(1000);
Run Code Online (Sandbox Code Playgroud)
这应该也可以,并且具有非常相似的结果:
synchronized(this) {
this.wait(1000);
}
Run Code Online (Sandbox Code Playgroud)
使用wait
超时,线程将在1秒后取消暂停.
问题是:如果我没有任何监控和通知问题,是否有实际的理由使用一个而不是另一个?
我正在尝试打印我的应用程序通过FileWriter保存的.txt文件.
它保存的文件是/sdcard/StudentLatePass.txt
单击打印按钮时,将保存SD文件,然后需要打印.我一直在关注谷歌云打印教程.
package com.android.upgrayeddapps.latepass;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.Button;
import android.widget.Toast;
public class StudentActivity extends Activity
{
EditText txtData;
Button btnPrintTardy;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.student);
//Displays the Custom dialog for student login
AlertDialog.Builder builder;
AlertDialog alertDialog;
Context mContext = this;
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(LAYOUT_INFLATER_SERVICE) ;
View layout = inflater.inflate(R.layout.studentlogin, null); …
Run Code Online (Sandbox Code Playgroud) 我以编程方式进行了以下布局:
LinearLayout progressLayout = new LinearLayout(this);
progressLayout.setOrientation(LinearLayout.VERTICAL);
TextView t = new TextView(this);
t.setText("Test..");
t.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20);
LayoutParams l = new LayoutParams(android.view.ViewGroup.LayoutParams.WRAP_CONTENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT);
l.setMargins(10, 10, 10, 25); ===> does not work?
t.setLayoutParams(l);
ProgressBar circle = new ProgressBar(this, null,
android.R.attr.progressBarStyleLarge);
circle.setLayoutParams(new LayoutParams(android.view.ViewGroup.LayoutParams.WRAP_CONTENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT));
progressLayout.setLayoutParams(new LayoutParams(
android.view.ViewGroup.LayoutParams.FILL_PARENT,
android.view.ViewGroup.LayoutParams.FILL_PARENT));
progressLayout.setGravity(Gravity.CENTER);
progressLayout.addView(t);
progressLayout.addView(circle);
this.setContentView(progressLayout);
Run Code Online (Sandbox Code Playgroud)
但是我没有把它作为setMargins中的值给出,它根本没有任何效果.
是什么原因?
布局具有fill_parent的高度和宽度,因此不会出现问题.
谢谢 :)
我有一个活动A有这个功能:
public void onSettingsClick(View view){
Intent intent = new Intent(this, Settings.class);
startActivity(intent);
checkSettings();
}
Run Code Online (Sandbox Code Playgroud)
有没有办法让活动A等待活动B("Settings.class")完成执行功能"checkSettings();" ?
谢谢
我在实时街景上创建了一个应用程序,它在 Lollipop 及更高版本上完美运行,但在 android 4.4 及更低版本上崩溃。在崩溃时,我收到此错误
java.lang.RuntimeException:
at android.app.ActivityThread.installProvider (ActivityThread.java:4797)
at android.app.ActivityThread.installContentProviders (ActivityThread.java:4389)
at android.app.ActivityThread.handleBindApplication (ActivityThread.java:4329)
at android.app.ActivityThread.access$1500 (ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1256)
at android.os.Handler.dispatchMessage (Handler.java:102)
at android.os.Looper.loop (Looper.java:136)
at android.app.ActivityThread.main (ActivityThread.java:5021)
at java.lang.reflect.Method.invokeNative (Native Method)
at java.lang.reflect.Method.invoke (Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:601)
at dalvik.system.NativeStart.main (Native Method)
Run Code Online (Sandbox Code Playgroud) 遵循libgdx教程之后,我创建了一个Gradle项目,该项目可以在台式PC上正常运行,但无法在笔记本电脑上启动Java。
我的两台机器都在带有GNOME Shell 3.18.3和Java 1.8.0_66 OpenJDK的Arch Linux 4.3.3-2上使用Gradle 2.10。
这是我在笔记本电脑上遇到的错误:
$ gradle desktop:run
Configuration on demand is an incubating feature.
:core:compileJava UP-TO-DATE
:core:processResources UP-TO-DATE
:core:classes UP-TO-DATE
:core:jar UP-TO-DATE
:desktop:compileJava UP-TO-DATE
:desktop:processResources UP-TO-DATE
:desktop:classes UP-TO-DATE
:desktop:run FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':desktop:run'.
> A problem occurred starting process 'command '/usr/lib/jvm/java-8-openjdk/bin/java''
Run Code Online (Sandbox Code Playgroud)
该文件/usr/lib/jvm/java-8-openjdk/bin/java
存在,具有所有用户的所有必需权限,并且可以手动执行而不会出现问题。