小编Shr*_*hna的帖子

为什么iPhone 4,5,6在横向方向上的紧凑宽度和紧凑高度

我是iOS开发的新手,只是研究适应性和布局我有点困惑,

根据文档

iOS定义了两个大小类:

  1. 常规: - 它与广阔的空间相关联
  2. 紧凑: - 它与受限空间相关联

通过其他参考:

  1. 纵向方向的所有iPhone(左上角)都有一个规则的高度和一个紧凑的宽度 Iphone在肖像

  2. 横向方向的Iphone 4,5和6具有紧凑的高度和紧凑的宽度. 横向iphone

  3. 但是对于iPhone 6 Plus,它具有紧凑的高度和横向的规则宽度.

    Iphone 6毛绒景观

我的困惑是:

  • iPhone 4,5,6在纵向模式下具有规则的高度和紧凑的宽度但是为什么它们在横向方向上没有规则的宽度和紧凑的横向高度?
  • 如果是这样,为什么iPhone 6 plus与它们不同?是因为它的屏幕比iPhone 6大0.8英寸?重要吗?

在此先感谢!,热烈欢迎编辑!

我知道它在技术上到目前为止不会对开发产生影响但我只想让我的脑海中清楚这些事情.

iphone ios size-classes adaptive-user-interfaces

28
推荐指数
1
解决办法
3554
查看次数

如何将Bitmap转换为Base64字符串

我正在开发一个Android应用程序,它将Base64图像的字符串上传到Web服务器.因此,我使用以下代码将Bitmap转换为Base64String.

public String getEncoded64ImageStringFromBitmap(Bitmap bitmap) {
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
    byte[] byteFormat = stream.toByteArray();
    String imgString = Base64.encodeToString(byteFormat, Base64.NO_WRAP);
    return imgString;
}
Run Code Online (Sandbox Code Playgroud)

例如,我需要转换此图像.转换后,我没有Base64像我预期的那样得到String.

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
Run Code Online (Sandbox Code Playgroud)

它应该是真正的Base64字符串(我用这个网站转换)

