RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-243186

V.March's questions

Martin Hope
V.March
Asked: 2020-06-22 21:06:01 +0000 UTC

Facebook 登录在 Android 应用程序中停止工作。(这又是 Facebook SDK 中的错误吗?)

  • 2

无法通过按钮登录安卓应用facebook。

在模拟器上,登录没问题。点击按钮后,出现输入登录名和密码的表格,输入数据并点击“登录”。将打开第二个窗口,其中显示“您以前使用此帐户登录过,您想继续吗?” 我单击继续,然后我从服务器收到带有数据的响应。

在真实设备上,当您单击按钮时,会打开一个用于在 facebook 中输入登录名和密码的表单。

我输入我的用户名和密码,然后单击“登录”按钮。

脸书登录表格

但点击后,按钮闪烁,没有其他反应。反复点击是没有用的。窗户本身并没有冻结。单击后控制台中不会出现错误。

AndroidStudio 日志中的最后几行:

2020-06-22 13:03:48.252 1603-1603/com.example.buttonlogintest I/Timeline: Timeline: Activity_launch_request time:3019160 intent:Intent { cmp=com.example.buttonlogintest/com.facebook.CustomTabMainActivity (has extras) } 
2020-06-22 13:03:48.279 1603-1603/com.example.buttonlogintest I/Timeline: Timeline: Activity_launch_request time:3019187 intent:Intent { act=android.intent.action.VIEW dat=https://m.facebook.com/... flg=0x40000000 pkg=com.android.chrome (has extras) }

清单代码:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.buttonlogintest">

    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:screenOrientation="portrait"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        tools:replace="android:icon">

        <meta-data
            android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/facebook_app_id" />

        <activity
            android:name="com.facebook.FacebookActivity"
            android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
            android:label="@string/app_name" />

        <activity android:name=".MainActivityLoginFB">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

活动代码:

package com.example.buttonlogintest;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageButton;

import androidx.appcompat.app.AppCompatActivity;

import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.login.LoginBehavior;
import com.facebook.login.LoginManager;
import com.facebook.login.LoginResult;

import java.util.Arrays;


public class MainActivityLoginFB extends AppCompatActivity implements View.OnClickListener {

    CallbackManager callbackManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_fb_btn);

        ImageButton loginImgBtn = (ImageButton) findViewById(R.id.buttonLoginFB);
        loginImgBtn.setOnClickListener(this);

        initFacebookSdk();

    }

    public void initFacebookSdk() {
        Log.e("MYTAG", "InComeActivity. initFacebookSdk");
//        FacebookSdk.sdkInitialize(this);
        callbackManager = CallbackManager.Factory.create();

        LoginManager.getInstance().registerCallback(callbackManager,
                new FacebookCallback<LoginResult>() {
                    @Override
                    public void onSuccess(LoginResult loginResult) {
                        Log.d("MYTAG", "Login");
                        Log.d("MYTAG", "Facebook getUserId: " + loginResult.getAccessToken().getUserId());
                    }

                    @Override
                    public void onCancel() {
                        Log.e("MYTAG", "InComeActivity. initFacebookSdk: onCancel");
                    }

                    @Override
                    public void onError(FacebookException exception) {
                        Log.e("MYTAG", "InComeActivity. initFacebookSdk: onError");
                    }
                });

    }

    @Override
    public void onClick(View view) {
        LoginManager loginManager = LoginManager.getInstance();
        loginManager.setLoginBehavior(LoginBehavior.NATIVE_WITH_FALLBACK);
        loginManager.logInWithReadPermissions(this, Arrays.asList("email"));
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        callbackManager.onActivityResult(requestCode, resultCode, data);
        super.onActivityResult(requestCode, resultCode, data);
    }
}

标记代码:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.buttonlogintest.MainActivity">

    <ImageButton
        android:id="@+id/buttonLoginFB"
        android:layout_width="48dp"
        android:layout_height="48dp"
        android:layout_marginTop="32dp"
        android:elevation="4dp"
        android:padding="4dp"
        android:scaleType="fitXY"
        android:src="@drawable/ic_fb_logo"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

在生产应用程序上的行为相同。发布版本的开发版本 - 不适用于真实设备,但在模拟器上 - 它们可以工作。

如何解决这个问题呢?

android
  • 1 个回答
  • 10 Views
Martin Hope
V.March
Asked: 2020-07-17 04:37:34 +0000 UTC

如何在 SQL 查询中使用条件语句更新多个表字段

  • 1

我更新了在 Room 中创建的表中的数据。更新时,我传递了 2 个值。我唯一地更新第一个值,只有当表中的当前值大于新值时才需要更新第二个值。

比如这样一个查询,如果两个值都无条件更新:

@Query("UPDATE orders SET order_amount = :amount, order_price = :price WHERE order_id =:id")
void update(Float amount, Float price, int id);

我试图SET在设计后插入CASE WHEN order_price > :price THEN order_price = :price。但它CASE强调了一个错误:

<column name> expected, got 'CASE'

如何提出这样的要求?

android
  • 1 个回答
  • 10 Views
Martin Hope
V.March
Asked: 2020-07-08 03:00:36 +0000 UTC

如何使用 ViewModel 的 LiveData 订阅从同一个 Room 数据库表中获取不同的列表?

  • 1

有一个基地Room。LiveData我通过and得到了整个列表ViewModel。

道:

@Query("SELECT * FROM tasks")
fun getAllTask(): LiveData<List<Tasks>>

存储库:

fun getAllTasks(tasksDao: TasksDao): LiveData<List<Tasks>> {
    this.tasksDao = tasksDao
    return tasksDao.getAllTask()
}

视图模型:

class OwnViewModel(application: Application) : AndroidViewModel(application) {

    private val repository: OwnRepository

    val allTasks:LiveData<List<Tasks>>


    init {

            val tasksDao = AppDatabase.getDatabase(application, viewModelScope).tasksDao()

            repository = OwnRepository()

            allTasks = repository.getAllTasks(tasksDao)

        }
}

分段:

