登录注册,第三方登录,recyclerView列表上拉加载,下拉刷新

//依赖

compile 'com.android.support:appcompat-v7:26.+'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
testCompile 'junit:junit:4.12'
compile files('libs/open_sdk_r5886_lite.jar')
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.jcodecraeer:xrecyclerview:1.2.0'
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.google.code.gson:gson:2.8.2'
compile 'com.squareup.okhttp3:okhttp:3.9.0'



//权限


<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />


1.登录注册

主布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.bwei.weektext2lx.MainActivity">

    <Button
        android:id="@+id/login"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="登录"
        android:layout_marginStart="47dp"
        android:layout_marginLeft="47dp"
        android:layout_marginBottom="35dp"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentBottom="true"/>

    <Button
        android:id="@+id/regis"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="注册"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/framelayout"
        android:layout_marginRight="53dp"
        android:layout_marginEnd="53dp"/>

    <FrameLayout
        android:id="@+id/framelayout"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:layout_above="@id/login"/>



</RelativeLayout>

登录布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:id="@+id/ed_user"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:layout_marginTop="28dp"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:hint="请输入用户名"/>

    <EditText
        android:id="@+id/ed_pass"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:layout_marginTop="62dp"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:hint="请输入密码"
        android:layout_below="@+id/ed_user"/>

    <Button
        android:id="@+id/btn_login"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:layout_marginTop="172dp"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/ed_user"
        android:text="登录"/>

</RelativeLayout>
注册布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:id="@+id/ed_user"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:layout_marginTop="28dp"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:hint="请输入用户名"/>

    <EditText
        android:id="@+id/ed_pass"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:layout_marginTop="62dp"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:hint="请输入密码"
        android:layout_below="@+id/ed_user"/>

    <Button
        android:id="@+id/btn_regis"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:layout_marginTop="172dp"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/ed_user"
        android:text="注册"/>

</RelativeLayout>

创建数据库

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * Created by HQ on 2017/11/11.
 */
//创建数据库

public class SQList extends SQLiteOpenHelper {
    public SQList(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL("create table user(name text,pass text)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }
}

 添加,查询方法

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.bwei.weektext2lx.sq.SQList;

/**
 * Created by HQ on 2017/11/11.
 */

public class Dao {

    private final SQList mysqlite;

    public Dao(Context con){
        mysqlite = new SQList(con, "Text", null, 1);

    }
    //数据库查询
    public boolean select(String name,String pass){
        SQLiteDatabase db = mysqlite.getWritableDatabase();
        Cursor cursor = db.rawQuery("select * from user where name= ? and pass = ?", new String[]{name, pass});

        if(cursor.moveToNext()){
            return true;
        }
        return false;

    }
    //数据库添加
    public void insert(String name,String pass){
        SQLiteDatabase db = mysqlite.getWritableDatabase();
        db.execSQL("insert into user values(?,?)",new Object[]{name,pass});
        db.close();
    }
}

 
主Activity

import android.graphics.Color;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;

import com.bwei.weektext2lx.fragment.LoginFragment;
import com.bwei.weektext2lx.fragment.RegisFragment;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private FrameLayout framelayout;
    private Button login;
    private Button regis;
    private LoginFragment loginFragment;
    private RegisFragment regisFragment;
    private FragmentManager sfm;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
        intiFragment();
    }

    private void intiFragment() {
        loginFragment = new LoginFragment();
        regisFragment = new RegisFragment();

        sfm = getSupportFragmentManager();
        sfm.beginTransaction().add(R.id.framelayout,loginFragment).commit();
        sfm.beginTransaction().add(R.id.framelayout, regisFragment).commit();
        sfm.beginTransaction().hide(regisFragment).commit();
    }

    private void initView() {
        framelayout = (FrameLayout) findViewById(R.id.framelayout);
        login = (Button) findViewById(R.id.login);
        regis = (Button) findViewById(R.id.regis);

        login.setOnClickListener(this);
        regis.setOnClickListener(this);
        login.setTextColor(Color.RED);

    }