iVBORw0KGgoAAAANSUhEUgAAAIcAAAB7CAYAAABet5NoAAAACXBIWXMAABcSAAAXEgFnn9JSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABjBJREFUeNrsnc9x2zwQxRE1YDeQsVOBdPXJSgVRKhBdQeyTr/Ixp6QDUx1IHUinXKUKIo8bkCtwsJ7l98E0IUEkQWKB92Y4zp+xEz3+9LC7IsFPr6+vqgs9X92f6y9jfYz4oN9fH/iWJ33sjGP1+c/PlRIu7cOIfbg0vDg78m1rfez1senSh08+4WAjMjZj2NKPJaMWdGiTdkKAmOgvxXEmxYfW4dBGXDIQdFx49p0MyrU5eYBAkA+zloGwack+LIKEwzBj2sO5oCVoFgIk2ocx+3At3YfGcHAtQWb8COANS+bctv0OEvDmqPIha1qbNIKD19K8g9iss9xkXdUk2geC4jZAH5bsw74zODgtCIpvAdeBL5wiuee0WLRYbPvyYVInRU6GgzuQRQfFZluaMyT7lsEINTVtetAezLzBoQ2hDuS3IEMKbamdbgsQ7QMtIb8Ejlnm2oOsdTgYjEclV08cr5uGYOSBFJ1N6rGJyxtlkAgYipfBFS+LqYKhuMV2qj8GiYBR6KwuIJGAUWjIr6f+ssImrgTWGC5LzMi1BokMDOci1QoHt6sbQV2JlyI1YjAKfbcNDQ8tK3nEYCieTawSB+PtPHMQuMHBPfw3Fb+sa28iYBR1WO60rDBFuwjrDOf+PyEwTH0tT1GrkmOWGBikKXdlqYKhqtLjXXLwZwV/Vbpaq34+ag9FN+ZnUYOK1EhZ14m//lnlssK1xkRBKeuCL1b6kBxZgrUG9FGZDQ4ImhZzjwEvKTQmH8IXiDUxk2MMPyBDYxMOFKLQh+R4m3PoZeUVfkAlfRmYrQsEGRrRsjKCD5ANjkv4AFUVpUgOyKZzJAdk05DguIAPUJUGsAACHBDggAAHBDggwAEBDghwQBHB8QIbIBscG9gAYVmBToZjBRsgGxx72ACh5oBO0RPggGzaDXjboyd4AZW0KboVpAcEOKDT4UA7C5l6oZ2e3+CI4dlpUKtaFa1soTU8gViLMhxID8iaHAt4Amltiydc/QcHP2oC8w4oL34xqFprIMBRBUcOb5LW3HxQwDs4eGnZwiOkRlVykH7DoyS1Prr3OW9vjMI08dSwJQdpBq+Sa1/d4EB6JKfbqj88dIEx0iPRWuMoHJwe6FziV2b7i2O3JtzCu6j1UIzKq3T0idTPV/fU2v6Aj1EWoQc3C3S5qWmG4jSt5cQZDh6nYm/0uHTH0/BmcDAg9IMe4GkUWurz6TQFd75Xlh9rvYS3susMdcJDl069kTpDeytWtNVGduzx7LXh4B+cKezpIRGMsUud0SQ5ivpjDL9ldSanglELDgOQG3guQvQg4VpX+NXevIXH6wAkfDDyut/caGcfABIvGI3hACDxgkE6+tmKq56v7qmLecR5kdeVeEsOJEicYLQKhwHId4U5iHgwWl1WSksMfRS80scZzptMMFpPDiNBikEZEsSvtr7A8JYcRoKcc4IMcR69geFtq1CvOxjzf3ys8GGdODC8w1ECZI5z2oqWXYDhfVmpWGaom5ni/NYW3eicdfWPdboxPr8wXFEmAIzOk8NIEHqRmKa6q5VxeNDJYSQIvdAbtLrhgtFbchgJgmGZXfTGmfS5DWivcACQg2B4G24FvayUlhgy4FJhFlKIfBj1DUYQyWEkCKapHQ23xCSHkSCpD8vmIYERVHKUUoSq85SGZZ3PMEQlRylFyKi7RMC4CxGMYJPDSBAyLeZhWW8zDPFwMCBUhywia3WLWxOD3jE6eDgYkJhmIUHMMMTWHBU1CBk5UvJnIVspYIhJDiNBJM9CgpphRJMcRoJInYWspYEhLjlKKUJVvoRZyDzUVjWq5CilCBl+BzCQHIcShMwPcRYS9AwjCTgYEKpDQpqFiAcjGjgYkBBmIb1foIOao7oG6XsWUgy3VrF4Gg0cDMhO9XMTlajhVpJwMCBdz0KiBCOqmsNSh1BR6HMWsuYaYx+jf1HDwYDQY0F+efjRomcYgON/QOgkPgIMwGEDhOqQNmYhUcwwAMdHQJrOQpIBI8pu5UgnU3cWQjOMrymBkVxyGAlyynUhYq7cQnK0kyCus5Bg7j5DcvSTIrRUTC1gjGOdYSA53FKEWtLydSHL1MFAcrxPEIKEZiFJzDBc9E+AAQBQ99BNOprhRAAAAABJRU5ErkJggg==
Run Code Online (Sandbox Code Playgroud)

我的转换有什么问题?谢谢 !

base64 android bitmap

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

由于网络政策存在一些问题,我的应用因谷歌播放被拒绝了?

以下是该消息 - 并且必须拒绝它,因为它违反了我们的设备和网络滥用政策以及开发者分发协议的第4.4节.如果您提交了更新,则之前版本的应用仍会在Google Play上发布.

以下是您提交应用以进行其他审核的方法:

修改您的应用以确保其不会以违反其服务条款的方式访问或使用服务或API; 例如,通过启用YouTube视频的背景播放.阅读设备和网络滥用政策,了解更多详细信息和示例.确保您的应用符合开发者计划政策中列出的所有其他政策.请注意,如果您的应用存在进一步的政策问题,可能会发生其他强制执行.登录开发者控制台并提交您的应用.

