首页 > 技术文章 > 个人技术博客(α)(持续更新)

lijiaqun 2017-11-09 18:55 原文

Android开发和Github的学习

1、android基本控件的使用

<1>button控件
1)基本用法

 <Button
                android:id="@+id/login"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="400dp"
                android:layout_marginLeft="160dp"
                android:text="登录"
                />

2)注册button的监听事件
方法一:采用匿名类注册监听器

public class login1Activity extends AppCompatActivity {    
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);           setContentView(R.layout.activity_login1); 
        Button button = (Button) findViewById(R.id.login);//得到Button的实例
        //注册监听器
        button.setOnClickListener(new View.OnClickListener(){
        public void onClick(View v) {
        //写点击按钮后执行的事件
        }
      });
    }            
 }

方法二:采用接口方法注册监听器

public class login1Activity extends AppCompatActivity implements View.OnClickListener{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login1);
        Button button = (Button) findViewById(R.id.login);
        button.setOnClickListener(this);
        }
        
   public void onClick(View v) {
   //添加相应事件
   }

   
}

<2>TextView
1)基本用法

<TextView
            android:id="@+id/forget_psw"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="忘记密码?"
            android:layout_marginLeft="250dp"
            android:layout_marginTop="460dp"
            android:textColor="#0000ff"//调整字体颜色
            android:textSize="22sp"//调整字体大小
            />

2)注册监听事件

   public class login1Activity extends AppCompatActivity {    
            protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);                                       setContentView(R.layout.activity_login1); 
             TextView forget_psw = (TextView) findViewById(R.id.forget_psw);
        forget_psw.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(login1Activity.this,forgetPasswordActivity.class);
                startActivity(intent);
            }
        });
        }            
     }

下述的控件与上述用法类似
<3>ImageView

 <ImageView
            android:id="@+id/image_view"
            android:layout_width="match_parent"
            android:layout_height="240dp"
            android:layout_marginTop="45dp"
            android:src="@drawable/img1" 
            />

<4>EditText

 <EditText
            android:id="@+id/userName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:hint="用户名/手机号"
            android:layout_marginTop="300dp"
            android:layout_marginLeft="100dp"
            android:ems="10"
            />

2、第三方qq登录的实现

通过百度,大致了解了qq登录的实现
附一个实现的流程:http://blog.csdn.net/SandyRan/article/details/53319846
代码如下:

  public class login1Activity extends AppCompatActivity implements View.OnClickListener{
    private static final String TAG = "login1Activity";
    private static final String APP_ID = "1105602574";//官方获取的APPID
    private Tencent mTencent;
    private BaseUiListener mIUiListener;
    private UserInfo mUserInfo;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login1);                           
        }       
        ////传入参数APPID和全局Context上下文                     
        mTencent = Tencent.createInstance(APP_ID,login1Activity.this.getApplicationContext());
    }
    public void buttonLogin(View v){
        /**通过这句代码,SDK实现了QQ的登录,这个方法有三个参数,第一个参数是context上下文,第二个参数SCOPO 是一个String类型的字符串,表示一些权限
         官方文档中的说明:应用需要获得哪些API的权限,由“,”分隔。例如:SCOPE = “get_user_info,add_t”;所有权限用“all”
         第三个参数,是一个事件监听器,IUiListener接口的实例,这里用的是该接口的实现类 */
        mIUiListener = new BaseUiListener();
        //all表示获取所有权限
        mTencent.login(login1Activity.this,"all", mIUiListener);
    }

    private class BaseUiListener implements IUiListener{

        @Override
        public void onComplete(Object response) {
            Toast.makeText(login1Activity.this, "授权成功", Toast.LENGTH_SHORT).show();
            Log.e(TAG, "response:" + response);
            JSONObject obj = (JSONObject) response;
            try {
                String openID = obj.getString("openid");
                String accessToken = obj.getString("access_token");
                String expires = obj.getString("expires_in");
                mTencent.setOpenId(openID);
                mTencent.setAccessToken(accessToken,expires);
                QQToken qqToken = mTencent.getQQToken();
                mUserInfo = new UserInfo(getApplicationContext(),qqToken);
                mUserInfo.getUserInfo(new IUiListener() {
                    @Override
                    public void onComplete(Object response) {
                        Log.e(TAG,"登录成功"+response.toString());
                    }

                    @Override
                    public void onError(UiError uiError) {
                        Log.e(TAG,"登录失败"+uiError.toString());
                    }

                    @Override
                    public void onCancel() {
                        Log.e(TAG,"登录取消");

                    }
                });
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onError(UiError uiError) {
            Toast.makeText(login1Activity.this, "授权失败", Toast.LENGTH_SHORT).show();

        }

        @Override
        public void onCancel() {
            Toast.makeText(login1Activity.this, "授权取消", Toast.LENGTH_SHORT).show();

        }

    }
    /**
     * 在调用Login的Activity或者Fragment中重写onActivityResult方法
     * @param requestCode
     * @param resultCode
     * @param data
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(requestCode == Constants.REQUEST_LOGIN){
            Tencent.onActivityResultData(requestCode,resultCode,data,mIUiListener);
        }
        super.onActivityResult(requestCode, resultCode, data);
    }
    public void sendRequest(final JSONObject jsonObject){
        new Thread(new Runnable() {
            @Override
            public void run() {
                try{
                    /*
                    OkHttpClient client = new OkHttpClient();
                    RequestBody body = RequestBody.create(JSONObject,jsonObject);
                    Request request = new Request.Builder().url("http://www.baidu.com").post(jsonObject).build();
                    Response response = client.newCall(request).execute();
                    String responseData = response.body().string();
                    showResponse(responseData);
                    */
                }catch(Exception e){
                    e.printStackTrace();
                }
            }
        }).start();
    }
    public void showResponse(final String response){
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(login1Activity.this,response,Toast.LENGTH_LONG).show();
            }
        });
    }

}