    @Override
    public void onClick(View view) {
        switch(view.getId()){
            case R.id.login:

                login.setTextColor(Color.RED);
                regis.setTextColor(Color.BLACK);
                sfm.beginTransaction().show(loginFragment).commit();
                sfm.beginTransaction().hide(regisFragment).commit();

                break;

            case R.id.regis:

                login.setTextColor(Color.BLACK);
                regis.setTextColor(Color.RED);
                sfm.beginTransaction().hide(loginFragment).commit();
                sfm.beginTransaction().show(regisFragment).commit();
                break;
        }
    }
}


登录fragment
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.bwei.weektext2lx.MyActivity;
import com.bwei.weektext2lx.R;
import com.bwei.weektext2lx.inter.Ivlogin;
import com.bwei.weektext2lx.presenter.Presenter;

/**
 * Created by HQ on 2017/11/11.
 */

public class LoginFragment extends Fragment implements Ivlogin{

    private View view;
    private EditText ed_user;
    private EditText ed_pass;
    private Button btn_login;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.login_fragment, container, false);
        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        ed_user = (EditText)view.findViewById(R.id.ed_user);
        ed_pass = (EditText)view.findViewById(R.id.ed_pass);
        btn_login = (Button)view.findViewById(R.id.btn_login);
        btn_login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String user = ed_user.getText().toString().trim();
                String pass = ed_pass.getText().toString().trim();
                Presenter presenter = new Presenter(LoginFragment.this ,getActivity());
                boolean b = presenter.checkData(user, pass);
                if(b){
                    presenter.select(user,pass);
                }
            }
        });
    }

    @Override
    public void onSuccess() {

        startActivity(new Intent(getActivity(), MyActivity.class));
    }

    @Override
    public void onFiled() {

        Toast.makeText(getActivity(),"用户名或密码输入有误", Toast.LENGTH_SHORT).show();
    }
}


注册fragment
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.bwei.weektext2lx.R;
import com.bwei.weektext2lx.inter.Ivregis;
import com.bwei.weektext2lx.presenter.Presenter2;

/**
 * Created by HQ on 2017/11/11.
 */

public class RegisFragment extends Fragment implements Ivregis {