我的应用程序有一个按钮,可以直接从它打开WhatsApp,我也包括youtube网站.

请告诉我这是什么问题

android licensing publish google-play

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

调用OnFailure并抛出IOException但发布了数据

这是我的网络请求示例

networkAPI.postData(myData).enqueue(new Callback<MyResponse>() {
    @Override
    public void onResponse(Call<MyResponse> call, Response<MyResponse> response) {
         if (response.code() == 201) {
             // success
         }
    }
    @Override
    public void onFailure(Call<MyResponse> call, Throwable t) {

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

这是我应该只拨打一次的请求,因为我有一次可用的优惠券代码.如果我立即关闭我的网络连接或者在调用此方法后立即断开连接,那么它会移动到onFailure带有IOExceptionthrowable的方法,这通常是指连接错误,但重点是发布到服务器的数据和使用的凭证代码,问题是onFailure方法在这里被称为.

我确信它不是解析失败,因此我也尝试使用它Void.为什么onResponse即使在发布数据后也没有调用.如何克服这种情况?

java android retrofit

12
推荐指数
1
解决办法
411
查看次数

API级别20或更低级别的EditText是否有任何letterSpacing属性的替代方法

我添加了为什么我的问题在编辑部分中没有重复问题,请查看..


我们在EditText中使用letterSpacing属性来定义字母之间的间距在这张图片中.

但是根据文档,这只是在API级别21或更高版本中引入,如果我们尝试在较低的API级别版本中使用它,它会直接显示渲染问题,如此图片所示在这幅图片中.

在API级别20之前,是否有任何替代方法可以在EditText中使用letterSpacing



编辑

它被标记为重复的问题,但我要通知的是android:textScaleX属性和android:letterSpacing属性是不同的.

让我们举一个例子,在EditText中添加这两个属性

添加的结果android:letterSpacing

letterSpacing的结果

添加的结果android:textScaleX RESULT2

android android-edittext android-api-levels

8
推荐指数
1
解决办法
4069
查看次数

jsonObject.addProperty方法是为它的值添加不必要的引号和斜杠

这是我的字符串

String currentTokenNo = "/SUeSjUf0A0aLFr+wVIZbw==\nLmmWtgHZ90yH0NBoATYB/A"
Run Code Online (Sandbox Code Playgroud)

我已将此字符串添加到我JsonObjectcom.google.gson.JsonObject 包中

  JsonObject jsonToSubmit = new JsonObject();

    try {

        jsonToSubmit.addProperty("token", currentTokenNo);

      } catch (Exception e) {

        e.printStackTrace();
     }
Run Code Online (Sandbox Code Playgroud)

但是当我记录我的StringJsonObject

Log.d("mainactivityjson", "Current Token No : "+currentTokenNo );
Log.d("mainactivityjson", "jsonToSubmit : "+jsonToSubmit);
Run Code Online (Sandbox Code Playgroud)

我找到了结果

D/mainactivityjson: Current Token No : "/SUeSjUf0A0aLFr+wVIZbw==\nLmmWtgHZ90yH0NBoATYB/A"
D/mainactivityjson: jsonToSubmit : {"token":"\"/SUeSjUf0A0aLFr+wVIZbw==\\nLmmWtgHZ90yH0NBoATYB/A\""}
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是:

为什么这些引号和斜杠被添加到值JsonObject?它有什么合适的理由吗?

它确实妨碍了在服务器端检查String值的过程.

我已经完成了一个临时的解决方案,通过从两侧修剪单个角色来完成任务,如下所示

jsonToSubmit.addProperty("token",currentTokenNo.substring(1,currentTokenNo.length()-1));
Run Code Online (Sandbox Code Playgroud)

这完美地运作但我不认为这对未来更好!

附加信息 :

变量currentTokenNo不是如上所示直接声明的,它是从SharedPreferences&检索到的.如果直接声明它,那么一切正常.

String currentTokenNo = preferences.getString(LOGINCRED_TOKEN,"");
Run Code Online (Sandbox Code Playgroud)

如果直接声明相同的变量,一切正常.

任何形式的帮助将不胜感激.

string android jsonobject

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

如何更改ItList中的ArrayList元素而不影响原始元素?

我有一个ArrayListString,让我们说originalArrayList一些值

 final ArrayList<String> originalArrayList = new ArrayList<>();
            originalArrayList.add("value1");
            originalArrayList.add("value2");
            originalArrayList.add("value3");
            originalArrayList.add("value4");
            originalArrayList.add("value5");
Run Code Online (Sandbox Code Playgroud)

  我originalArrayList在内部类中复制了它并删除了一些元素

button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ArrayList<String> tempArrayList = originalArrayList;
                                
                tempArrayList.remove(0); //Remove an element
               
            }
        });
