小编Max*_*ude的帖子

弱引用而不是getActivity()(Android避免内存泄漏)?

为了避免内存泄漏,我编写了以下方法,该方法将用于活动,主要用于片段(使用继承).该方法应该允许我永远不会通过调用直接引用该活动

//this or getActivity()
Run Code Online (Sandbox Code Playgroud)

方法是:

private WeakReference<BaseActivity> activityWeakReference = null; 

public BaseActivity getActivityFromWeakReference(){
        activityWeakReference = activityWeakReference == null ?
                new WeakReference<BaseActivity>((BaseActivity)getActivity()) :
                activityWeakReference;
        return activityWeakReference.get();
    }
Run Code Online (Sandbox Code Playgroud)

根据内存泄漏威胁调用此方法getActivityFromWeakReference()而不是getActivity()安全吗?

如果这样做不安全,我应该返回activityWeakReference并调用其get()方法,以确保安全吗?

我一直在使用多个片段,到目前为止我没有任何问题.我问这个问题是因为我读到了这里(这里):

只要帮助者的生命周期在生命周期内 Activity,就没有必要使用WeakReference.如果帮助程序的寿命可以长于Activity,那么您应该使用a WeakReference 来避免Activity在系统破坏时保留对象图.

到目前为止,我还没有遇到一个被提及的元素超过活动的情况.如果您发现错误或可能的错误,请在评论中写下.

java android memory-leaks weak-references

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

如何对折线进行聚类?

我已经尝试这个很棒的库一个月了。到目前为止,它允许我在地图上拥有超过 5000 个标记。问题是我必须在这些位置之间绘制折线。请问有人有关于如何聚类折线的示例吗?当我不绘制折线时,缩放(和地图)很平滑,但是一旦我绘制折线,它就会变得很慢。请问mg6maciej(库的作者),你有关于如何聚类折线的Demo吗?提前致谢

android-maps-extensions

6
推荐指数
0
解决办法
593
查看次数

向 google 地图 api 方向发出带有航点的 http 请求

我正在开发一个 Android 应用程序,使用路线谷歌地图 api v2。据说这里我可以在我的http请求中放置最多“8个路径点”(我假设加上出发点和目的地点)。因此,我的代码生成下面的请求(我订购了它,以便您可以计算航路点的数量)。

https://maps.googleapis.com/maps/api/directions/json?origin=45.509166,-73.497897&destination=5.5027,-73.503455&waypoints=optimize:true| 45.509196,-73.495494| 45.511166,-73.493584| 45.515887,-73.500751| 45.516835,-73.507189| 45.51497,-73.514892| 45.507828,-73.515879| 45.504038,-73.516008| 45.508971,-73.505665| &传感器=假&API_KEY

这是我得到的答案:

{
   "routes" : [],
   "status" : "ZERO_RESULTS"
}
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我理解出了什么问题吗?我的请求是否有错误,或者我绕过了 google 地图 api 方向的限制?

android google-maps google-maps-api-2

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

使用Retrofit 2发送带有url参数的帖子

我想发送一个带有Retrofit 2的POST.该url有一些参数:

 @Headers({
      "Accept: application/x-www-form-urlencoded;",
      "User-Agent: my-app"
 })
 @FormUrlEncoded
 @POST("server/directory/location.type")
`public Call<POJOStringValue> dataWithUr(@Path("arg1") String arg1, @Path("arg2"), String arg2);         
Run Code Online (Sandbox Code Playgroud)

网址看起来像这样

www.website.com/server/directory/location.type?arg1=value1&arg2=value2

我被要求使用POST请求.值(value1和value2)在运行时是动态的.我使用HttpClient与Xamarin开始了这个项目,现在我用Java native重写它.在C#中,我所要做的就是完成字符串并将结果字符串发送到一个Post中.

我试图使用@Path,错误是:

"server/directory/location.type"不包含"{arg1}".(参数#1)

然后,我尝试使用@Query,错误是:

java.lang.IllegalArgumentException:表单编码方法必须至少包含一个@Field.

最后我尝试使用@Field请求永远不会得到任何响应(我将连接超时设置为5秒)

请帮助我,或告诉我是否必须有其他选择,只能使用GET请求.

((编辑)) 这是我的客户端设置代码:

private static void setupClient(){
    final OkHttpClient client = new okhttp3.OkHttpClient.Builder()
            .connectTimeout(CONNECTION_TIMEOUT, TimeUnit.SECONDS)
            .readTimeout(READ_TIMEOUT, TimeUnit.SECONDS)
            .writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS)
            .retryOnConnectionFailure(false)
            .build();


    //define retrofit
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(iXUtils.getUrl_())
            .addConverterFactory(GsonConverterFactory.create())
            .client(client)
            .build();

    this.client_ = retrofit.create(RequestInterface.class);
}
Run Code Online (Sandbox Code Playgroud)

get()方法:

public static RequestInterface get(){
    return this.client_;
}
Run Code Online (Sandbox Code Playgroud)

以下是我的称呼方式:

 public String callFunctionDB(String arg1,  String arg2){
    setupClient();

    Call<POJOStringValue> …
Run Code Online (Sandbox Code Playgroud)

java android retrofit2

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