class TasksFragment : Fragment() {

private lateinit var ownViewModel: OwnViewModel

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    ownViewModel = ViewModelProviders.of(this).get(OwnViewModel::class.java)
}


    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
    ): View? {

        val view = inflater.inflate(R.layout.fragment_tasks_list, container, false)
        val recyclerView = view.findViewById<RecyclerView>(R.id.listTasks)

        // Set the adapter
        val adapter = MyTasksRecyclerViewAdapter(listener, context!!)

        recyclerView.adapter = adapter
        recyclerView.layoutManager = LinearLayoutManager(context)


        ownViewModel.allTasks.observe(viewLifecycleOwner, Observer { tasksList ->
            tasksList?.let {

                adapter.setTaskList(it)
            }
        })

        return view
    }
}

我将结果列表传递给适配器并填写RecyclerView

需要从同一个表中获取一个不完整的列表,但通过某些参数过滤。

事实上,现在随着数据库的变化,适配器将收到一个带有变化的新列表。但是获取过滤列表的正确方法是什么?

我想出了几个选择。

第一个选项- 逻辑上应该这样做 - 是从基础获取与参数对应的新元素列表,someId例如,通过这样的请求:

@Query("SELECT * FROM tasks WHERE some_id = :someId")
fun getTaskBySomeId(someId: Long): LiveData<List<Tasks>>

然后传递给Repository,然后传递给 ,然后传递ViewModel给adapter。但是当您尝试进行此传输并替换适配器中的列表时,会出现很多不一致的情况。例如,我正在尝试分支。如果filterIsTrue == true那时我请求截断列表:

重新设计的 ViewModel:

class OwnViewModel(application: Application) : AndroidViewModel(application) {

    private val repository: OwnRepository

    val allTasks: LiveData<List<Tasks>>


    init {

        val tasksDao = AppDatabase.getDatabase(application, viewModelScope).tasksDao()

        repository = OwnRepository()

        allTasks = getTasksList(tasksDao)

    }

    private fun getTasksList(tasksDao: TasksDao): LiveData<List<Tasks>> {

        if (filterIsTrue) {

            return repository.getFilteredTasks(tasksDao, someId)
        } else {
            return repository.getAllTasks(tasksDao)
        }

    }
}

LiveData但显然没有订阅新的,所以列表没有更新。有一个想法是杀死旧的并获得一个新的LiveData并进行另一个订阅。我不确定这是否可行,这是一个非常令人困惑的代码。

第二种选择是制作两个LiveData,然后在适当的时候切换。但是后来我将有 2 个订阅,每次我都会收到 2 个列表ViewModel:完整和部分 - 不合理,但更容易。您可以取消不必要的订阅并订阅新的订阅LiveData,但这更加困难并且仍然ViewModel会收到 2 个列表。

第三个选项是通过适配器中已有的参数或在将其传递给适配器之前从完整列表中进行选择。不难,但是使用数据库的本质就丢失了。事实证明,我每次都会收到一个完整的列表,然后对其进行迭代,而不是从数据库中获取一个小列表并使用它。

最好的组织方式是什么?

android
  • 1 个回答
  • 10 Views
Martin Hope
V.March
Asked: 2020-06-28 22:41:41 +0000 UTC

通过 ViewModel 更新 Room 基础中的项目时,适配器中的更新列表未触发

  • 2

RecyclerView片段中有一个列表。充满Room通过ViewModel。

如果我在数据库中添加一个条目:

@Insert
fun insert(item: Item);

然后代码片段接收更改并更新适配器:

myViewModel.allItems.observe(viewLifecycleOwner, Observer { myItemList ->
    myItemList?.let {

        Log.d("TAG", "DF myItemList.size = " + myItemList.size)
        adapter.setItemList(it)
    }
})

但是如果我尝试更新一些记录,我不会得到任何更新。

@Update(onConflict = OnConflictStrategy.REPLACE) 
fun update(item: Item)

仅当我将新元素插入基础时,片段中的日志才有效。

我无法理解我没有连接什么。

fun update()显然和的实现存在差异fun insert。但是我还没有找到关于这个问题的任何信息。

android
  • 1 个回答
  • 10 Views
Martin Hope
V.March
Asked: 2020-06-15 22:08:26 +0000 UTC

IntellijIDEA 没有版本控制部分。怎么修?

  • 2

安装在вин-10 IntellijIDEA Community 2019.1.3.
我把工作室放在 D 盘上。以前,D 盘上有вин-8一个工作室——我没有发现任何问题。
已下载并安装Git,也在 D 盘上。已
注册PATH。

但是我无法连接Git,因为idea设置中根本没有部分Version Control。

在此处输入图像描述

开始一个想法时,我不能选择导入。

在此处输入图像描述

我试图重新安装这个想法 - 它没有帮助。

会是什么呢?也许我错过了一些东西,因为这个想法已经很久没有定下来了。也许是这个想法本身的错误?


补充:菜单中没有类型项File -> New :import project from version control。

并且在VLS很少的点上。你可以在 printsky 上看到:

在此处输入图像描述

git
  • 2 个回答
  • 10 Views
Martin Hope
V.March
Asked: 2020-03-29 18:07:25 +0000 UTC

WebView中加载和绘制数据结束的监听器

  • 1

在Android我用来显示来自服务器的文章的应用程序Activity中WebView。

例如,我想在屏幕上完全绘制数据(文本和图像)后显示一条消息。

这是它的样子WebView:

 WebSettings settings = webView.getSettings();

    settings.setJavaScriptEnabled(true);
    settings.setUseWideViewPort(true);
    settings.setLoadWithOverviewMode(true);

    // Пробовал этот метод:
    webView.setWebChromeClient(new WebChromeClient() {
        public void onProgressChanged(WebView view, int progress) {
            System.out.println("Progress = "+ progress);
        }
    });

    webView.addJavascriptInterface(this, "android");

    webView.loadDataWithBaseURL(
            "",
            asHtmlPage(intent.getStringExtra("content")),
            "text/html",
            "utf-8",
            null
    );

我只从服务器获取没有脚本的文章,body并将它们调整为我需要的格式,如下所示:

