小编BVt*_*Vtp的帖子

onRequestPermissionsResult被无限调用

我正在使用运行时权限请求,但是存在问题.似乎onRequestPermissionsResult无限调用回调方法.因此,当用户拒绝该请求时,该应用程序无响应.

每次用户点击"拒绝"时,权限对话框都会重新出现.只有点击"再也不要问",它才会再次出现.*按'允许'时效果很好 - 没有任何问题.

有没有办法取消一次后被调用的方法?

if (ActivityCompat.checkSelfPermission( this, Manifest.permission.ACCESS_FINE_LOCATION ) != PackageManager.PERMISSION_GRANTED )
{
    ActivityCompat.requestPermissions( this, new String[]{ Manifest.permission.ACCESS_FINE_LOCATION }, LOCATION_PERMISSION_CUSTOM_REQUEST_CODE );
}


@Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        switch( requestCode )
        {
            case LOCATION_PERMISSION_CUSTOM_REQUEST_CODE:   
                // If request is cancelled, the result arrays are empty.
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    // permission was granted
                    MyManager.connect();
                    return;
                } else {
                    // permission denied
                    return;
                }
            default:
                return;
        }
    }
Run Code Online (Sandbox Code Playgroud)

permissions android runtime

17
推荐指数
1
解决办法
3062
查看次数

在 Android 中使用 MVVM 架构在哪里存储/管理会话和全局/无状态数据?

两种情况:

1. Session data - For example the logged in User details, or some other session data.
2. Global/stateless data - A repository with retrofit client. 
Run Code Online (Sandbox Code Playgroud)

对于情况 1:最简单的方法是使用某种单例 "DataManager/LoginManger" ,但单例很糟糕(测试,随着时间的推移状态不可预测......)另一种方法是使用 Application 类,这也是坏的。

那么我们在哪里存储这些数据呢?

对于案例 2:一个简单的存储库,其中包含对 Retrofit 客户端或其他客户端的引用。
使用它作为单例更有意义,因为这个类是不可变的/无状态的。我们只想创建一次改造客户端。但是.. 测试?

3 . 另外,如果我们想获取 location 怎么办?我们可以在 ViewModel 中使用 LiveData 来负责。但是 ViewModel 的范围是某个视图/活动。所以这意味着如果我们更改视图(例如从抽屉中输入设置,而主页的视图模型正在获取位置),一旦检索到位置数据,我们将丢失位置数据,然后当用户返回主页时,我们不仅要向他们显示位置,还必须重新请求位置。

我还没有找到任何方式来处理所有这些情况。似乎没有明确的答案。

singleton android mvvm android-livedata

14
推荐指数
0
解决办法
509
查看次数

从底部滚动隐藏的视图/布局

这就是我想要实现的目标: 在此输入图像描述

我想使用AbsoluteLayout但不推荐使用它.所以我在上图中的蓝色视图下面创建了一个RelativeLayout,然后将所有内容放在ScrollView中,但隐藏的视图仍然在蓝色视图上,而不是在它下面.此外,屏幕滚动,但隐藏的部分只是剪切,而我看到我的应用程序的默认背景..

有任何想法吗?

编辑:我目前的尝试:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:fillViewport="true"
    android:layout_height="wrap_content">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:animateLayoutChanges="true"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop"
        android:src="@drawable/imageView" />

    <LinearLayout
        android:id="@+id/centerHolder"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:orientation="vertical" >

       .....
       .....
    </LinearLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="1000dp"
        android:layout_below="@id/main_holder"
        android:background="@color/black_color">

    </RelativeLayout>

</RelativeLayout>
</ScrollView>
Run Code Online (Sandbox Code Playgroud)

layout android scrollview

10
推荐指数
1
解决办法
3919
查看次数

latch(用于等待异步响应)冻结WebView(和UI)

我有一个应用程序,在整个布局上显示webview.有时我需要调用异步方法,异步操作由三方sdk完成,然后我等待一段时间直到我得到对指定监听器的响应.我用一个锁存器解决了它 - 一旦在监听器中收到响应,我就计算掉锁存器,然后启动方法可以继续这个响应.不幸的是,当我这样做时,WebView被卡住了.我想象原生UI会被卡住,但我没想到webview也会被冻结.怎么能克服?

为了更清楚,这是一个例子.我需要ajaxFunc等待MyAsyncListener获得某个响应,然后返回这个确切的响应.

