权限--写在AndroidManifest.xml文件里
<uses-permission android:name="android.permission.INTERNET"/>
依赖--写在build.gradle(app)里
implementation 'com.squareup.okhttp3:okhttp:3.8.1'
implementation 'com.google.code.gson:gson:2.8.1'
implementation 'com.squareup.picasso:picasso:2.3.2'
布局文件
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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.example.examtwo.MainActivity">
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ListView>
</android.support.constraint.ConstraintLayout>
activity_login.xml
<?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"
android:orientation="vertical"
android:gravity="center"
android:padding="40dp"
tools:context="com.example.examtwo.LoginActivity">
<AutoCompleteTextView
android:id="@+id/account"
android:hint="请输入账号"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<EditText
android:id="@+id/password"
android:layout_marginTop="10dp"
android:layout_below="@id/account"
android:layout_alignLeft="@id/account"
android:hint="请输入密码"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<LinearLayout
android:id="@+id/line1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/password"
android:layout_alignLeft="@id/password"
android:layout_marginTop="10dp"
>
<CheckBox
android:id="@+id/auto_login"
android:text="自动登录"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<CheckBox
android:id="@+id/remeber_password"
android:text="记住密码"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/find_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="找回密码"
/>
</LinearLayout>
<Button
android:id="@+id/login"
android:text="登录"
android:layout_marginTop="10dp"
android:background="@android:color/holo_blue_bright"
android:layout_below="@id/line1"
android:layout_alignLeft="@id/line1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</RelativeLayout>
autocomplettextview_item_layout.xml
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/autocompletetextview_content"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
listview_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
>
<ImageView
android:id="@+id/iamge"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
主代码
MainActivity
public class MainActivity extends AppCompatActivity {
private ListView list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
Intent intent = getIntent();
String accountString = intent.getStringExtra("accountString");
String passwordString = intent.getStringExtra("passwordString");
Javabean javabean = (Javabean) intent.getSerializableExtra("javabean");
//为ListView绑定适配器
ListViewAdapter listViewAdapter = new ListViewAdapter(MainActivity.this, javabean);
list.setAdapter(listViewAdapter);
//为ListView添加点击事件
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
final AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
}).setPositiveButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
}).create();
alertDialog.setTitle("提醒");
alertDialog.setMessage("Jijijij");
alertDialog.show();
}
});
}
private void initView() {
list = (ListView) findViewById(R.id.list);
}
//为ListView创建适配器
class ListViewAdapter extends BaseAdapter {
private Context context;
Javabean javabean;
public ListViewAdapter(Context context, Javabean javabean) {
this.context = context;
this.javabean = javabean;
}
@Override
public int getCount() {
return javabean.getData().size();
}
@Override
public Object getItem(int position) {
return javabean.getData().get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//优化,复用convertView
ViewHolder viewHolder = null;
Javabean.DataBean dataBean = javabean.getData().get(position);
String pic = dataBean.getPic();
String title = dataBean.getTitle();
if (convertView == null) {//如果convertView不存在就创建一个convertView实例
LayoutInflater layoutInflater = LayoutInflater.from(context);
View inflate = layoutInflater.inflate(R.layout.listview_item, null);
convertView = inflate;
/*ImageView iamge = convertView.findViewById(R.id.iamge);
TextView text = convertView.findViewById(R.id.text);
Picasso.with(context).load(pic).into(iamge);
text.setText(title);*/
//创建viewHolder
viewHolder = new ViewHolder(context, convertView);
//将viewHolder保存到convertView中
convertView.setTag(viewHolder);
}else {//直接使用已经存储的convertView
viewHolder = (ViewHolder) convertView.getTag();
ImageView imageView = viewHolder.imageView;
TextView textView = viewHolder.textView;
Picasso.with(context).load(pic).into(imageView);
textView.setText(title);
}
/* Javabean.DataBean dataBean = javabean.getData().get(position);
String pic = dataBean.getPic();
String title = dataBean.getTitle();
LayoutInflater layoutInflater = LayoutInflater.from(context);
View inflate = layoutInflater.inflate(R.layout.listview_item, null);
ImageView iamge = inflate.findViewById(R.id.iamge);
TextView text = inflate.findViewById(R.id.text);
Picasso.with(context).load(pic).into(iamge);
text.setText(title);*/
return convertView;
}
}
class ViewHolder extends View {
ImageView imageView;
TextView textView;
public ViewHolder(Context context ,View view) {
super(context);
imageView = view.findViewById(R.id.iamge);
textView = view.findViewById(R.id.text);
}
}
}
Javabean
----如果接口不一样,接口在网页打开复制内容,然后Alt+s粘贴进去 自动生成
public class Javabean implements Serializable{
private int ret;
private List<DataBean> data;
public int getRet() {
return ret;
}
public void setRet(int ret) {
this.ret = ret;
}
public List<DataBean> getData() {
return data;
}
public void setData(List<DataBean> data) {
this.data = data;
}
public static class DataBean implements Serializable{
/**
* id : 8289
* title : 油焖大虾
* pic : http://www.qubaobei.com/ios/cf/uploadfile/132/9/8289.jpg
* collect_num : 1660
* food_str : 大虾 葱 生姜 植物油 料酒
* num : 1660
*/
private String id;
private String title;
private String pic;
private String collect_num;
private String food_str;
private int num;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getPic() {
return pic;
}
public void setPic(String pic) {
this.pic = pic;
}
public String getCollect_num() {
return collect_num;
}
public void setCollect_num(String collect_num) {
this.collect_num = collect_num;
}
public String getFood_str() {
return food_str;
}
public void setFood_str(String food_str) {
this.food_str = food_str;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
}
LoginActivity
public class LoginActivity extends AppCompatActivity implements View.OnClickListener {
private AutoCompleteTextView account;
private EditText password;
private CheckBox auto_login;
private CheckBox remeber_password;
private TextView find_password;
private Button login;
List<String> dataSource = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
initView();
}
private void initView() {
account = (AutoCompleteTextView) findViewById(R.id.account);
password = (EditText) findViewById(R.id.password);
auto_login = (CheckBox) findViewById(R.id.auto_login);
remeber_password = (CheckBox) findViewById(R.id.remeber_password);
find_password = (TextView) findViewById(R.id.find_password);
login = (Button) findViewById(R.id.login);
login.setOnClickListener(this);
for (int i = 0; i < 10; i++) {
dataSource.add("121947724" +i);
}
//为AutoCompleteTextView绑定适配器
/* AutoCompleteTextViewAdapter autoCompleteTextViewAdapter = new AutoCompleteTextViewAdapter(LoginActivity.this, dataSource);
account.setAdapter(autoCompleteTextViewAdapter);*/
// SimpleAdapter simpleAdapter = new SimpleAdapter()
// ArrayAdapter(@NonNull Context context, @LayoutRes int resource,@NonNull List<T> objects)
ArrayAdapter arrayAdapter = new ArrayAdapter(LoginActivity.this, R.layout.autocomplettextview_item_layout, dataSource);
account.setAdapter(arrayAdapter);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.login:
// submit();
// validate
new Thread(new Runnable() {
@Override
public void run() {
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder().url("http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1").build();
try {
final String accountString = account.getText().toString().trim();
if (TextUtils.isEmpty(accountString)) {
Looper.prepare();
Toast.makeText(LoginActivity.this, "请输入账号", Toast.LENGTH_SHORT).show();
Looper.loop();
return;
}
final String passwordString = password.getText().toString().trim();
if (TextUtils.isEmpty(passwordString)) {
Looper.prepare();
Toast.makeText(LoginActivity.this, "请输入密码", Toast.LENGTH_SHORT).show();
Looper.loop();
return;
}
Response execute = okHttpClient.newCall(request).execute();
ResponseBody body = execute.body();
byte[] bytes = body.bytes();
String result = new String(bytes);
Gson gson = new Gson();
Javabean javabean = gson.fromJson(result, Javabean.class);
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
intent.putExtra("accountString", accountString);
intent.putExtra("passwordString", passwordString);
intent.putExtra("javabean", javabean);
startActivity(intent);
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
break;
}
}
private void submit() {
// validate
String passwordString = password.getText().toString().trim();
if (TextUtils.isEmpty(passwordString)) {
Toast.makeText(this, "请输入密码", Toast.LENGTH_SHORT).show();
return;
}
String accountString = account.getText().toString().trim();
if (TextUtils.isEmpty(accountString)) {
Toast.makeText(this, "请输入账号", Toast.LENGTH_SHORT).show();
return;
}
// TODO validate success, do something
}
/*//自定义AutoCompleteTextView的适配器
class AutoCompleteTextViewAdapter extends ListAdapter {
private Context context;
private List<String> dataSource;
public AutoCompleteTextViewAdapter(Context context, List<String> dataSource) {
this.context = context;
this.dataSource = dataSource;
}
@Override
public int getCount() {
return dataSource.size();
}
@Override
public Object getItem(int position) {
return dataSource.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater layoutInflater = LayoutInflater.from(context);
View inflate = layoutInflater.inflate(R.layout.autocomplettextview_item_layout, null);
TextView autocompletetextview_content = inflate.findViewById(R.id.autocompletetextview_content);
autocompletetextview_content.setText(dataSource.get(position));
return inflate;
}
}*/
}