    private View view;
    private EditText ed_user;
    private EditText ed_pass;
    private Button btn_regis;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.regis_fragment, container, false);
        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        ed_user = (EditText)view.findViewById(R.id.ed_user);
        ed_pass = (EditText)view.findViewById(R.id.ed_pass);
        btn_regis = (Button)view.findViewById(R.id.btn_regis);
        btn_regis.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String user = ed_user.getText().toString().trim();
                String pass = ed_pass.getText().toString().trim();
                Presenter2 presenter = new Presenter2(RegisFragment.this ,getActivity());
                boolean b = presenter.checkData(user, pass);//验证输入是否合法
                if(b){
                    boolean b1 = presenter.select2(user,pass);//验证用户是否已注册
                    if(!b1) {
                        presenter.insert(user, pass);
                    }
                }
            }
        });
    }

    @Override
    public void onSuccess() {
        Toast.makeText(getActivity(), "注册成功", Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onFiled() {
        Toast.makeText(getActivity(),"用户已注册,请进行登录",Toast.LENGTH_SHORT).show();
    }
}

p层
import android.content.Context;
import android.text.TextUtils;
import android.widget.Toast;

import com.bwei.weektext2lx.Dao.Dao;
import com.bwei.weektext2lx.inter.Ivlogin;

/**
 * Created by HQ on 2017/11/11.
 */

public class Presenter {
    private Ivlogin login;
    private Context context;

    public Presenter(){

    }
    public Presenter(Ivlogin login,Context context){
        this.login=login;
        this.context=context;
    }
    //一个方法
    public boolean checkData(String user,String pass){
        if(TextUtils.isEmpty(user)||TextUtils.isEmpty(pass)){
            Toast.makeText(context,"用户名或密码不能为空", Toast.LENGTH_SHORT).show();
            return false;
        }
        if(pass.length()<6){
            Toast.makeText(context,"密码长度需要大于6",Toast.LENGTH_SHORT).show();
            return false;
        }
        return true;
    }
    public void select(String user,String pass){
        Dao dao = new Dao(context);
        boolean select = dao.select(user, pass);
        if(select){
            login.onSuccess();
            return;
        }else{
            login.onFiled();
            return;
        }
    }

}



import android.content.Context;
import android.text.TextUtils;
import android.widget.Toast;

import com.bwei.weektext2lx.Dao.Dao;
import com.bwei.weektext2lx.inter.Ivregis;

/**
 * Created by HQ on 2017/11/11.
 */

public class Presenter2 {
    private Ivregis ivregis;
    private Context context;

    public Presenter2() {

    }

    public Presenter2(Ivregis ivregis, Context context) {
        this.ivregis = ivregis;
        this.context = context;
    }

    public boolean checkData(String user, String pass) {
        if (TextUtils.isEmpty(user) || TextUtils.isEmpty(pass)) {
            Toast.makeText(context, "用户名或密码不能为空", Toast.LENGTH_SHORT).show();
            return false;
        }
        if (pass.length() < 6) {
            Toast.makeText(context, "密码长度需要大于6", Toast.LENGTH_SHORT).show();
            return false;
        }
        return true;
    }

    public boolean select2(String user, String pass) {
        Dao dao = new Dao(context);
        boolean select = dao.select(user, pass);
        if (select) {//            ivregis.onFiled();
            return true;
        }
        return false;
    }
    public void insert(String user,String pass){
        Dao dao = new Dao(context);
        dao.insert(user,pass);
        ivregis.onSuccess();
    }
}

 登录接口

public interface Ivlogin {

    void onSuccess();
    void onFiled();
}

注册接口
public interface Ivregis {

    void onSuccess();
    void onFiled();
}
 
¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥

2.第三方登录

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.bwei.weektext2lx.MyActivity">

    <RelativeLayout
        android:id="@+id/relativeLayout"
        android:layout_height="50dp"
        android:layout_width="match_parent"
        android:background="#DDDDDD"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true">

        <TextView
            android:id="@+id/textView5"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:textSize="25dp"
            android:layout_marginTop="5dp"
            android:text=""/>

        <TextView
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:textSize="25dp"
            android:layout_marginTop="5dp"
            android:text="首页"
            android:layout_marginLeft="200dp"/>

        <TextView
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:textSize="25dp"
            android:layout_marginTop="5dp"
            android:text=""
            android:layout_marginLeft="430dp"/>

    </RelativeLayout>
    <FrameLayout
        android:id="@+id/framelayout"
        android:layout_height="500dp"
        android:layout_width="match_parent"
        android:layout_below="@id/relativeLayout"/>

    <TextView
        android:id="@+id/textView9"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:textSize="20dp"
        android:text="个人中心"
        android:layout_marginLeft="39dp"
        android:layout_alignParentBottom="true"
        android:layout_marginStart="39dp"
        android:layout_marginBottom="44dp"/>

    <TextView
        android:id="@+id/textView10"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:textSize="20dp"
        android:text="列表"
        android:layout_alignEnd="@+id/textView12"
        android:layout_alignRight="@+id/textView12"
        android:layout_alignBottom="@+id/textView9"
        android:layout_alignBaseline="@+id/textView9"
        android:layout_marginEnd="23dp"
        android:layout_marginRight="23dp"/>

    <TextView
        android:id="@+id/textView11"
        android:layout_height="3dp"
        android:layout_width="100dp"
        android:background="#10c8e4"
        android:layout_below="@+id/textView10"
        android:layout_alignStart="@+id/textView9"
        android:layout_alignLeft="@+id/textView9"/>

    <TextView
        android:id="@+id/textView12"
        android:layout_height="3dp"
        android:layout_width="100dp"
        android:background="#10c8e4"
        android:layout_below="@+id/textView11"
        android:layout_marginEnd="69dp"
        android:layout_marginRight="69dp"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"/>

</RelativeLayout>



<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:id="@+id/editText3"
        android:layout_height="wrap_content"
        android:layout_width="100dp"
        android:textSize="25dp"
        android:layout_toRightOf="@+id/textView"
        android:layout_toEndOf="@+id/textView"
        android:layout_alignBottom="@+id/textView"/>

    <EditText
        android:id="@+id/editText2"
        android:layout_height="wrap_content"
        android:layout_width="100dp"
        android:textSize="25dp"
        android:layout_toRightOf="@+id/textView3"
        android:layout_toEndOf="@+id/textView3"
        android:layout_alignBottom="@+id/textView3"
        android:layout_alignBaseline="@+id/textView3"/>

    <TextView
        android:id="@+id/textView2"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:textSize="25dp"
        android:layout_toStartOf="@+id/editText3"
        android:layout_toLeftOf="@+id/editText3"
        android:layout_below="@+id/imageView"
        android:text="姓名"
        android:layout_marginTop="49dp"/>

    <ImageView
        android:id="@+id/imageView"
        android:layout_height="100dp"
        android:layout_width="100dp"
        android:layout_centerHorizontal="true"
        android:layout_alignParentTop="true"
        app:srcCompat="@mipmap/ic_launcher"/>

    <TextView
        android:id="@+id/textView"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:textSize="25dp"
        android:layout_below="@+id/textView2"
        android:text="等级"
        android:layout_marginTop="37dp" />

    <TextView
        android:id="@+id/textView3"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:textSize="25dp"
        android:layout_below="@+id/textView"
        android:text="地址"
        android:layout_marginTop="35dp"
        android:layout_alignStart="@+id/textView"
        android:layout_alignLeft="@+id/textView"/>

    <EditText
        android:id="@+id/editText"
        android:layout_height="wrap_content"
        android:layout_width="100dp"
        android:textSize="25dp"
        android:layout_toRightOf="@+id/textView2"
        android:layout_toEndOf="@+id/textView2"
        android:layout_alignBottom="@+id/textView2"/>

    <Button
        android:id="@+id/btn_login"
        android:layout_height="wrap_content"
        android:layout_width="100dp"
        android:text="QQ登录"
        android:layout_alignEnd="@+id/imageView"
        android:layout_alignRight="@+id/imageView"
        android:layout_alignParentBottom="true"
        android:layout_marginEnd="36dp"
        android:layout_marginRight="36dp"
        android:layout_marginBottom="65dp"/>

</RelativeLayout>



<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.jcodecraeer.xrecyclerview.XRecyclerView
        android:id="@+id/xrecyclerview"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </com.jcodecraeer.xrecyclerview.XRecyclerView>

</LinearLayout>


去 http://blog.csdn.net/Android___vv/article/details/78488146

导jar包
依赖
  1. compile files('libs/open_sdk_r5886_lite.jar')  
  2. compile fileTree(include: ['*.jar'], dir: 'libs'
权限

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.bwei.weektext2lx">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!-- 注册SDKActivity -->
        <activity
            android:name="com.tencent.tauth.AuthActivity"
            android:launchMode="singleTask"
            android:noHistory="true">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data android:scheme="tencent1105602574" />
                <!-- 开放平台获取的APPID -->
            </intent-filter>
        </activity>
        <activity
            android:name="com.tencent.connect.common.AssistActivity"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />
        <activity android:name=".MyActivity"></activity>
    </application>

</manifest>


import android.support.v4.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.TextView;

import com.bwei.weektext2lx.fragment.MyFragment;
import com.bwei.weektext2lx.fragment.ReFragment;

public class MyActivity extends AppCompatActivity implements View.OnClickListener {

    private TextView tv_my;
    private TextView tv_list;
    private TextView tv1;
    private TextView tv2;
    private FrameLayout framelayout;
    private MyFragment myfragment;
    private ReFragment refragment;
    private FragmentManager sfm;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);

        initView();
        initFragment();
        tv_my.setOnClickListener(this);
        tv_list.setOnClickListener(this);
    }

    private void initFragment() {
        tv2.setVisibility(View.INVISIBLE);
        myfragment = new MyFragment();
        refragment = new ReFragment();
        sfm = getSupportFragmentManager();
        sfm.beginTransaction().add(R.id.framelayout, myfragment).commit();
        sfm.beginTransaction().add(R.id.framelayout, refragment).commit();
        sfm.beginTransaction().hide(refragment).commit();
    }

    private void initView() {

        tv_my = (TextView)findViewById(R.id.textView9);
        tv_list = (TextView)findViewById(R.id.textView10);
        tv1 = (TextView)findViewById(R.id.textView11);
        tv2 = (TextView)findViewById(R.id.textView12);
        framelayout = (FrameLayout)findViewById(R.id.framelayout);
    }

    @Override
    public void onClick(View view) {
        switch(view.getId()){
            case R.id.textView9:

                tv1.setVisibility(View.VISIBLE);
                tv2.setVisibility(View.INVISIBLE);
                sfm.beginTransaction().show(myfragment).commit();
                sfm.beginTransaction().hide(refragment).commit();
                break;
            case R.id.textView10:

                tv1.setVisibility(View.INVISIBLE);
                tv2.setVisibility(View.VISIBLE);
                sfm.beginTransaction().show(refragment).commit();
                sfm.beginTransaction().hide(myfragment).commit();
                break;
        }

    }
}


