小编Boj*_*ski的帖子

将参数传递给AsyncTask,并返回结果

我有一个应用程序做了一些长时间的计算,我想在完成后显示进度对话框.到目前为止,我发现我可以使用线程/处理程序执行此操作,但是没有工作,然后我发现了有关AsyncTask.

在我的应用程序中,我使用带有标记的地图,并且我已经实现了onTap函数来调用我已经定义的方法.该方法创建一个带有"是/否"按钮的对话框,AsyncTask如果单击"是" ,我想调用它.我的问题是如何传递ArrayList<String>AsyncTask(并在那里工作),以及如何从一个新ArrayList<String>的结果回来AsyncTask

该方法的代码如下所示:

String curloc = current.toString();
String itemdesc = item.mDescription;

ArrayList<String> passing = new ArrayList<String>();
passing.add(itemdesc);
passing.add(curloc);

ArrayList<String> result = new ArrayList<String>();

new calc_stanica().execute(passing,result);

String minim = result.get(0);
int min = Integer.parseInt(minim);

String glons = result.get(1);
String glats = result.get(2);

double glon = Double.parseDouble(glons);
double glat = Double.parseDouble(glats);

GeoPoint g = new GeoPoint(glon, glat);
String korisni_linii = result.get(3);
Run Code Online (Sandbox Code Playgroud)

所以,如你所见,我想将字符串数组列表"传递"给它AsyncTask,并从中获取"结果"字符串数组列表.calc_stanica AssycTask类看起来像这样:

public class calc_stanica …
Run Code Online (Sandbox Code Playgroud)

android return progressdialog android-asynctask

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

使用提供的 upload_cert.der 签署一个发布的 Android APK 文件

我刚刚注册了 Google Play App Signing 计划,该计划需要上传发布密钥库的加密版本,并且有一个“可选”步骤来创建上传密钥库 - 可选用引号引起来,因为我认为这应该是一个必需步骤,但无论如何,在成功注册后,我现在留下了一个上传证书,我应该以某种方式使用它来签署我未来的应用程序版本。

到目前为止我所做的:我从 Android Studio 创建了一个新的密钥库,设置了存储和别名密码,并尝试将upload_cert.der导入现有别名 - 失败:

keytool -importcert -file upload_cert.der -alias upload -keystore upload-keystore.jks
Run Code Online (Sandbox Code Playgroud)

keytool 错误:java.lang.Exception:回复中的公钥与密钥库不匹配

我还尝试在不指定别名(或删除现有别名并创建新别名)或使用不同别名的情况下导入上传证书:

keytool -importcert -file upload_cert.der -keystore upload-keystore.jks
Run Code Online (Sandbox Code Playgroud)

...也失败了:最终创建了一个名为mykey的新别名,该别名不受密码保护并且失败并显示消息:

引起:java.lang.RuntimeException:com.android.ide.common.signing.KeytoolException:无法从存储“/path/to/upload-keystore.jks”读取密钥上传:受信任的证书条目不受密码保护

...所以很自然地,我尝试为别名设置密码:

keytool -keypasswd -alias upload -keystore upload-keystore.jks
Run Code Online (Sandbox Code Playgroud)

失败以及消息:

keytool 错误:java.lang.Exception:Alias 没有密钥

......现在我已经没有想法了。

与此同时,我已向 Google Play 支持人员发送了一个问题/请求以更新我的上传密钥,但是,我希望有一种解决方案(支持人员回复有点慢),因为文档没有t 以任何方式暗示需要生成上传密钥库并上传该密钥库的加密私钥。因此,要么文档含糊不清/不清楚/错误,要么有一种方法可以使用生成的upload_cert.der。有什么想法吗?

编辑:

感谢Pierre提供的回答和评论,我意识到如果您不创建/提供上传密钥,则应使用您现有的原始签名密钥和upload_cert.der。因此,唯一的要求是通过运行插入上传证书:

keytool -importcert -file upload_cert.der -keystore original-signing-keystore.jks
Run Code Online (Sandbox Code Playgroud)

...您应该能够继续将您的应用程序发布到 Play 商店。

android keystore google-play android-app-signing

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