private String asHtmlPage(String body) {

    String textUpd = body.replaceAll("<img ", "<img onclick=\"myFunctionGet(this.src)\" ");

    String style = "<style>" +
            " body { margin: 0; padding: 16; font-family: sans-serif-light, sans-serif; word-wrap: break-word;}" +
            " P:first-letter {  margin-left: 20px;  } " +
            " img { margin-left: -16; margin-right: -16; display: inline; height: auto !important; max-width: 100vw; } " +
            "</style>";
    String meta = "<meta name='viewport' content='width=device-width, initial-scale=1'>";

    String myScript = "<script> function myFunctionGet(s) { android.getUri(s); } </script>";
    return "<html><head>" + style + meta + myScript + "</head><body>" + textUpd + "</body></html>";
}

尝试使用:

webView.setWebChromeClient(new WebChromeClient() {
    public void onProgressChanged(WebView view, int progress) {
       System.out.println("Progress = "+ progress); // от 0 до 100
    }
});

但是在我得到 100% 的那一刻 - 图片还没有完全绘制在屏幕上。

您如何跟踪文章已完全加载并且所有元素已完全显示在屏幕上?

android
  • 1 个回答
  • 10 Views
Martin Hope
V.March
Asked: 2020-02-06 22:50:42 +0000 UTC

最好的方法是什么,以便在 WebView 中,当您单击图像时,它会在 WebView 顶部打开到屏幕的整个宽度

  • 1

Has WebView,它显示来自站点的内容。

我正在努力做到这一点,以便当您单击图像时,WebView它会在前景中打开到屏幕的整个宽度。

然后可以通过用手指展开或双击来放大这张图片(为此我使用自定义的ImageView)。

WebView应该在背景中可见,有阴影且不活动。

当您点击图片后面的字段时,图片会消失并WebView返回到前景。

当我点击一张图片时,我会得到它的地址并Picasso在ImageView.

我尝试通过单击图片打开一个新的Activity并设置对话的样式。但是,有圆角。如果图片高度较小,则图片上方和下方的灰色区域。此外,在展开图像时,对话框不会动态展开。

我也试过用ConstraintLayout它 在同一个ImageView上面打开。但是,我不能把它放在上面,让它是静态的和阴影的。 WebViewActivityImageViewWebviewWebview

请提示,如何更好地实施它而不用拐杖云。

android
  • 1 个回答
  • 10 Views
Martin Hope
V.March
Asked: 2020-02-01 23:26:33 +0000 UTC

如何删除 Android WebView 内内容两侧的填充?

  • 0

我输入WebView 数据,期望图片和文字一样占据整个屏幕宽度。但在侧面,文字和图片都有大约8dp.

在活动课上:

// Set content
String content = bodyContent; //сюда передаю тело документа с разметкой.

Display display = getWindowManager().getDefaultDisplay();
int displayWidth = display.getWidth();

View webLayout = getLayoutInflater().inflate(R.layout.partial_article_web, null);
web = webLayout.findViewById(R.id.content);

WebSettings settings = web.getSettings();
settings.setTextZoom(storage.getTextZoom());
settings.setSupportZoom(false);
settings.setJavaScriptEnabled(true);
settings.setUseWideViewPort(true);
settings.setLoadWithOverviewMode(true);

web.addJavascriptInterface(this, "android");

