文末会说: 这人需求很随意,说话就有点..
二开一定要确保app正常使用,否则就是无底洞
项目结构挺大的电脑加载会很卡,导致第一次build大概半小时,尝试运行,能build success,但是服务器连接失败
找客户要后端接口,客户应该不怎么懂技术,后面丢了服务器信息,在opt
目录下找到的一些jar包,后面再根据客户提供的一个web界面找到的接口
总结:别跟客户扯太久,到这里已经花了两小时了
谈价方面 对市场价把握不清,没资本家的角度去看价格,最终要价600
开始修改代码,根据代码逻辑,因为这个app是一个mvp的架构,封装的有点过了(或者是就应该这样封装,倒是代码并不怎么好修改)
最终修改的代码
package com.tiocloud.chat.feature.session.common.action.model.base;
import com.tiocloud.chat.feature.session.common.SessionFragment;
import com.tiocloud.chat.feature.session.common.model.SessionContainer;
public abstract class BaseMessageAction extends BaseAction{
private transient SessionContainer sessionContainer;
public transient SessionFragment fragment;
public SessionContainer getSessionContainer() {
return sessionContainer;
}
public void setSessionContainer(SessionContainer sessionContainer) {
this.sessionContainer = sessionContainer;
}
public BaseMessageAction(int iconResId, int titleId) {
super(iconResId, titleId);
}
}
package com.tiocloud.chat.feature.session.common.action.model;
import android.app.AlertDialog;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import com.blankj.utilcode.util.SPUtils;
import com.tiocloud.chat.R;
import com.tiocloud.chat.feature.session.common.action.model.base.BaseMessageAction;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class FavoriteAction extends BaseMessageAction {
public FavoriteAction() {
super(R.drawable.icon_im_yuyin, R.string.favorite);
}
@Override
public void onClick() {
LinearLayout linearLayoutMain = new LinearLayout(fragment.getActivity());// 自定义一个布局文件
linearLayoutMain.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
ListView listView = new ListView(fragment.getActivity());
listView.setFadingEdgeLength(0);
List<Map<String, String>> nameList = new ArrayList<Map<String, String>>();
Set<String> favorite = SPUtils.getInstance().getStringSet("favorite");
for (String s : favorite) {
nameList.add(new HashMap<String, String>() {{
put("name", s);
}});
}
SimpleAdapter adapter = new SimpleAdapter(fragment.getActivity(), nameList,
R.layout.favorite_item, new String[]{"name"},
new int[]{R.id.message});
listView.setAdapter(adapter);
linearLayoutMain.addView(listView);
AlertDialog show = new AlertDialog.Builder(fragment.getActivity())
.setTitle("发送收藏").setView(linearLayoutMain)
// 在这里把写好的这个listview的布局加载dialog中
.setNegativeButton("取消", (dialog1, which) -> {
dialog1.cancel();
}).show();
listView.setOnItemClickListener((adapterView, view, i, l) -> {
getSessionContainer().proxy.sendMessage(nameList.get(i).get("name"));
show.cancel();
});
listView.setOnItemLongClickListener((adapterView, view, i, l) -> {
String name = nameList.get(i).get("name");
Toast.makeText(fragment.getActivity(), "删除成功", Toast.LENGTH_SHORT).show();
Set<String> favoriteSet = SPUtils.getInstance().getStringSet("favorite");
HashSet<String> objects = new HashSet<>(favoriteSet);
//移除
nameList.remove(i);
adapter.notifyDataSetChanged();
objects.remove(name);
return true;
});
}
}
BaseAction action = actions.get(i);
if (action instanceof BaseUploadAction) {
BaseUploadAction uploadAction = (BaseUploadAction) action;
uploadAction.fragment = fragment;
} else if (action instanceof BaseCardAction) {
BaseCardAction cardAction = (BaseCardAction) action;
SessionActivity sessionActivity = fragment.getSessionActivity();
cardAction.activity = sessionActivity;
cardAction.sessionType = sessionActivity.getSessionType();
cardAction.chatLinkIds = chatLinkIds;
} else if (action instanceof BaseCallAction) {
BaseCallAction baseCallAction = (BaseCallAction) action;
if (fragment.getActivity() instanceof P2PSessionActivity) {
baseCallAction.setP2PActivity((P2PSessionActivity) fragment.getActivity());
}
} else if (action instanceof BaseRedPaperAction) {
BaseRedPaperAction redPaperAction = (BaseRedPaperAction) action;
redPaperAction.activity = fragment.getSessionActivity();
redPaperAction.chatLinkIds = chatLinkIds;
}else if (action instanceof BaseMessageAction){
BaseMessageAction action1 = (BaseMessageAction) action;
SessionContainer container = fragment.getInputPanel().getContainer();
action1.setSessionContainer(container);
action1.fragment = fragment;
}
电脑买高配!!!必须高配,编译一次3分钟,没有任何效率可言
总之就是卡!!!
卡死了
其中其实是有一些改动的,但是都是可接受范围内,无非就是改下增加了一个取消收藏的功能,还算正常
后期改了挺多的,按理来说我上午就已经交付了,后面客户提示变更app名称和图标
总结:不要心软!!!该说加价就说
客户有点点小奇葩
题外话: 别想那么多,别心软要价就行,那你该得的就行
其实app后端服务,app图标,背景图,到ios,早就已经超出了范畴
不知道这篇文章客户能不能看到,反正是很奇葩的,大不了去给差评
鸡汤
曾经走过每段的路程,都会是一种经历,也是一种成长的历练,就是在这样的人生,起起落落,浮浮沉沉,有悲伤,有快乐,有梦想,有目标,始终都没有放弃,心中的信念。