[项目]备份手机相册到私有服务器 Day 9

本文介绍了一种将客户端与服务器的通信方式改为回调机制的方法,通过这种方式,Activity不再需要持续监控返回数据,使得代码更加清晰。同时,分享了具体的实现代码,并展示了如何在图片列表页面中应用这一改进。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

客户端与服务器的通信改成回调的方式,这样Activity就不用不停的监控有没有返回数据啦,代码看上去也清爽了不少,直接上代码。完整的代码已经上传到GitHub

ServiceHelper.java

其中ServiceCallback.onSuccess接口返回成功

ServiceCallback.onFailure接口返回失败可以给用户一些错误提示。

package cn.cloudfk.taoalbum.callback;

import android.util.Log;

import cn.cloudfk.taoalbum.data.dto.ResultData;
import cn.cloudfk.taoalbum.utils.HttpAssist;
import cn.cloudfk.taoalbum.utils.KitJson;

public class ServiceHelper {

    private static final String TAG = "ServiceHelper";
    public static final String PHOTO_LIST = "photoList";
    public static final String SHOW_PHOTO = "showPhoto";

    public interface ServiceCallback{
        void onSuccess(String service, ResultData ret);
        void onFailure(String service, ResultData ret);
    }

    public static void photoList( final ServiceCallback callback){
        Log.i(TAG,"call photoList.");
        String content = HttpAssist.getInstance().getImgList();
        if (content!=null){
            Log.i(TAG,"content.length="+content.length());
            ResultData ret = KitJson.toResultData(content);
            if (ret!=null){
                Log.i(TAG,"ret.state="+ret.getState());
                if(ret.isSuccess()){
                    callback.onSuccess(PHOTO_LIST,ret);
                    return;
                }
            }
            callback.onFailure(PHOTO_LIST,ret);
        }
    }

    public static void showPhoto(String filename,final ServiceCallback callback){

    }
}

ServerAlbumListActivity.java 图片列表页面改造

package cn.cloudfk.taoalbum.activity;


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleAdapter;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import cn.cloudfk.taoalbum.R;
import cn.cloudfk.taoalbum.callback.ServiceHelper;
import cn.cloudfk.taoalbum.common.IntentUtil;
import cn.cloudfk.taoalbum.data.GlobalData;
import cn.cloudfk.taoalbum.data.dto.ResourceDto;
import cn.cloudfk.taoalbum.data.dto.ResultData;

public class ServerAlbumListActivity extends AppCompatActivity implements ServiceHelper.ServiceCallback {

    private static final String TAG = "ServerAlbumListActivity";
    private List<ResourceDto> resList = null;
    List<Map<String, String>> list;
    ListView photoListView;
    ServiceHelper.ServiceCallback callback;
    Activity context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_server_album_list);
        photoListView = findViewById(R.id.server_listView);
        callback = this;
        context = this;
        Log.i(TAG,"ServerAlbumListActivity.onCreate");
        photoListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
                Map<String, String> map = list.get(arg2);
                String fileName = map.get("fileName");
                Log.i(TAG,"This was selected photo:"+fileName);
                Intent intent = new Intent(GlobalData.context, ServerAlbumViewActivity.class);
                intent.putExtra(IntentUtil.FILENAME_KEY,fileName);
                startActivity(intent);
            }
        });
        new Thread(new Runnable() {
            @Override
            public void run() {
                ServiceHelper.photoList(callback);
            }
        }).start();
    }

    @Override
    public void onSuccess(String service, ResultData ret) {
        Log.i(TAG,"service="+service+".onSuccess");
        if (ServiceHelper.PHOTO_LIST.equals(service)){
            if (ret != null && ret.isSuccess()) {
                if (ret.getData()!=null){
                    resList = ( List<ResourceDto>)ret.getData();
                    if (resList!=null && !resList.isEmpty()) {
                        list = new ArrayList<Map<String, String>>();
                        for (ResourceDto res : resList) {
                            Map<String, String> map = new HashMap<String, String>();
                            map.put("fileName", res.getFileName());
                            Log.i(TAG,"fileName="+res.getFileName());
                            list.add(map);
                        }
                        if (list!=null && !list.isEmpty() ){
                            final SimpleAdapter adapter = new SimpleAdapter(this,list,R.layout.activity_album_ui_img_item,
                                    new String[] { "fileName" },new int[] { R.id.album_ui_img_fileName});
                            context.runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    photoListView.setAdapter(adapter);
                                }
                            });

                        }
                    }
                }
            }
        }
    }

    @Override
    public void onFailure(String service, ResultData data) {
        Log.i(TAG,"service="+service+".onFailure");

    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值