小编njz*_*zk2的帖子

java.lang.IllegalMonitorStateException:对象在wait()之前没有被线程锁定?

我正在使用进度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)

java multithreading android

41
推荐指数
2
解决办法
8万
查看次数

在冰淇淋三明治中的ContentResolver中分组

我正在对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)

android group-by android-contentprovider android-contacts

18
推荐指数
1
解决办法
8071
查看次数

AlertDialog - 不要忽略项目点击

好吧我正在创建一个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)

android android-alertdialog

12
推荐指数
2
解决办法
7254
查看次数

在Android 21上使用fillType ="evenOdd"

我有一个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?

还有其他解决方案吗?

svg android vector android-vectordrawable

11
推荐指数
3
解决办法
7594
查看次数

我可以用等待而不是睡觉吗?

我遇到了一个问题,其中海报试图让一个线程等待一秒钟.他们正在使用wait,但在一个synchronized街区之外,因此它崩溃了.

给定一个正在运行的线程,暂停执行给定时间,可以执行以下操作:

Thread.sleep(1000);
Run Code Online (Sandbox Code Playgroud)

这应该也可以,并且具有非常相似的结果:

synchronized(this) {
    this.wait(1000);
}
Run Code Online (Sandbox Code Playgroud)

使用wait超时,线程将在1秒后取消暂停.

问题是:如果我没有任何监控和通知问题,是否有实际的理由使用一个而不是另一个?

java multithreading

8
推荐指数
2
解决办法
2485
查看次数

通过Google云打印进行打印

我正在尝试打印我的应用程序通过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)

android google-cloud-print

6
推荐指数
1
解决办法
5071
查看次数

边距不起作用

我以编程方式进行了以下布局:

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的高度和宽度,因此不会出现问题.

谢谢 :)

android android-layout

6
推荐指数
1
解决办法
2288
查看次数

进行活动A等待活动B完成继续

我有一个活动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();" ?

谢谢

android android-intent android-activity

6
推荐指数
2
解决办法
5682
查看次数

Android:java.lang.RuntimeException:在 android.app.ActivityThread.installProvider

我在实时街景上创建了一个应用程序,它在 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)

java android runtimeexception

6
推荐指数
1
解决办法
929
查看次数

Gradle无法启动Java

遵循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存在,具有所有用户的所有必需权限,并且可以手动执行而不会出现问题。

java gradle

5
推荐指数
0
解决办法
521
查看次数