HTTP失败:java.net.SocketException:套接字已关闭;不会触发异常处理方法

我有一个RxJava链请求,该请求应该释放一些锁onError()或onComplete(),所以,基本上,我的问题是:当我对OkHttpClient设置读取,连接和写入超时时,我没有得到想要的行为。我正在使用Retrofit2和OkHttp3.6.0,这是我的简化客户端:

OkHttpClient.Builder builder = new OkHttpClient.Builder()
           .readTimeout(30, TimeUnit.SECONDS)
           .connectTimeout(30, TimeUnit.SECONDS)
           .writeTimeout(30, TimeUnit.SECONDS)
OkHttpClient okHttpClient = builder.build();
Run Code Online (Sandbox Code Playgroud)

这是我拥有的连锁请求的简化版本:

public <T extends Response> Observable<T> doSomething(Observable<T> base) {
    isLocked = true;
    return someApiCall()
               .flatMap(apiResponse -> handleResponse(apiResponse, base)
                   .doOnError(throwable -> {
                       isLocked = false;
                   })
                   .doOnCompleted(() -> {
                       isLocked = false;
                   }));
}
Run Code Online (Sandbox Code Playgroud)

handleResponse()进行另一个API调用并返回,Observable<Response<Something>>但是,正如我已经说过的,它有时会以失败,HTTP FAILED: java.net.SocketException: Socket closed并且永远不会完成Observable,因此,永远不会调用onError()或onComplete()。我也尝试过onTerminate(),但是没有运气。当我从中删除超时设置时OkHttlClientSocketException实际上会引发并捕获,从而释放isLocked变量。我试过handleResponse()用一个try {} catch (Exception e) {}块包装return语句,但是即使SocketException在设置自定义超时时也无法捕获。有任何想法吗?

android rx-java okhttp retrofit2

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

自定义彩色可绘制为Google Maps API v2中的地图标记 - Android

是否可以在Google Maps API v2中设置自定义彩色标记?我有一个白色的可绘制资源,我想对它应用彩色滤镜.我试过这个:

String color = db.getCategoryColor(e.getCategoryId());
Drawable mDrawable = this.getResources().getDrawable(R.drawable.event_location); 
mDrawable.setColorFilter(Color.parseColor(Model.parseColor(color)),Mode.SRC_ATOP);
map.addMarker(new MarkerOptions().position(eventLocation)
    .title(e.getName()).snippet(e.getLocation())
    .icon(BitmapDescriptorFactory.fromBitmap(((BitmapDrawable) mDrawable).getBitmap())));
Run Code Online (Sandbox Code Playgroud)

但它不起作用.它仅显示没有自定义颜色的白色标记.我传递给setColorFilter()的"颜色"字符串的值是"#RRGGBB"的形式.

android google-maps google-maps-markers android-drawable android-maps-v2

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

带有自定义适配器的ListView,在Fragment内部不会触发onItemClick事件

我有一个用于Fragment内容的ViewProvider类,它返回一个片段的Lis​​tView.ListView有一个扩展BaseAdapter类的自定义适配器.当我尝试实现项目点击监听器时,它只是不起作用.我有这个代码给听众:

lv.setOnItemClickListener(new ListView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> a, View vi, int pos,
                long id) {
        try {
            Object o = lv.getItemAtPosition(pos);
            Event obj_itemDetails = (Event) o;
            Toast.makeText(context, "You have chosen : " + " " + obj_itemDetails.getName(), Toast.LENGTH_LONG).show();
            Log.d("xxx", "output: "+obj_itemDetails.getName());
        } catch(Exception e) {
            Log.d(Log.TAG, "Something is wrong...");
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

......甚至没有例外的火灾.在同一个ViewProvider类中,我添加了一个带有SimpleAdapter的列表,它运行得很好.我初始化列表相同:

EventAdapter sta = new EventAdapter(context, events);
final ListView lv = new ListView( context );
lv.setTextFilterEnabled(true);
lv.setAdapter(sta);
Run Code Online (Sandbox Code Playgroud)

另一个:

final ListView v = new ListView( context );
String[] …
Run Code Online (Sandbox Code Playgroud)

android fragment android-listview onitemclicklistener

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