Run Code Online (Sandbox Code Playgroud)

但是,这是影响原来ArrayList这是originalArrayList在我的情况.

我怎样才能防止这种情况发生?

java android

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

如何检测设备是否有3.5毫米音频插孔?

我已经阅读了很多帖子和论坛文章,但没有找到任何与我的要求相关的内容.很多新的Android设备都没有内置耳机插孔,我不需要处理这些设备.

通过PackageManger我只能检测功能AUDIO_OUTPUT.

有没有有效的方法可以检查设备中是否存在3.5毫米音频插孔?

audio android android-package-managers

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

NameValuePair,HttpParams,HttpConnection Params在登录app的服务器请求类上已弃用

第一次在这里问一个问题,并且是android编程的新手.我正在按照在线youtube教程创建用户"Tonikami TV"的登录.应用程序的一切都很好,除了它涉及到serverRequests类.我得到了NameValuePair,HttpParams等等已被弃用,据我所知,它已经过时且自API 22以来不受支持.我已经搜索了一些固定的或替代的但是不能真正理解它们以及如何将它们应用到我的代码中.任何帮助将不胜感激.谢谢 :)

    @Override
    protected Void doInBackground(Void... params) {
        ArrayList<NameValuePair> dataToSend = new ArrayList<>();
        dataToSend.add(new BasicNameValuePair("firstname", user.FirstName));
        dataToSend.add(new BasicNameValuePair("lastname", user.LastName));
        dataToSend.add(new BasicNameValuePair("age", user.Age + ""));
        dataToSend.add(new BasicNameValuePair("emailaddress", user.EmailAddress));
        dataToSend.add(new BasicNameValuePair("password", user.Password));

        //possible alternative code found on stack overflow don't know exactly what to do from here.
        ContentValues values= new ContentValues();
        values.put("firstname", user.FirstName);
        values.put("lastname", user.LastName);
        values.put("age", user.Age + "");
        values.put("emailaddress",user.EmailAddress);
        values.put("password",user.Password);
        //

        HttpParams httpRequestParams = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(httpRequestParams, CONNECTION_TIMEOUT);
        HttpConnectionParams.setSoTimeout(httpRequestParams, CONNECTION_TIMEOUT);

        HttpClient client = new DefaultHttpClient(httpRequestParams); …
Run Code Online (Sandbox Code Playgroud)

java android login deprecated server

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

有没有最简单的方法在iOS中实现所有必需的协议方法?

首先,它不是这个问题的重复,因为我找不到任何有关离线文档,适当答案以及Xcode中未来更新版本的讨论.

实际上我来自android和java背景,目前也开始开发iOS应用程序.众所周知,我们可以通过按下IDE中Interface给出的建议来轻松实现所有方法.Alt + Enter

在iOS中我们必须每次都看到引用并搜索所有必需和可选的方法,并逐个手动实现它们消耗时间它很好但是暂时没有

我的问题是:

  1. 是否有最简单的方法可以在文档中首次查找所有必需的方法或在IDE的帮助下实现所有必需的协议方法?
  2. 我们是否有可能在Xcode更新的未来版本中获得此功能?
  3. 我无法一直确保互联网的可用性,我当时如何查看文档?

methods xcode implementation protocols ios

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