import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;

import com.bwei.weektext2lx.R;
import com.tencent.connect.UserInfo;
import com.tencent.connect.auth.QQToken;
import com.tencent.connect.common.Constants;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.Tencent;
import com.tencent.tauth.UiError;

import org.json.JSONException;
import org.json.JSONObject;

/**
 * Created by 壹颗大金星 on 2017/11/11.
 */

public class MyFragment extends Fragment{

    private View view;
    private Button btn_login;
    private static final String TAG = "MainActivity";
    private static final String APP_ID = "1105602574";//官方获取的APPID
    private Tencent mTencent;
    private BaseUiListener mIUiListener;
    private UserInfo mUserInfo;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.my_fragment, container, false);
        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        mTencent = Tencent.createInstance(APP_ID,getActivity().getApplicationContext());

        btn_login = (Button)view.findViewById(R.id.btn_login);
        btn_login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mIUiListener = new BaseUiListener();
                //all表示获取所有权限
                mTencent.login(getActivity(), "all", mIUiListener);
            }
        });
    }

    private class BaseUiListener implements IUiListener {

        @Override
        public void onComplete(Object response) {
            Toast.makeText(getActivity(), "授权成功", 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(getActivity().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(getActivity(), "授权失败", Toast.LENGTH_SHORT).show();

        }

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

        }

    }

    @Override
    public void  onActivityResult(int requestCode, int resultCode, Intent data) {
        if(requestCode == Constants.REQUEST_LOGIN){
            Tencent.onActivityResultData(requestCode,resultCode,data,mIUiListener);
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

}

¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥4


recyclerView


import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.bwei.weektext2lx.R;
import com.bwei.weektext2lx.adapter.XRAdapter;
import com.bwei.weektext2lx.bean.Bean;
import com.bwei.weektext2lx.bean.ListBean;
import com.bwei.weektext2lx.http.CallBack;
import com.bwei.weektext2lx.http.HttpUtils;
import com.jcodecraeer.xrecyclerview.ProgressStyle;
import com.jcodecraeer.xrecyclerview.XRecyclerView;

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

/**
 * Created by 壹颗大金星 on 2017/11/11.
 */

public class ReFragment extends Fragment{


    private List<ListBean> list;
    private View view;
    private XRecyclerView xrecyclerview;
    private XRAdapter xrAdapter;
    private int i=0;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.re_fragment, container, false);
        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        //获取id
        xrecyclerview = (XRecyclerView)view.findViewById(R.id.xrecyclerview);
        //设置可上拉
        xrecyclerview.setPullRefreshEnabled(true);
        xrecyclerview.setLoadingMoreEnabled(true);
        //设置上拉下拉样式
        xrecyclerview.setRefreshProgressStyle(ProgressStyle.BallSpinFadeLoader);
        xrecyclerview.setLaodingMoreProgressStyle(ProgressStyle.BallClipRotate);
        // 线性布局管理器   VERTICAL默认样式/竖向显示       第三个参数是数据是否到过来显示
        LinearLayoutManager manager = new LinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL,false);
        //添加布局管理器
        xrecyclerview.setLayoutManager(manager);
        //创建数据集合
        list = new ArrayList<>();
        //设置适配器
        xrAdapter = new XRAdapter(getActivity(), list);
        xrecyclerview.setAdapter(xrAdapter);
        //设置监听
        xrecyclerview.setLoadingListener(new XRecyclerView.LoadingListener() {
            @Override
            public void onRefresh() {
                i=0;
                list.clear();
                loaddata(i);
                xrecyclerview.refreshComplete();
            }

            @Override
            public void onLoadMore() {
                i++;
                loaddata(i);
                xrecyclerview.loadMoreComplete();
            }
        });
        //加载数据
        loaddata(i);
    }

    private void loaddata(int i) {
        Map<String, String> map = new HashMap<>();
        HttpUtils.getInstance().get("http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.billboard.billList&type=1&size=10&offset="+i,map,new CallBack(){

            @Override
            public void onSuccess(Object o) {
                Bean bean = (Bean)o;
                List<Bean.SongListBean> song_list = bean.getSong_list();
                for(int i=0;i<song_list.size();i++){
                    list.add(new ListBean(song_list.get(i).getAlbum_1000_1000(),song_list.get(i).getAuthor()));
                }
                xrAdapter.notifyDataSetChanged();
            }

            @Override
            public void onFailed(Exception e) {

            }
        },Bean.class);
    }
}
 