JS注入webview的一部分:

var response = jsHandler.ajaxFunc(request.data);
Run Code Online (Sandbox Code Playgroud)

我有一个名为变量的全局变量response.

public class JavaScriptInterface
{
     @JavascriptInterface
     public String ajaxFunc(String data)
     {
         return MyUtils.handleData( data );
     }
}
Run Code Online (Sandbox Code Playgroud)

handleData方法:

 public String handleData( String data )
 {
     SomeClass.startAsyncRequest(); // starts the async request, response is to come at the listener's callbacks .

     latch = new CountDownLatch(1);
     try {
         latch.await(30, TimeUnit.SECONDS);
     }
     catch (InterruptedException e) {
         e.printStackTrace();
     }

     return response;
   }
Run Code Online (Sandbox Code Playgroud)

现在,一旦handleData函数调用一个异步执行某个函数的函数,异步函数就会在一些Listener中返回一些答案:

myAsyncListener = new MyAsyncListener() {
    @Override
        public …
Run Code Online (Sandbox Code Playgroud)

java user-interface multithreading android asynchronous

7
推荐指数
1
解决办法
510
查看次数

刷新数据显示在片段上

我在视图寻呼机上有两个片段.我曾经不得不将数据从片段B移动到A并刷新A上显示的数据,我用getItemPosition完成了它.出于某种原因,当我尝试重置所有数据时,相同的方法不起作用..

在我的适配器中我有:

public void refresh()
    {
        notifyDataSetChanged();
    }

    @Override
    public int getItemPosition( Object obj ) 
    {
        return POSITION_NONE; 
    }
Run Code Online (Sandbox Code Playgroud)

在我点击'重置'的片段中:

@Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        notTriedPasswordsList = PagerActivity.mainList;
.....
....
    resetButton.setOnClickListener( new View.OnClickListener() {
                    @Override
                    public void onClick( View v ) 
                    {
                        PagerActivity.resetPasswords();  
                        PagerActivity.viewPagerAdapter.refresh();
                    }});  
Run Code Online (Sandbox Code Playgroud)

托管两个片段的viewPager活动:

public static void resetPasswords()
    {
        mainList.addAll( 0, historyList );
        historyList.clear();
        PagerActivity.viewPagerAdapter.refresh();
    }
Run Code Online (Sandbox Code Playgroud)

显示通道的主要片段:

@Override
    public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState ) 
    {
        View view = inflater.inflate(R.layout.fragment_main, container, false);

..... …
Run Code Online (Sandbox Code Playgroud)

android refresh android-fragments

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

在android中使用Vector路径和XML绘制三角形

我已经找到了如何绘制三角形,但我现在需要旋转它,但我似乎无法做到。

我的目标是达到这个目标:

在此输入图像描述

到目前为止我已经找到了这段代码:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="40dp"
    android:height="40dp"
    android:viewportHeight="100"
    android:viewportWidth="100">
    <group android:name="triableGroup">
        <path
            android:name="triangle"
            android:fillColor="@color/some_color"
            android:pathData="m 50,0 l 50,50 -100,0 z" />
    </group>
</vector>
Run Code Online (Sandbox Code Playgroud)

但它看起来像这样:

在此输入图像描述

xml svg android vector drawable

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

迁移到Android Studio后在运行时崩溃(NoSuchMethodError)

我迁移到Android工作室,在我尝试运行应用程序之前,一切似乎都很好.它卡在Launcher活动中然后崩溃,打印:

E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.NoSuchMethodError: No direct method <init>(ILjava/lang/String;)V in class Lcom/google/android/gms/common/api/Status; or its super classes (declaration of 'com.google.android.gms.common.api.Status' appears in /data/data/com.MY PACKAGE/files/instant-run/dex/slice-google-play-........b-classes.dex)
at com.google.android.gms.measurement.zza.<init>(Unknown Source)
at com.google.android.gms.measurement.zza.zzaR(Unknown Source)
at com.google.android.gms.measurement.internal.zzn.zziJ(Unknown Source)
at com.google.android.gms.measurement.internal.zzz.zza(Unknown Source)
at com.google.android.gms.measurement.internal.zzw.<init>(Unknown Source)
at com.google.android.gms.measurement.internal.zzaa.zzDj(Unknown Source)
at com.google.android.gms.measurement.internal.zzw.zzaT(Unknown Source)
at com.google.android.gms.measurement.AppMeasurementContentProvider.onCreate(Unknown Source)
at android.content.ContentProvider.attachInfo(ContentProvider.java:1759)
at android.content.ContentProvider.attachInfo(ContentProvider.java:1728)
at android.app.ActivityThread.installProvider(ActivityThread.java:5534)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:5105)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5045)
at android.app.ActivityThread.access$1600(ActivityThread.java:150)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1459)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:168)
at android.app.ActivityThread.main(ActivityThread.java:5845)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687)
Run Code Online (Sandbox Code Playgroud)

