//依赖
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) { } } 添加,查询方法登录fragmentimport 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(); } }主Activityimport 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; } } }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(); } }
注册fragmentimport 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包
依赖
权限
- compile files('libs/open_sdk_r5886_lite.jar')
- 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 recyclerViewhttp包三个类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); } }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); } 拦截器bean包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; } }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); } } }