全部 文章 问答 分享 共找到1323个相关内容
[问答] 关于Android GPS定位的疑问


### 第三方地图疑问


地图也是调用系统提供的接口吧。

2022-10-21 11:33 · GPS / Android
[问答] android 听书那个项目 有点小疑问 还请多帮帮忙 谢谢
就是在PlayerPresenter逻辑类中,谁去调用播放器的回调方法onPlayProgress(),然后在由回调去调用里面的onProgressChange(),疑问就是不是太明白谁去调用该方法?
2020-03-26 19:51 · Android
[问答] 阳光沙滩个人博客后台学习中的几个疑问
小生刚学完后台,有几个疑问问题一:下面这里为什么要用callable开启一个新线程执行啊,而且不是cllable.start()执行的而是直接callable.call(),这样不就是直接在主线程执行吗问题二
2020-10-23 19:07 · sob个人博客系统
[问答] 关于Fileprovide我有几点疑问
这个项目是拍照然后取出照片并显示出来,这个照片的位置是 /storage/emulated/0/Android/data/com.example.camera/files/Pictures/image.jpg
2023-04-27 08:09 · Android
[文章] 3、Android开发基础-线性布局(视频)
Android基础线性布局(视频)视频下载在最底部:如果你要开始学习Android开发,那么你先要搭建Android开发的环境:https://study.163.com/course/introduction
2019-10-21 17:02 · android / 安卓 / 基础 / 布局 / UI
[问答] view父布局
我对view父布局的理解有点疑问,popview的父布局是谁?需要大佬点我一下
2019-12-28 11:10 · view父布局
[问答] activity.finish()之后还能弹toast吗

有个疑问Fragment里面执行了activity.finish()的操作 之后,还能接着弹toast吗

2022-12-15 15:46 · Android
[问答] Android 视频图片播放demo疑问
1.把屏幕划分成四份,每个区域都要可以播放视频和图片。点击选择每块区域来选择是播放图片还是视频。视频可以用videoView,图片可以用ImageView。但是这个点击选择我应该咋处理?
2020-09-03 09:50 · Android
[问答] 求大神解惑 Android 线程的一些疑问

各位大佬们 晚上好 ,


有个问题 求各位大神瞅一眼。


今天遇到一个bug 如下图(动图转换成链接了,只是个概念图 设备不在身边没办法百分百复现)

链接 http://m.qpic.cn/psc?/V10HPnpE4LATa2/ruAMsa53pVQWN7FLK88i5hGe9BiLdnJv6ruNEyq3TEvTBQ0fwViEAvZHo1OUyw6SDCDqtroo17q1MHn*vI7Jrr3TNmEjV6I.OuhmPvrqFcQ!/b&bo=aAHwAAAAAAACJ5o!&rf=viewer_4


我调查之后发现 这个bug的原因是 因为mHandler.postDelayed 被调用时 偶现出现两个线程对progress 进行操作的现象,从而导致控件的值闪烁。


这是我打的log,确实有两个线程一起走到onImportFlie()方法....




不太理解为什么会出现两个线程,线程结束是run执行完后结束吗?


我自己总结了两个方法来应对这种情况,但是我不知道该怎么写代码....

1.在控件使用mHandler.postDelayed时 就防止它出现多个线程的问题 比如 防止频繁点击(防止频繁点击对我这个不太有效)

2.在数据处理的时候 只允许一个线程对数据进行操作 如果此时有第二个线程也想对数据进行操作 就干掉它.... (确实不会写)

总之就是 在“多个线程产生前” 和 “多个线程调用同一对象时” 这两个时间点进行处理,从而解决这种现象。


各位大神们 有什么好的建议吗?


mHandler.postDelayed(new Runnable() {
    @Override
    public void run() {
      //通过中间层通知Model层进行文件导入动作
    }
}, 500);