crash android android-studio

5
推荐指数
2
解决办法
6298
查看次数

角点不适用于 Android 可绘制的环形

我正在尝试实现一个简单的圆形进度条。它工作正常,但我似乎无法使进度圆的角变圆。

我正在努力实现这样的目标:在此输入图像描述

我的代码:

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background">
        <shape
            android:thickness="3dp"
            android:shape="ring"
            android:type="sweep"
            android:useLevel="false">

            <solid android:color="@color/light_grey"/>
        </shape>
    </item>

    <item android:id="@android:id/progress">
        <rotate
            android:fromDegrees="270"
            android:toDegrees="270">

            <shape
                android:thickness="3dp"
                android:shape="ring"
                android:type="sweep"
                android:useLevel="true">

                <solid android:color="@color/green"/>
                <corners android:radius="8dp"/> // --> this has no effect whatsoever
            </shape>
        </rotate>
    </item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

xml android android-layout progress-bar android-drawable

5
推荐指数
1
解决办法
2597
查看次数

GCM/FCM 替代方案如何在内部工作以克服操作系统挑战

对于没有 Google Play 服务的设备,有几个选项可以接收推送通知。这些选项可以是中国的百度、Pushy、Facebook 自己的推送通知等。

但我不明白如何才能克服这两个主要问题:

  1. 由于我们无法在设备级别拥有某种“SDK”(例如 Google Play 服务),因此我们唯一的选择是将其集成到应用程序级别。这意味着,我们无法像 GCM 那样为所有应用程序建立一个与推送服务器相互连接的套接字连接。相反,我们需要有与安装的应用程序数量一样多的活动套接字连接。
  2. 即使我们密切关注问题 1,为了使该连接能够在打瞌睡和应用程序待机状态下生存,我们也必须在前台服务中处理它们,这是保证其运行的唯一方法,即使在杀死应用程序之后,或者当设备进入 Doze 状态。但为什么我们在中国手机的通知栏中看不到前台服务的通知,或者使用 Pushy 的应用程序?他们只是定期轮询推送服务器吗?与 AlarmManager (用 setAndAllowWhileIdle 标记)和 BroadcastReceiver ?这将过于耗费资源且效率低下。

android push-notification

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

git/BitBucket中没有主分支

我是git的新手.我正在使用bitbucket和sourcetree客户端.我已经从sourcetree中的bitbucket克隆了存储库,然后我想从Master创建一个Develop分支.问题是:没有任何主分支.我已经尝试提交一些文本文件,然后我能够创建那个Develop分支,但我仍然没有在BitBucket中看到master分支,所以我无法从Develop分支创建pull请求来掌握...

我做错了什么?谢谢

git bitbucket

4
推荐指数
1
解决办法
9240
查看次数

视图在View.VISIBLE之后忽略alpha值

我有一个按钮,alpha设置为0.5,其可见性在布局中消失了.

 <Button
     android:id="@+id/Button"
     android:layout_width="match_parent"
     android:layout_height="50dp"
     android:background="@color/black_color" 
     android:alpha="0.5"
     android:visibility="gone"/>
Run Code Online (Sandbox Code Playgroud)

在某些时候,我希望让它可见(Button.setVisibility(View.VISIBLE);),但是当我这样做时 - 它不是半透明的(0.5).看起来好像alpha设置为1.

android alpha view button

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

旧的 recyclerview 旋转后仍保留为背景

我正在使用带有 mmvm+livedata+数据绑定的 recyclerview。每次旋转后,我都可以看到旧的物品卡在后面作为背景。

我可以看到适配器具有正确数量的项目,并且实际上适配器仅显示和滚动最新数据。但在后台您可以看到旧列表。

代码非常标准和简单 - 带有数据绑定项的简单的 adatper/recyclervyew。

android android-recyclerview android-databinding

2
推荐指数
1
解决办法
259
查看次数