web.loadDataWithBaseURL("", asHtmlPage(content, "text/html", "utf-8", null);

这就是我形成加载数据的方式WebView:

private String asHtmlPage(String body) {

    String style = "<style>" +
            "body { font-family: 'sans-serif-light', sans-serif; }" +
            "img { display: inline; height: auto; max-width: 100%; } " +
            "</style>";
    String meta = "<meta name='viewport' content='width=device-width, initial-scale=1'>";

    return "<html><head>" + style + meta + "</head><body>" + body + "</body></html>";
}

标记WebView:

<WebView
    android:id="@+id/content"
    style="?android:textAppearanceMedium"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingTop="16dp"
    android:paddingBottom="16dp"
    android:scrollbars="none" />

试过:

  1. 评论

    settings.setUseWideViewPort(true);
    settings.setLoadWithOverviewMode(true); 
    
  2. 将块 meta从移动<head> 到<body>
  3. 改变:<meta name='viewport' content='width=" + displayWidth + " , initial-scale=1'>";

  4. 风格max-width: 100%;改为max-width: " + displayWidth + ";

我上传的内容本身没有任何缩进和边框。

帮我弄清楚这个意想不到的 Padding 是从哪里来的。

UPD:根据@Timur Mukhortov 的说法,我@dimen/activity_horizontal_margin在.xmlWebView16dp

android
  • 1 个回答
  • 10 Views
Martin Hope
V.March
Asked: 2020-01-15 15:28:11 +0000 UTC

消息:API 'variant.getExternalNativeBuildTasks()' 已过时,已替换为 'variant.getExternalNativeBuildProviders()'

  • 1

当我尝试构建项目时收到一条消息。

更新Gradle到版本后出现gradle:3.3.0:

警告:API 'variant.getExternalNativeBuildTasks()' 已过时,已替换为 'variant.getExternalNativeBuildProviders()'。它将在 2019 年底被删除。有关更多信息,请参阅 https://d.android.com/r/tools/task-configuration-avoidance。要确定调用 variant.getExternalNativeBuildTasks() 的内容,请在命令行上使用 -Pandroid.debug.obsoleteApi=true 以显示堆栈跟踪。受影响的模块:app

除了评论apply plugin: 'io.fabric'和忘记之外,我没有找到 EN.SO 的任何答案。
评论不是一个选项,因为我使用这个工厂。

我试图通过阅读谷歌通过参考提供的信息来理解它的含义,但徒劳无功。(有趣的是,只有我觉得他们为他们的开发人员编写了这些信息。谁已经这样做了 100 次?!)。

variant.getExternalNativeBuildTasks()我找不到 要更改的方法在哪里。


UPD:
在同一组中,又出现了 6 个警告。但由于这都是由于更新Gradle,我决定在这里也添加它们。正如他们所说的“7个麻烦 - 一个答案”:

API 'variant.getAssemble()' 已过时,并已替换为 'variant.getAssembleProvider()'。
API 'variantOutput.getProcessResources()' 已过时,已替换为 'variantOutput.getProcessResourcesProvider()'。
API 'variantOutput.getProcessManifest()' 已过时,已替换为 'variantOutput.getProcessManifestProvider()'。
API 'variant.getMergeResources()' 已过时,已替换为 'variant.getMergeResourcesProvider()'。
API 'variant.getMergeAssets()' 已过时,并已替换为 'variant.getMergeAssetsProvider()'。
API 'variant.getPackageApplication()' 已过时并已替换为 'variant.


告诉我如何进行 Google 推荐的更改而不丢失您需要的代码?

android
  • 1 个回答
  • 10 Views
Martin Hope
V.March
Asked: 2020-11-26 15:42:59 +0000 UTC

如何撤消对本地 Git 分支的删除

  • 3

我用bitbucket. 我写在AndroidStudio.

我决定减少不相关分支的数量。通常,我会同时删除本地和远程分支(这样 bitbucket 上就没有尾巴了)。

结果,在一般的鱼鹰中,他肆无忌惮地删除了一个必要的分支。

在互联网上,我只找到如何撤消最后一次提交或合并。但不删除分支。

问题如何撤消删除过去本地提交之一中的文件之一描述了在现有分支上恢复到原始提交的选项。我的线程已经死了。

如何复活枯死的树枝?

android
  • 1 个回答
  • 10 Views
Martin Hope
V.March
Asked: 2020-11-09 01:28:08 +0000 UTC

在 Android 7.0 上启动 VK 授权活动时出现问题

  • 8

大约一年前,我制作了一个安卓应用程序。该应用程序应用于从您的 VK 墙上查看视频。

这个想法是这样的:如果用户被授权,开始屏幕会立即充满他的视频列表。如果未授权,则应出现授权窗口。

现在我回到应用程序,看到了一张奇怪的图片。 用户授权窗口显示不正确。

授权窗口activity没有后台填写。通过它你可以看到背景主屏幕。小部件的样式也看起来不正确。
但是输入登录名和密码的所有必要字段都有效。
确认权限和退出的窗口是同一种窗口。但该功能有效。

这是开始的activity(还没有列表)。

在此处输入图像描述

这是登录窗口的样子:
在此处输入图像描述

我没有更改旧代码中的任何内容。刚刚升级了版本gradle (с 4.1 до 4.6)和SdkVersion (с 25 до 28).

build.gradle实施_'com.vk:androidsdk:1.6.9'

在清单中,根据说明,我指出:

<activity
            android:name="com.vk.sdk.VKServiceActivity"
            android:label="ServiceActivity"
            android:theme="@style/VK.Transparent" />

初始化也是按照说明进行的:

public class Aplication extends android.app.Application {

    Context context;

    VKAccessTokenTracker vkAccessTokenTracker = new VKAccessTokenTracker() {
        @Override
        public void onVKAccessTokenChanged(VKAccessToken oldToken, VKAccessToken newToken) {
            if (newToken == null) {
                Toast.makeText(context, "AccessToken invalidated", Toast.LENGTH_LONG).show();
                Intent intent = new Intent(context, MainActivity.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);
            }
        }
    };

    @Override
    public void onCreate() {
        super.onCreate();
        vkAccessTokenTracker.startTracking();
        VKSdk.initialize(this);
    }
}

我没有使用自定义样式。

在 AndroidStudio 中:
targetSdkVersion 28
gradle-4.6

我启动的设备:

小米红米 Note 4X
安卓:7.0*

应用程序“VKontakte” - 未安装。

对于访问,和以前一样,使用 VPN。

已经为开发人员挖了手册VK。在这个论坛上没有看到任何VK关于这个问题的信息。
自定义登录屏幕将不起作用,因为它VK不允许普通人这样做。

除了神秘的短语外,我Andriod SDK在文档中没有找到任何内容:

...<application>添加

<activity android:name="com.vk.sdk.VKServiceActivity" 
android:label="ServiceActivity" 
android:theme="@style/VK.Transparent" />

否则,启动授权活动可能会出现问题。

但是我已经添加了所有内容!


关于检查其他设备。

在真实设备上正确显示:
1)Samsung Galaxi Win Android 4.1。屏幕 = 480x800
2) Xiaomi Redmi Note Pro 3 16GB Android 6.0。与屏幕 = 1920x1080。

也就是说,1920x1080 屏幕的具有权限的选项和布局错误选项消失了。由于我的Xiaomi Redmi Note 4X屏幕太1920x1080。


在 Logcat 中,当我在 Android 7.0 上启动我的应用程序时,我发现了以下几行:

E/RecyclerView: No adapter attached; skipping layout
D/EgretLoader: EgretLoader(Context context)
D/EgretLoader: The context is not activity
W/ContentCatcher: Failed to notify a WebView
I/chromium: [INFO:CONSOLE(143)] "Uncaught ReferenceError: vkNow is not defined", source: https://oauth.vk.com/authorize?client_id=6271282&scope=video,wall,friends,offline&redirect_uri=https://oauth.vk.com/blank.html&display=mobile&v=5.21&response_type=token&revoke=1 (143)
I/chromium: [INFO:CONSOLE(155)] "Uncaught TypeError: Cannot set property 'stickers' of undefined", source: https://oauth.vk.com/authorize?client_id=6271282&scope=video,wall,friends,offline&redirect_uri=https://oauth.vk.com/blank.html&display=mobile&v=5.21&response_type=token&revoke=1 (155)

我以为我做错了什么或忘记了什么。
我决定从 VK 运行官方示例。
结果 - Android 7.0 上的登录激活看起来也有问题。
并且在 VK 应用程序的 logcat 中,这些行与我的类似:

I/Timeline: Timeline: Activity_launch_request time:100319497 intent:Intent { cmp=com.vk.vktestapp/com.vk.sdk.VKServiceActivity (has extras) }
D/EgretLoader: EgretLoader(Context context)
    The context is not activity