//Model层 导入方法
public void onImportFlie() {
    Iterator iterator = newfileInfos.iterator();
    while (iterator.hasNext()) {
        try {
            @Override
            public void onProgress ( long transferSize){
                //todo 通知进度
                transferSize += finalSize;
                mProgressInfo.setFilePath(fileInfo.filePath);
                int progress = (int) (transferSize * 100 / mProgressInfo.getTotalSize());
                mProgressInfo.setProgress(progress);
            }
        }
    }
}

PS:代码我随便粘贴了两句  大家懂我意思就行  太长了没必要都贴出来...
    
    



2022-12-19 22:57 · Android / 线程 / 多线程
[文章] Android开发如何监听通知内容呢?
Android开发如何监听通知内容呢?有些时候吧,我们需要知道通知内容,最简单的需求,我们要获取短信验证码,对吧。以前的话我们可以通过监听内容提供者的变化,监听短信,那换一个思路呢?
2021-03-18 11:55 · 通知 / android开发 / 安卓 / 系统 / aosp
[文章] Android开发基础之番外篇ADB的讲解
Android开发基础之番外篇ADB的讲解前言视频下载在最后面!
2019-10-21 18:46 · adb / 安卓开发 / android / 安卓调试桥 / 测试
[问答] 拦截器影响登录疑问
D/com.netease.nemu_vapi_android.thread.HttpServer: http server response data: {"errcode":0,"message":
2022-01-04 15:26 · 拦截器
[问答] 有哪里可以学习多点UI交互吗
断点的沙滩APP中的 发送摸鱼动态 Topic话题选项 的UI是自定义的吗 点击弹出后还可以继续往上拖动 是自定义向上的抽屉View吗

有些UI交互还是觉得需要多学多看才懂

还有个疑问

2021-12-13 09:14 · UI
[问答] 怎样方便的获取图像的坐标
images.sunofbeaches.com/content/2022_07_27/1001845006287241216.png">

最近在学自定义View,例如画个心型,根据上面的红框的坐标去画,这时我就有疑问

2022-07-27 13:40 · 自定义View
[问答] 管理中心文章文章条件查询返回数据不一致?
疑问1:在后端使其格式统一?疑问2:在前端实现某种提取?
2020-09-17 23:21 · 管理中心 / java后端
[问答] 阳光沙滩登录API 请求疑问

想开一个新的学习工程(在公司太闲了) 然后想到沙滩有公开API 放在postman先试试 图灵好了 登录这块是我请求错误了 md5摘要 这里显示的是密码错误吗 我拿我登录的密码去MD5后取32位小写放置 请求出结果错误

求大牛们指点一下呀

2021-12-03 10:25 · 沙滩登录
[问答] 关于沙滩登录cookie疑问

我现在在加载验证码cookie 需要在retrofit先请求一遍才能记录cookie 但是验证码那块的获取的是image 我解析json格式时会报错

因为图灵的图是直接图片 我拿去解析object了 错误如下

Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1 path $


现在有几个问题需要请教一下

1.图灵图片需要怎样请求retrofit object-->解析错误 《 虽然Glide直接可以显示出来 但是没办法在这里拿到它的cookie

2.拦截器加cookie后 login登录的时候 携带cookie后 这样直接请求可以吗

3.cookie还有更简洁的获取方式吗 在Glide请求的时候也可以拿到 就可以先忽略1。了


我贴一贴请求的东西哈 可能格式不太美观

请求类

public interface GetSugarApi {
    @GET("uc/ut/captcha")
    Observable<String> getImage(@Query("code") String code);
    
    @GET("uc/user/avatar/{phone}")
    Observable<Sugar_photoBean> getPhoto(@Path("phone") String phone);

    @POST("uc/user/login/{captcha}")
    @FormUrlEncoded // 表单请求--> 不支持
    Observable<Sugar_LoginBean> login(@Header("Content-Type") String s, @Path("captcha") String captcha, @Field("phoneNum") String phoneNum, @Field("password") String password);
    
    @POST("uc/user/login/{captcha}")
    Observable<Sugar_LoginBean> login2(@Path("captcha")String captcha, @Body RequestBody body);

}


实现类

public class LoginActivity extends BaseActivity {
    private ImageView img_code;
    private EditText et_code;
    private Button btn_login;
    int i = 0;
    @Override
    public void initView() {
        btn_login = findViewById(R.id.btn_login);
        et_code = findViewById(R.id.et_code);
        img_code = findViewById(R.id.img_code);
    }

    private void login(String code) {
        LoginBean loginBean = new LoginBean("136XXXX3056","XXXXmd5");
        RequestBody body = FormBody.create(MediaType.parse("application/json; charset=utf-8"), new Gson().toJson(loginBean));
        Observable loginObservable = sugarApi.login2(code,body);
        loginObservable.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<Sugar_LoginBean>() {
                    @Override
                    public void onSubscribe(@NonNull Disposable d) {
                        Log.e("-->","loginObservable onSubscribe");

                    }
                    @Override
                    public void onNext(@NonNull Sugar_LoginBean loginBean) {
                        Log.e("-->","loginObservable onSubscribe = "+loginBean.toString()); // 在这里总是验证码错误 大牛们说没携带cookie  后面在网上找了一种拦截器讲 cookie缓存的  贴在下面哈
                    }
                    @Override
                    public void onError(@NonNull Throwable e) {
                        Log.e("-->","login  onError "+ e.getMessage().trim());
                    }
                    @Override
                    public void onComplete() {
                    }
                });
    }

    @Override
    public int getLayoutId() {
        return R.layout.activity_login;
    }

    private Retrofit retrofit;
    private OkHttpClient okHttpClient ;
    private  GetSugarApi sugarApi;
    private String baseUri = "https://api.sunofbeach.net/";
    @Override
    public void initData() {
        okHttpClient = new OkHttpClient.Builder()
                .addInterceptor(new AddCookiesInterceptor(this))
                .addInterceptor(new SaveCookiesInterceptor(this)).build();

        retrofit = new Retrofit.Builder()
                .baseUrl(baseUri)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .client(okHttpClient)
                .build();
        sugarApi = retrofit.create(GetSugarApi.class);

        requestTranslation();


        loadImg();


        img_code.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                i = i++;
                Glide.with(LoginActivity.this).load("https://api.sunofbeach.net/uc/ut/captcha?code="+i).into(img_code);

            }
        });
        btn_login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String code = et_code.getText().toString();
                login(code);
            }
        });
    }

    private void loadImg() {
        int max = 9999 , min = 1000;
        int ranNum = (int) ( Math.random() * ( max - min ) + min );
        Log.e("-->","random ranNum = "+ ranNum );
        Glide.with(this).load(baseUri+"uc/ut/captcha?code="+ranNum).into(img_code);
        Observable<String> observable = sugarApi.getImage(ranNum+"");
//        // 创建的时候请求
        observable.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<String>() {
                    @Override
                    public void onSubscribe(@NonNull Disposable d) {
                    }

                    @Override
                    public void onNext(@NonNull String s) {
                        Log.e("-->","loadImg onNext "+s.toString());
                    }

                    @Override
                    public void onError(@NonNull Throwable e) {
                        Log.e("-->","loadImg onError "+e.getMessage().toString());

                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }

两个cookie拦截器类

public class SaveCookiesInterceptor implements Interceptor {
    private static final String COOKIE_PREF = "cookies_prefs";
    private Context mContext;

    public SaveCookiesInterceptor(Context context) {
        mContext = context;
    }

    @Override
    public Response intercept(Chain chain) throws IOException {
        Request request = chain.request();
        Response response = chain.proceed(request);
        //set-cookie可能为多个
        if (!response.headers("set-cookie").isEmpty()) {
            List<String> cookies = response.headers("set-cookie");
            String cookie = encodeCookie(cookies); //解析
            saveCookie(request.url().toString(), request.url().host(), cookie); // 存入
        }

        return response;
    }

    //整合cookie为唯一字符串
    private String encodeCookie(List<String> cookies) {
        StringBuilder sb = new StringBuilder();
        Set<String> set=new HashSet<>();
        for (String cookie : cookies) {
            String[] arr = cookie.split(";");
            for (String s : arr) {
                if(set.contains(s))continue;
                set.add(s);

            }
        }

        Iterator<String> ite = set.iterator();
        while (ite.hasNext()) {
            String cookie = ite.next();
            sb.append(cookie).append(";");
        }

        int last = sb.lastIndexOf(";");
        if (sb.length() - 1 == last) {
            sb.deleteCharAt(last);
        }

        return sb.toString();
    }

    //保存cookie到本地,这里我们分别为该url和host设置相同的cookie,其中host可选
    //这样能使得该cookie的应用范围更广
    private void saveCookie(String url,String domain,String cookies) {
        SharedPreferences sp = mContext.getSharedPreferences(COOKIE_PREF, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sp.edit();

        if (TextUtils.isEmpty(url)) {
            throw new NullPointerException("url is null.");
        }else{
            editor.putString(url, cookies);
        }

        if (!TextUtils.isEmpty(domain)) {
            editor.putString(domain, cookies);
        }

        editor.apply();

    }
}

public class AddCookiesInterceptor implements Interceptor {
    private static final String COOKIE_PREF = "cookies_prefs";
    private Context mContext;

    public AddCookiesInterceptor(Context context) {
        mContext = context;
    }

    @Override
    public Response intercept(Chain chain) throws IOException {
        Request request = chain.request();
        Request.Builder builder = request.newBuilder();
        String cookie = getCookie(request.url().toString(), request.url().host());
        if (!TextUtils.isEmpty(cookie)) {
            builder.addHeader("Cookie", cookie);
        }

        return chain.proceed(builder.build());

    }

    private String getCookie(String url, String domain) {
        SharedPreferences sp = mContext.getSharedPreferences(COOKIE_PREF, Context.MODE_PRIVATE);
        if (!TextUtils.isEmpty(url)&&sp.contains(url)&&!TextUtils.isEmpty(sp.getString(url,""))) {
            return sp.getString(url, "");
        }
        if (!TextUtils.isEmpty(domain)&&sp.contains(domain) && !TextUtils.isEmpty(sp.getString(domain, ""))) {
            return sp.getString(domain, "");
        }

        return null;
    }
}





2021-12-06 11:23 · cookie
[问答] 压缩gif 动图疑问
beforeBitmap.compress(Bitmap.CompressFormat.JPEG, options, bos);


已知 以上代码是对于图片进行压缩 那如果压缩的是gif图呢 需要换成流去压缩吗

用该代码去压缩gif 生成的是gif结尾的图片 可是栋不起来了 这点比较疑惑 希望各位大佬点醒一下


我的压缩代码如下

String directoryPrefix = context.getExternalFilesDir("").getAbsolutePath()+SLASH;
        String imagepath = directoryPrefix +"sugar"+ SLASH + "image"+SLASH;
        File file = new File(imagepath);
        if (!file.exists()) {
            file.mkdirs();
        }
        // 可以捕获内存缓冲区的数据,转换成字节数组。
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        if (beforeBitmap != null) {
            // 第一个参数:图片压缩的格式;第二个参数:压缩的比率;第三个参数:压缩的数据存放到bos中
            beforeBitmap.compress(Bitmap.CompressFormat.JPEG, quality, bos);
            // 循环判断压缩后的图片大小是否满足要求,这里限制100kb,若不满足则继续压缩,每次递减10%压缩
            int options = quality; // 70
            while (bos.toByteArray().length / 1024 > maxSize) {
                bos.reset();// 置为空
                beforeBitmap.compress(Bitmap.CompressFormat.JPEG, options, bos);
                options -= 5;  // 每次减少5的压缩质量
            }
            // 转化为文件
            try {
                File compressImageFile = null;
                if (isGif ){
                    compressImageFile = File.createTempFile("image", ".gif", file);
                }else {
                    compressImageFile = File.createTempFile("image", ".jpg", file);
                }
                // 写入 绝对路径
                uncompressImageWithLowQuality(compressImageFile.getAbsolutePath() , bos);
                return compressImageFile.getAbsolutePath();
            } catch (IOException e) {
                SLog.e("createTempFile error is e ="+ e.getMessage());
                e.printStackTrace();
            }

            // 从bos中将数据读出来 转换成图片(位图)
//            ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
//            Bitmap afterBitmap = BitmapFactory.decodeStream(bis);
//            return afterBitmap;
        }
        return null;
2022-08-04 18:16 · 压缩gif
[问答] 喜马拉雅有个疑问
这个是接口回调返回结果,只有获取到数据后再setAdapter后,Adapter的getItemCount返回才不是0,这是因为什么?这个是老师的代码,老师这边是先setAdapter,然后再去通过接口回调返回数据,但是我跟老师一样的话,在Adapter里的getItemCount返回的就是0,这是为什么?
2020-08-08 11:43 · 喜马拉雅
[问答] P1-Android开发-Jetpack我们从MVVM开始 第十课疑问

https://www.bilibili.com/video/BV1Dk4y1C7mm?p=10&vd_source=8e4f3c6cc6d369c0c0856f5ff5089007


请问有人跟着敲代码吗。第十节课。DataListenContainer 里面的value 值没更新上。是什么情况。视频23:45 左右。点那个暂停按钮后,按钮的文字并没有变成播放。


currentMusic.value 和currentPlayState.value 就每次设完值都是null? kotlin语法究竟是啥玩意 。



附一个demo 地址。https://github.com/YolandaLeung/jetpack_b_station 涉及文件跟视频教程一致。。

2022-06-22 16:28 · android
[文章] Android :使用Loader加载本地图片
Android中已经为数据的增删改查做了封装,我们不需要用SQL语句。
2020-03-28 13:26 · Loader / Android
[问答] SQL语句查询结果导出疑问


假设我使用的SQL语句 查出来的结果是上表

SELECT * FROM st_baidu_refer_sdr  WHERE INSERT_TIME BETWEEN 20210101000000 AND 20220114235959 and  ENTERPRISE_ID = 123123 ORDER BY INSERT_TIME


那我怎么把它在sql导出成以下形式呢 是用多表查询么 如果没创建表的前提下能完成么 第三列的结果是上面查询结果的行数 时间倒是可以计算 eID也可以用上面eid 不过导出成下面格式我不太理解 可以操作么

2022-01-14 13:39 · SQL
[问答] Javaweb 跑网页 显示404问题

所以现在有两个疑问

2021-09-24 15:23 · javaweb
[文章] Android开发学习路线
Android开发环境搭建Android开发系列环境的搭建Android基础Android开发系列UI布局讲解Android开发系列UI布局讲解Android开发系列数据持久化存储Android开发系列数据持久化存储
[问答] android studio 闪退
;at android.view.ViewGroup.layout(ViewGroup.java:6335)

    at android.widget.FrameLayout.layoutChildren

2021-05-26 17:32 · 异常
[问答] 关于沙滩一些借口的疑问

1.今天完成了周排行榜 关注情况的优化 不过借口返回的回答问题数是总的 估计没有进行时间筛选




2

2.https://images.sunofbeaches.com/content/2021_11_16/910128376692342784.png

后缀返回是.png 其实是.gif的动图 估计是后台返回的后缀有些许问题

2022-02-24 10:23 · web
[问答] Android内存泄漏问题
$ActivityClientRecord#nextIdle     Description: Android AOSP sometimes keeps a reference to
2021-06-27 14:11 · 内存泄漏 / Android
[文章] Android Jetpack 之 Navigation
/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:id="@
2020-09-19 15:07 · navigation / 导航 / jetpack / 组件 / android
[问答] Android开启启动
公司要求做一个自启动app,然后一开始使用android.intent.action.LOCKED_BOOT_COMPLETED,但是恢复出厂设置去收不到广播,然后使用和 android.intent.action.BOOT_COMPLETED
2020-03-19 16:24 · android
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 45