基于LeanCloud Restful API的Retrofit编程
BaaS提供商LeanCloud提供了Restful API,没有提供Retrofit使用教程。
- 注册用户
注册API设计:
1 | curl -X POST \ |
登录API设计:
1 | curl -X POST \ |
WP
BaaS提供商LeanCloud提供了Restful API,没有提供Retrofit使用教程。
注册API设计:
1 | curl -X POST \ |
登录API设计:
1 | curl -X POST \ |
当涉及到Android上的依赖注入(DI)类库的时候,存在不少的选择,我在公司项目中用了RoboGuice,现在非常后悔。最开始认为RoboGuice节约了大量的时间。较少的代码意味着较少的错误,较少的样板代码意味着可以把更多的时间放到应用的核心逻辑上。
比较 | RoboGuice | ButterKnife |
---|---|---|
所需的最少jar包 | 3 (roboguice-2.0.jar, javax.inject-1.jar and guice-3.0-no_aop.jar) | 1 (butterknife-4.0.1.jar) |
是否需要替代Activity | 需要,RoboActivity替代Activity | 不需要 |
与ActionBarSherlock的兼容性 | 兼容,需添加roboguice-sherlock-1.5.jar包到应用并且用RoboSherlockActivity替换SherlockActivity | 兼容,不需要额外jars包 |
单击监听器的注入 | 不支持 | 支持 |
性能 | 运行时采取反射机制有性能影响 | 没有采取反射而使用了预编译技术,因为基于反射的DI非常占用资源和耗时 |
POJO注入 | 支持 | 不支持 |
Fragments注入 | 支持 | 支持 |
适配器注入 | 不支持 | 支持 |
代码协议 | Apache License 2.0 | Apache License 2.0 |
链接 | Rroboguice Link | Butterknife Link |
宿主 Activity 实现 Fragment 定义的对外接口 IOneFragmentClickListener,便可以实现 Fragment 调用 Activity 的功能。
public class OneFragment extends Fragment implements View.OnClickListener{
private IOneFragmentClickListener clickListener;
public interface IOneFragmentClickListener{
void onOneFragmentClick();
}
public void setClickListener(IOneFragmentClickListener clickListener) {
this.clickListener = clickListener;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View contentView = inflater.inflate(R.layout.fragment_one, null);
contentView.findViewById(R.id.edt_one).setOnClickListener(this);
return contentView;
}
@Override
public void onClick(View v) {
clickListener.onOneFragmentClick();
}
}
准备三个工具:Apktool、dex2jar、jd-gui
下载:downloads
安装:install
**Windows:**
1.Download Windows wrapper script (Right click, Save Link As apktool.bat)
2.Download apktool-2 (find newest here)
3.Rename downloaded jar to apktool.jar
4.Move both files (apktool.jar & apktool.bat) to your Windows directory (Usually C://Windows)
5.If you do not have access to C://Windows, you may place the two files anywhere then add that directory to your Environment Variables System PATH variable.
6.Try running apktool via command prompt
代码:
print(b'ABC'.decode('ascii'))
print( b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8'))
输出:
解决方法:
import io
import sys
#改变标准输出的默认编码
sys.stdout=io.TextIOWrapper(sys.stdout.buffer,encoding='utf8')
输出:
即可。
在Java中,非静态内部类会在其整个生命周期中持有对它外部类的强引用。
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new MyAsyncTask(this).execute();
}
private class MyAsyncTask extends AsyncTask {
@Override
protected Object doInBackground(Object[] params) {
// 模拟耗时任务
try {
Thread.sleep(60000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return doSomeStuff();
}
private Object doSomeStuff() {
return new Object();
}
@Override
protected void onPostExecute(Object object) {
super.onPostExecute(object);
// 更新UI
}
}
}
String downUrl = "http://downloads.jianshu.io/apps/haruki/JianShu-1.11.2.apk";
/**获得系统下载器*/
DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
/**设置下载地址*/
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(downUrl));
/**设置下载文件的类型*/
request.setMimeType("application/vnd.android.package-archive");
/**设置下载存放的文件夹和文件名字*/
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "JianShu-1.11.2.apk");
/**设置下载时或者下载完成时,通知栏是否显示*/
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setTitle("Download");
/**执行下载,并返回任务唯一id*/
long enqueue = dm.enqueue(request);
values/styles.xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<!-- Customize your theme here. -->
</style>
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
</resources>
android {
compileSdkVersion 21
buildToolsVersion "21.0.0"
defaultConfig {
applicationId "com.way.material"
minSdkVersion 14
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
...
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.+'
}