http包三个类

import android.os.Handler;
import android.util.Log;

import com.google.gson.Gson;

import java.io.IOException;
import java.util.Map;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

/**
 * Created by 壹颗大金星 on 2017/11/9.
 */

public class HttpUtils {
    private static volatile HttpUtils instance;

    private static Handler handler = new Handler();

    private HttpUtils(){

    }
    public static HttpUtils getInstance() {
        if (instance == null) {
            synchronized (HttpUtils.class) {
                if (instance == null) {
                    instance = new HttpUtils();
                }
            }
        }
        return instance;
    }
    //get请求
    public void get(String url, Map<String,String> map, final CallBack callBack, final Class c){
        //url和参数做拼接处理
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append(url);
        //判断是否存在?   if中是存在
        if(stringBuffer.indexOf("?")!=-1 ){
            //判断?是否在最后一位    if中是不在最后一位
            if(stringBuffer.indexOf("?")!=stringBuffer.length()-1){
                stringBuffer.append("&");
            }
        }else{
            stringBuffer.append("?");
        }
        for(Map.Entry<String,String> entry:map.entrySet()){
            stringBuffer.append(entry.getKey())
                    .append("=")
                    .append(entry.getValue())
                    .append("&");
        }
        //判断是否存在&   if中是存在
        if(stringBuffer.indexOf("&")!=-1){
            stringBuffer.deleteCharAt(stringBuffer.lastIndexOf("&"));
        }

        //1:创建OkHttpClient对象
        OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(new LoggingInterceptor()).build();
        //2:创建Request对象
        final Request request = new Request.Builder()
                .get()
                .url(stringBuffer.toString())
                .build();
        //3:创建Call对象
        Call call = okHttpClient.newCall(request);
        //4:请求网络
        call.enqueue(new Callback() {
            //请求失败
            @Override
            public void onFailure(Call call, final IOException e) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        callBack.onFailed(e);
                    }
                });
            }
            //请求成功
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String result = response.body().string();
                Log.e("TAG",result.toString());
                //拿到数据解析
                final Object o = new Gson().fromJson(result, c);
                //当前是在子线程,回到主线程中
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        //回调
                        callBack.onSuccess(o);
                    }
                });
            }
        });

    }
    //post请求
    public void post(String url, Map<String,String> map, final CallBack callBack, final Class c){
        //1:创建OkHttpClient对象
        OkHttpClient okHttpClient = new OkHttpClient();
        //2:提供post请求需要的body对象
        FormBody.Builder builder = new FormBody.Builder();
        for(Map.Entry<String,String> entry:map.entrySet()){
            builder.add(entry.getKey(),entry.getValue());
        }
        FormBody body = builder.build();
        //3:创建Request对象
        final Request request = new Request.Builder()
                .post(body)
                .url(url)
                .build();
        //4:创建Call对象
        Call call = okHttpClient.newCall(request);
        //5:请求网络
        call.enqueue(new Callback() {
            //请求失败
            @Override
            public void onFailure(Call call, final IOException e) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        callBack.onFailed(e);
                    }
                });
            }
            //请求成功
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String result = response.body().string();
                //拿到数据解析
                final Object o = new Gson().fromJson(result, c);
                //当前是在子线程,回到主线程中
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        //回调
                        callBack.onSuccess(o);
                    }
                });
            }
        });
    }

}
接口
public interface CallBack {
    void onSuccess(Object o);
    void onFailed(Exception e);
}