3、使用OkHttp进行网络通信

1)在使用OkHttp之前,需要添加OkHttp库的依赖。编辑app/build.gradle文件,在dependencies闭包中添加如下内容:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:26.1.0'
    testCompile 'junit:junit:4.12'
    compile 'com.squareup.okhttp3:okhttp:3.9.0'//这个是OkHttp最新的版本,可进入网页https://github.com/square/okhttp查看最新版本    
}

2)具体用法

  • 1创建OkHttpClient的实例
       OkHttpClient client = new OkHttpClient();
  • 2创建Request对象,为了方便,通过url方法设置目标的网络地址
       Request request = new Request.Builder().url("http://www.baidu.com")build();

      
     上面是GET请求的情况
     如果要发送POST请求,还需先构造出一个RequestBody对象来存放待提交的参数:


       RequestBody requestbody = new FormBody.Builder().add("username","admin").build();  
       Request request = new Request.Builder().url("http://www.baidu.com").post(requestbody).build();
  • 3调用newCall()方法创建一个Call对象,并调用execute()方法来发送请求并获取服务器返回的数据
       Response response = client.newCall(request).execute();
  • 4得到返回具体的内容
       String responseData = response.body().string();

4、github的使用

github的使用主要通过看西瓜学长给的教程学习的,对于项目的fork,clone到本地,创建dev分支,同步以及合并到团队项目有了一定了解,并且自己动手实现了很多次,第四步的同步操作好像一直同步不了,要不就是出现冲突等问题,一直未解决。。。

5、所介绍的技术与团队项目的关系

所介绍的技术基本都是在做团队项目中学习到的,android的基本控件及其使用主要用于界面的实现以及点击跳转页面的实现,第三方登录的实现我们团队项目也有要求实现,okhttp网络编程用于和数据库进行对接的实现,github则是每次做好一项后与团队项目进行合并以及上传到自己仓库要用到。

6、心得体会

原来并没有做过一个项目的经验,一开始做的时候也是一头雾水,对于一些前端,后端之类的概念以及要做什么并不是很清楚,数据库的发送请求和返回数据也很懵,在舍友的解答下慢慢了解了一些。后来也问了学长,在学长的指导下对前端和服务器有了进一步的了解。在做项目的时候会遇到很多问题,比如qq登录的实现百度了很久,耽误了一些时间。通过这次软工实践,对于android开发有了一定认识,可能自己做的没那么好,但至少是一次很好的锻炼。

推荐阅读