W/ContentCatcher: Failed to notify a WebView
I/chromium: [INFO:CONSOLE(143)] "Uncaught ReferenceError: vkNow is not defined", source: https://oauth.vk.com/authorize?client_id=3974615&scope=friends,wall,photos,nohttps,messages,docs,offline&redirect_uri=https://oauth.vk.com/blank.html&display=mobile&v=5.21&response_type=token&revoke=1 (143)
I/chromium: [INFO:CONSOLE(155)] "Uncaught TypeError: Cannot set property 'stickers' of undefined", source: https://oauth.vk.com/authorize?client_id=3974615&scope=friends,wall,photos,nohttps,messages,docs,offline&redirect_uri=https://oauth.vk.com/blank.html&display=mobile&v=5.21&response_type=token&revoke=1 (155)

2018 年 11 月 12 日更新:

为方便起见,我决定不修改我的应用程序,而是继续搜索更接近原始代码的位置。为了熟悉这个问题,我从 VK 制作了官方应用程序的 Fork。在 gredle 中进行了更新。

此外,我立即组装了 APK 并将其上传到 Google 驱动器,这样我就可以运行提供 VK 的测试样本,而无需 android studio 的麻烦。而且,可以这么说,用自己的眼睛看问题。

android
  • 1 个回答
  • 10 Views
Martin Hope
V.March
Asked: 2020-10-09 21:01:53 +0000 UTC

Android 应用程序中的 Roboto-Medium 风格的类似物是什么?

  • 1

在 android 应用程序中需要将Roboto-Medium字体放在 button 上。

但我发现AndroidStudio开箱即用的字体只有这样一组:

在此处输入图像描述

虽然,作为谷歌搜索的结果,我发现 Google 中使用了Roboto系列字体。我知道它们主要是为 Android 设计的。但是,奇怪的是,他们不在工作室的选择列表中!

到目前为止,尝试用谷歌搜索该工作室提出的哪种字体将是Roboto-Medium的类似物,但不知何故没有成功。

我真的不想坐下来研究关于排版和字体发展历史的文献,不知怎的,前景一点也不光明。

告诉我,也许他们需要手动上传到工作室或某种库?或者一些手册的链接,请。


升级版:

我试着把 android:textStyle="bold"- 与谷歌样本相比,它比相同的字体更厚。我尝试了工作室提供的其他字体——它们不适合。最接近Roboto-Medium的是sans-serif,但它仍然更薄。

android
  • 2 个回答
  • 10 Views
Martin Hope
V.March
Asked: 2020-08-13 21:39:54 +0000 UTC

应用 Drawable 无法正常工作

  • 2

Drawable显示应用于按钮时遇到错误。
有 2linearLayout乘 2 Button。
每组只能选择一个按钮。在我应用的选定按钮上Drawable btnBackgroundOn。对未选中的——适当地应用Drawable btnBackgroundOff。

问题:如果它Activity失去焦点,然后恢复它,那么按钮的填充就变成了部分的。

在寻找原因时,我注意到以下几点:
1)按钮上填充空间的宽度变得等于所选按钮之一的宽度。
2)同组的按钮似乎不影响彼此的填充。
3)恢复后,如果第二组的按钮没有被触摸,我没有发现任何问题。

失去焦点之前:
在此处输入图像描述

焦点恢复后:
在此处输入图像描述

存储错误的最小代码:

主要活动:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    Button btn1a, btn1b, btn2a, btn2b;

    @BindViews({R.id.btn_1_a, R.id.btn_1_b})
    List<Button> listFirst;
    @BindViews({R.id.btn_2_a, R.id.btn_2_b})
    List<Button> listSecond;

    @BindDrawable(R.drawable.draw_color_on)
    Drawable btnBackgroundOn;
    @BindDrawable(R.drawable.draw_color_off)
    Drawable btnBackgroundOff;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ButterKnife.bind(this);

        btn1a = (Button) findViewById(R.id.btn_1_a);
        btn1b = (Button) findViewById(R.id.btn_1_b);
        btn2a = (Button) findViewById(R.id.btn_2_a);
        btn2b = (Button) findViewById(R.id.btn_2_b);

        btn1a.setOnClickListener(this);
        btn1b.setOnClickListener(this);
        btn2a.setOnClickListener(this);
        btn2b.setOnClickListener(this);
    }

    private void changeColorButton(List listBtn, Button curBtn) {

        for (int i = 0; i < listBtn.size(); i++) {

            if (listBtn.get(i) != curBtn) {
                ((Button) listBtn.get(i)).setBackground(btnBackgroundOff);

            } else {
                curBtn.setBackground(btnBackgroundOn);
            }
        }
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {

            //Block 1
            case R.id.btn_1_a:
                changeColorButton(listFirst, btn1a);
                break;
            case R.id.btn_1_b:
                changeColorButton(listFirst, btn1b);
                break;

            //Block 2
            case R.id.btn_2_a:
                changeColorButton(listSecond, btn2a);
                break;
            case R.id.btn_2_b:
                changeColorButton(listSecond, btn2b);
                break;
        }
    }
}

布局主:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/layout_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#fff5cb"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <LinearLayout
        android:id="@+id/layout_1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btn_1_a"
            android:layout_width="wrap_content"
            android:layout_height="32dp"
            android:layout_marginBottom="8dp"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="8dp"
            android:layout_marginTop="8dp"
            android:background="@drawable/draw_color_off"
            android:paddingLeft="16dp"
            android:paddingRight="16dp"
            android:text="First button text" />

        <Button
            android:id="@+id/btn_1_b"
            android:layout_width="wrap_content"
            android:layout_height="32dp"
            android:layout_marginBottom="8dp"
            android:layout_marginLeft="8dp"
            android:layout_marginRight="16dp"
            android:layout_marginTop="8dp"
            android:background="@drawable/draw_color_off"
            android:paddingLeft="16dp"
            android:paddingRight="16dp"
            android:text="2-nd txt" />

    </LinearLayout>


    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:layout_marginTop="16dp"
        android:background="#E0E0E0" />

    <LinearLayout
        android:id="@+id/layout_2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btn_2_a"
            android:layout_width="wrap_content"
            android:layout_height="32dp"
            android:layout_marginBottom="8dp"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="8dp"
            android:layout_marginTop="8dp"
            android:background="@drawable/draw_color_off"
            android:paddingLeft="16dp"
            android:paddingRight="16dp"
            android:text="small" />

        <Button
            android:id="@+id/btn_2_b"
            android:layout_width="wrap_content"
            android:layout_height="32dp"
            android:layout_marginBottom="8dp"
            android:layout_marginLeft="8dp"
            android:layout_marginRight="16dp"
            android:layout_marginTop="8dp"
            android:background="@drawable/draw_color_off"
            android:paddingLeft="16dp"
            android:paddingRight="16dp"
            android:text="Some text" />


    </LinearLayout>