拦截器

import android.os.Build;

import java.io.IOException;

import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;

/**
 * Created by HQ on 2017/11/12.
 */

public class LoggingInterceptor implements Interceptor{
    private static final String UA = "User-Agent";
    @Override
    public Response intercept(Chain chain) throws IOException {
        Request request = chain.request()
                .newBuilder()
                .addHeader(UA, makeUA())
                .build();
        return chain.proceed(request);
    }

    private String makeUA() {
        String s = Build.BRAND + "/" + Build.MODEL + "/" + Build.VERSION.RELEASE;
        return Build.BRAND + "/" + Build.MODEL + "/" + Build.VERSION.RELEASE;
    }
}

bean包

public class SQBean {
    private String name;
    private String pass;

    public SQBean(String name, String pass) {
        this.name = name;
        this.pass = pass;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPass() {
        return pass;
    }

    public void setPass(String pass) {
        this.pass = pass;
    }
}


public class ListBean {
    private String img;
    private String name;

    public ListBean(String img, String name) {
        this.img = img;
        this.name = name;
    }

    public String getImg() {
        return img;
    }

    public void setImg(String img) {
        this.img = img;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}


bean类自动解析





adapter类




import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.bwei.weektext2lx.R;
import com.bwei.weektext2lx.bean.ListBean;

import java.util.List;

/**
 * Created by HQ on 2017/11/12.
 */

public class XRAdapter extends RecyclerView.Adapter<XRAdapter.ViewHolder> {

    private Context context;
    private List<ListBean> list;

    public XRAdapter(Context context, List<ListBean> list){
         this.context  = context;
        this.list=list;
    }
    //创建ViewHolder

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        //子条目布局
        View view = View.inflate(context, R.layout.item, null);
        ViewHolder holder = new ViewHolder(view);
        return holder;
    }

    //绑定ViewHolder,把数据和视图进行绑定
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        Glide.with(context).load(list.get(position).getImg()).into(holder.image);
        holder.tv_title.setText(list.get(position).getName());
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    class ViewHolder extends RecyclerView.ViewHolder{

        private final ImageView image;
        private final TextView tv_title;

        public ViewHolder(View itemView) {
            
            super(itemView);
            //itemView一个条目的视图
            image = (ImageView)itemView.findViewById(R.id.image);
            tv_title = (TextView)itemView.findViewById(R.id.tv_title);
        }
    }
}











  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值