</LinearLayout>

draw_color_on.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/colorPrimaryDark" />
    <corners android:radius="2dp" />
</shape>

draw_color_off.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#FFFFFF" />
    <corners android:radius="2dp" />
</shape>

检查是否影响库ButterKnife- 不影响。
风格和表现没有特征。

我想如果我们为每个组制作自己的包,问题就可以解决Drawable。

我不能没有Drawable,因为我正在制作的应用程序有很多组按钮,但Drawable有几个错综复杂的层shape。

帮助我了解我在使用 `Drawable.

android
  • 2 个回答
  • 10 Views
Martin Hope
V.March
Asked: 2020-07-26 19:25:14 +0000 UTC

android应用程序的初始安装或更新,如何以编程方式查找?

  • 4

在一个 android 应用程序中,我想实现一个弹出窗口的外观,其中包含有关新版本应用程序更改的信息。

如果用户更新应用程序,那么我想显示一个弹出窗口。

在从 GooglePlay 进行初始安装期间,不应出现此窗口。

如何以编程方式区分应用程序的初始安装和更新?

android
  • 3 个回答
  • 10 Views
Martin Hope
V.March
Asked: 2020-07-16 19:37:12 +0000 UTC

如何跟踪 FileOutputStream 何时关闭

  • 0

我正在从服务器加载几个图像并写入应用程序的内存。

我是这样的:

在一个循环中,我运行一个获取图像并将其写入文件的方法。

将第一个文件写入内存后,下一个文件应该开始加载。所以我们循环到列表的末尾。

循环结束后,我启动了一个已经在手机上处理文件的方法。

但是,出现了一个问题——即使在循环结束时,流仍然是开放的FileOutputStream。并且在启动第二种方法的时候,并不是所有的流都被关闭了,也就是说,并不是所有的图片都被记录在了手机上。结果,第二种方法无法使用所有图片。

我做了第一种方法synchronized——我只实现了加载顺序,但这并不影响流。

问题是如何跟踪所有文件下载和记录的时刻。

因为我这样写文件:

FileOutputStream ostream = new FileOutputStream(targetImgFile);

首先想到的是跟踪方法的运行ostream.close()。我知道在它运行之后 - 所有文件都被记录下来。但我找不到信息如何跟踪它是否有效?或者任何人都可以提出任何替代方案?

====
UPD: 这是用于从服务器加载图像的类:

public class LoaderQR {
    private Context mContext;
    private String sourceImgPath; //address image on server
    private File targetImgFile; //

    public LoaderQR(Context context, String pathImg, File imgFile) {
        mContext = context;
        sourceImgPath = pathImg;
        targetImgFile = imgFile;
    }

    synchronized public void downloadImg() {

        Target target = new Target() {

            @Override
           public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom from) {

                try {
                    FileOutputStream ostream = new FileOutputStream(targetImgFile);

                    if (bitmap.compress(Bitmap.CompressFormat.JPEG, 100, ostream)) {
                        ostream.close();

                    }

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onBitmapFailed(Drawable errorDrawable) {
            }

            @Override
            public void onPrepareLoad(Drawable placeHolderDrawable) {
            }
        };

        Picasso.with(mContext).load(sourceImgPath).into(target);
    }
}

=====
UPD-2:
相同的代码,但在“老派”版本中:

public class LoaderQR {
    private static final String TAG = "Download Task";
    private Context mContext;
    private String sourceImgPath; //address image on server
    private File targetImgFile; //

    public LoaderQR(Context context, String pathImg, File imgFile) {
        mContext = context;
        sourceImgPath = pathImg;
        targetImgFile = imgFile;
    }

    synchronized public void downloadImgOld() {
        try {
            URL url = new URL(sourceImgPath);//Create Download URl
            HttpURLConnection c = (HttpURLConnection) url.openConnection();//Open Url Connection
            c.setRequestMethod("GET");//Set Request Method to "GET" since we are grtting data
            c.connect();//connect the URL Connection

            //If Connection response is not OK then show Logs
            if (c.getResponseCode() != HttpURLConnection.HTTP_OK) {
                Log.e(TAG, "Server returned HTTP " + c.getResponseCode()
                    + " " + c.getResponseMessage());

            }

            FileOutputStream fos = new FileOutputStream(targetImgFile);//Get OutputStream for NewFile Location

            InputStream is = c.getInputStream();//Get InputStream for connection

            byte[] buffer = new byte[1024];//Set buffer type
            int len1 = 0;//init length
            while ((len1 = is.read(buffer)) != -1) {
                fos.write(buffer, 0, len1);//Write new file
            }

            //Close all connection after doing task
            fos.close();
            is.close();

        } catch (Exception e) {

            e.printStackTrace();
            targetImgFile = null;

        }
    }
}  

问题是一样的 - 并非所有文件都有时间添加。
告诉我如何更好地检查所有文件是否已添加到手机内存中并且可以进一步使用它们?

android
  • 2 个回答
  • 10 Views
Martin Hope
V.March
Asked: 2020-06-10 21:53:47 +0000 UTC

图像不会通过 Intent 传输到另一个 Android 应用程序

  • 2

我正在尝试从 Internet 获取图片,将其保存到我的手机中,然后通过任何信使或邮件程序立即发送,而无需打开图库来选择图片。

活动:

public class MainActivity extends AppCompatActivity {

    private String remoteUrlString = "https://upload.wikimedia.org/wikipedia/commons/b/b5/Extreme_QR_code_to_Wikipedia_mobile_page.png";
    private Button btnStart;
    private Context context;

    private static final int PERMISSIONS_REQUEST_SENDER = 14222;

    private File file = null;
    public File getFile() {
        return file;
    }
    public void setFile(File file) {
        this.file = file;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnStart = findViewById(R.id.button);
        btnStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                resendImage();
            }
        });
    }

    private void resendImage() {

        if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {

            System.out.println("PERMISSION_GRANTED == WRITE_EXTERNAL_STORAGE: true");
            Picasso.with(this)
                    .load(remoteUrlString)
                    .into(target);
            sendImg();
        } else {

            System.out.println("PERMISSION_GRANTED == WRITE_EXTERNAL_STORAGE: false");
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                        PERMISSIONS_REQUEST_SENDER);
            }
        }
    }

    private Target target = new Target() {

        @Override
        public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom from) {

            new Thread(new Runnable() {
                @Override
                public void run() {

                    try {
                        file = new File(Environment.getExternalStorageDirectory().getPath() + "/Extreme_QR_code_to_Wikipedia_mobile_page.jpg");

                        FileOutputStream ostream = null;
                        ostream = new FileOutputStream(file);
                        bitmap.compress(Bitmap.CompressFormat.JPEG, 75, ostream);
                        ostream.close();
                        galleryAddPic(file);
                        setFile(file);

                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        }

        @Override
        public void onBitmapFailed(Drawable errorDrawable) {

        }

        @Override
        public void onPrepareLoad(Drawable placeHolderDrawable) {
            if (placeHolderDrawable != null) {
            }
        }
    };

    private void galleryAddPic(File file) {
        Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);

        Uri contentUri = Uri.fromFile(file);
        mediaScanIntent.setData(contentUri);
        this.sendBroadcast(mediaScanIntent);
    }

    private void sendImg() {

        Intent sendIntent = new Intent();
        sendIntent.setAction(Intent.ACTION_SEND);
        sendIntent.putExtra(Intent.EXTRA_STREAM, getFile());
        sendIntent.setType("image/jpg");
        startActivity(sendIntent);
    }


    @RequiresApi(api = Build.VERSION_CODES.M)
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

        if (requestCode == PERMISSIONS_REQUEST_SENDER && grantResults.length == 1) {

            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                resendImage();

            } else {
                requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                        PERMISSIONS_REQUEST_SENDER);
            }
        }
    }
}

显现:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.devtolife.myapp">
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.READ_PROFILE" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="START" />

</android.support.constraint.ConstraintLayout>

When the choice of applications to send opens, the picture is not in the attachment: 在此处输入图像描述

我检查了图库 - 图片已加载并正常打开。可能是什么?

android
  • 2 个回答
  • 10 Views
Martin Hope
V.March
Asked: 2020-06-03 00:34:47 +0000 UTC

未能安装以下 Android SDK 软件包,因为某些许可证尚未被接受。构建工具;27.0.3 Android SDK 构建工具 27.0.3

  • 4

在构建项目时,它给出了一个错误:

无法加载文件 /home/ubuntu/.android/repositories.cfg。在 /usr/local/android-sdk-linux/licenses 检查包 Android SDK Build-Tools 27.0.3 的许可证 警告:不接受包 Android SDK Build-Tools 27.0.3 的许可证。

FAILURE:构建失败并出现异常。

  • 出了什么问题:配置项目“:app”时出现问题。

    未能安装以下 Android SDK 软件包,因为某些许可证尚未被接受。build-tools;27.0.3 Android SDK Build-Tools 27.0.3 要构建此项目,请接受 SDK 许可协议并使用 Android Studio SDK Manager 安装缺少的组件。或者,要将许可协议从一个工作站转移到另一个工作站,请参阅 http://d.android.com/r/studio-ui/export-licenses.html 使用 Android SDK:/usr/local/android-sdk-linux

  • 尝试:使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。运行 --scan 以获得完整的见解。

  • 在https://help.gradle.org获得更多帮助

46 秒内构建失败

如果 [ -e ./gradlew ],则导出 TERM="dumb";然后 ./gradlew dependencies;else gradle dependencies;fi 返回退出代码 1

操作失败:gradle 依赖项

build.gradle(项目):

buildscript {
    repositories {
        jcenter()
        maven {
            url 'https://maven.google.com/'
            name 'Google'
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.2'
        classpath 'com.google.gms:google-services:3.3.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
        maven {
            url 'https://maven.google.com/'
            name 'Google'
        }
    }
}

build.gradle(模块):

apply plugin: 'com.android.application'

android {

    compileSdkVersion 27
    buildToolsVersion '27.0.3'
    defaultConfig {
        applicationId "my.my"
        minSdkVersion 16
        targetSdkVersion 27
        versionCode 125
        versionName "1.1.1"
    }
    buildTypes {
        release {
//            debuggable true
            debuggable false
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//            signingConfig signingConfigs.config
        }
    }              
}

repositories {
    maven { url "https://mint.splunk.com/gradle/" }
    maven { url "https://jitpack.io" }
    maven { url "http://dl.bintray.com/dasar/maven" }
    maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')

    // Google modules
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support:cardview-v7:27.1.1'
    implementation 'com.android.support:recyclerview-v7:27.1.1'
    implementation 'com.android.support:support-v4:27.1.1'
    implementation 'com.android.support:design:27.1.1'

    // Google sign-in
    implementation 'com.google.android.gms:play-services-auth:15.0.1'

    // 3rd-party modules
    implementation 'com.melnykov:floatingactionbutton:1.3.0'
    implementation 'com.github.markushi:circlebutton:1.1'
    implementation 'com.squareup:android-times-square:1.6.5@aar'
    implementation 'com.splunk.mint:mint:5.0.0'
    implementation 'com.squareup.retrofit:retrofit:1.9.0'
    implementation 'com.squareup.okhttp:okhttp:2.7.5'
    implementation 'com.squareup.picasso:picasso:2.5.2'
    implementation 'com.splitwise:tokenautocomplete:1.3.1@aar'
    implementation 'me.dm7.barcodescanner:zxing:1.8.2'
    implementation 'com.pnikosis:materialish-progress:1.5'
    implementation 'com.jakewharton:butterknife:8.8.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
    implementation 'info.hoang8f:fbutton:1.0.5'
    implementation 'com.github.bmelnychuk:atv:1.2.+'
    implementation 'com.joanzapata.iconify:android-iconify-fontawesome:2.0.5'
    implementation 'com.github.deano2390:MaterialShowcaseView:1.0.5'
    implementation 'com.akexorcist:RoundCornerProgressBar:2.0.3'
    implementation 'com.daimajia.numberprogressbar:library:1.2@aar'
    implementation 'uz.shift:colorpicker:0.5@aar'
    implementation 'me.philio:pinentryview:1.0.6'
    implementation 'com.github.markomilos:paginate:0.5.1'
    implementation 'net.danlew:android.joda:2.9.2'
    implementation 'com.github.paolorotolo:expandableheightlistview:1.0.0'
    implementation 'net.steamcrafted:load-toast:1.0.10'
    implementation 'com.romandanylyk:pageindicatorview:0.0.5'
    implementation 'com.theartofdev.edmodo:android-image-cropper:2.6.+'

    // Async helpers
    implementation 'com.parse.bolts:bolts-tasks:1.4.0'
    implementation 'com.parse.bolts:bolts-applinks:1.4.0'

    // Database
    api 'com.github.satyan:sugar:1.3'

    // Modules for testing and mock ups
    implementation 'org.fluttercode.datafactory:datafactory:0.8'
    implementation 'junit:junit:4.12'
}

apply plugin: 'com.google.gms.google-services'

在此处输入图像描述

在此处输入图像描述

我尝试清理、重建、退出项目并重新进入。清除缓存。

我从控制台打电话sdkmanager并确认我接受许可证。
sdkmanager已经到位:

在此处输入图像描述

在磁盘的根目录下删除Java并JDK重新安装C:。
它path似乎被写成一个规则:

小路:

C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Git\cmd;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Java\jdk1.8.0_172\bin

JAVA_HOME:

C:\Java\jdk1.8.0_172

我试图将带有许可证的文件推送到不同的文件夹中,现在它们在这里:

在此处输入图像描述

和这里:

在此处输入图像描述

我有Win7 64位。安卓工作室 3.1.2

正在创建调试版本的 APK 并在移动设备上启动,但错误已经困扰了一个月 - 现在我的手已经伸手寻求帮助。

我无法弄清楚我到底错过了什么。

升级版:

在此处输入图像描述 在此处输入图像描述

android
  • 1 个回答
  • 10 Views
Martin Hope
V.March
Asked: 2020-05-14 23:45:16 +0000 UTC

当您使用“汉堡包”按钮在第二个屏幕上打开 NavigationDrawer 时 - 第一个屏幕打开

  • 1

有2个活动。

我为每个人做了单独的窗帘。轻轻一扫,一切都很好,即每个活动都打开了自己的“帷幕”。

但是,当您单击第二个活动中的“汉堡”图标时,会发生以下情况:
第二个活动的幕布立即出现在左侧并向右滑动,并从可见区域隐藏,我们已经在屏幕上的第一个活动。

没有错误被抛出。

也许有人在为不同的活动制作不同的“窗帘”时遇到了这个问题?

活动一公告:

 @Override
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_first);

     mToolbar = (Toolbar) findViewById(R.id.toolbar_first);
     mNavigationDrawer = (DrawerLayout) findViewById(R.id.drawer_first_layout);

     setSupportActionBar(cToolbar);
     mToolbar.setTitleTextColor(getResources().getColor(R.color.white));
     ActionBar actionBar = getSupportActionBar();
     if (actionBar != null) {
         actionBar.setHomeAsUpIndicator(R.drawable.ic_menu_white_24dp);
         actionBar.setDisplayHomeAsUpEnabled(true);
     }
 }

点击处理第一个活动:

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    if (item.getItemId() == android.R.id.home) {
        mNavigationDrawer.openDrawer(GravityCompat.START);

    }
    switch (item.getItemId()) {

        case R.id.menu_first:
            return true;

        default:
            return super.onOptionsItemSelected(item);
    }
}

活动二公告:

 @Override
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_second);

     cToolbar = (Toolbar) findViewById(R.id.toolbar_second);
     cNavigationDrawer = (DrawerLayout) findViewById(R.id.drawer_second_layout);

     setSupportActionBar(cToolbar);
     cToolbar.setTitleTextColor(getResources().getColor(R.color.white));
     ActionBar actionBar = getSupportActionBar();
     if (actionBar != null) {
         actionBar.setHomeAsUpIndicator(R.drawable.ic_menu_white_24dp);
         actionBar.setDisplayHomeAsUpEnabled(true);
     }
}

处理按下第二个活动。

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    if (item.getItemId() == android.R.id.home) {
        cNavigationDrawer.openDrawer(GravityCompat.START);

    }
    switch (item.getItemId()) {

        case R.id.menu_second:
            return true;

        default:
            return super.onOptionsItemSelected(item);
    }
}
android
  • 1 个回答
  • 10 Views
Martin Hope
V.March
Asked: 2020-05-10 00:31:09 +0000 UTC

查看 WYSIWYG 编辑器中的一段文本是否为粗体

  • 2

在WYSIWYG编辑器中,即RichEditor中,将粗体文本应用于文本,我执行以下命令:

document.execCommand("bold", false, null);

上网搜索了一下,没有找到可以获取bold光标所在点是否对文本应用选择状态的命令。

我想根据文本是否为粗体来更改按钮的颜色。

我会很感激任何线索。

javascript
  • 1 个回答
  • 10 Views
Martin Hope
V.March
Asked: 2020-05-08 16:38:39 +0000 UTC

如何将js变量值传递给android中的java变量

  • 2

在一个 Android 项目中,我使用JSRichEditor脚本,我从中得到一个输入到. js-переменную

您需要将此变量从JS转换为Java。我从逻辑上理解至少有两种选择:

1)使用Java方法访问js-переменной并获取其值,赋值java-переменной。

2) 运行一个JS脚本,我可以在其中访问java-переменной并传递来自js-переменной.

尝试过ScriptEngineManage - 但在AndroidStudio中它不起作用。

如何在AndroidStudio中做到这一点?

javascript
  • 1 个回答
  • 10 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5