[アンドロイド] JSONのtrongのアンドロイド – 一部 4: JavaでJSONを取得する処理

あなた明かします, それのための引当金は、シリーズの最後の部分になります JSONのtrongのアンドロイド. 私たちは、Javaコードの取り扱い注意事項を記述し、最も重要なのは、前節からのJSON出力をとっています.

アップデート: 21/08/2015 – 最適化コード.

私たちのJavaの構造は、次のファイルが含まれて (ファイルの比較的少数のために何がパッケージに分類していません).

java old lover

ライティングクラスコンフィギュレーション, 準備

それは少し紛らわしいと言うが、実際にこれを. 我々はいくつかの特定の値を保存するために、いくつかの定数を必要とする、それがクラスにあります どこ. オブジェクトとの容易な操作のために “かつての恋人” その後、我々は、クラスを持っている必要があります ラヴァー. JSONを下に取得するために、我々はLoadJsonことを労働者階級を必要とします.

建設定数

package cachhoc.net.demojson;

import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.widget.Toast;

public class Var {


    // const for load and put data with server
    public static final String KEY_METHOD = "method";

    public static final String KEY_NICK = "nick";
    public static final String KEY_PASS = "pass";

    public static final String KEY_ID = "id";
    public static final String KEY_NAME = "name";
    public static final String KEY_PHONE = "phone";
    public static final String KEY_BEGIN_DATE = "begin_date";
    public static final String KEY_END_DATE = "end_date";

    public static final String KEY_LOGIN = "login";
    public static final String KEY_REGISTER = "register";
    public static final String KEY_ADD = "add";

    public static final int METHOD_LOGIN = 1;
    public static final int METHOD_REGISTER = 2;
    public static final int METHOD_GET_OLD_LOVER = 3;
    public static final int METHOD_ADD_OLD_LOVER = 4;


    public static void showToast(Context context, String sms) {
        Toast.makeText(context, sms, Toast.LENGTH_SHORT).show();
    }

    // method for save and get nick and pass user

    public static void save(Context context, String key, String value) {
        SharedPreferences.Editor editor = PreferenceManager
                .getDefaultSharedPreferences(context.getApplicationContext())
                .edit();
        editor.putString(key, value);
        editor.apply();
    }

    public static String get(Context context, String key) {
        SharedPreferences settings = PreferenceManager
                .getDefaultSharedPreferences(context.getApplicationContext());
        return settings.getString(key, null);
    }
}

何も混乱していません, 彼のクラスでちょうど私たちが使用することに注意してください SharedPreferences ニックとパスワードを保存するために、ユーザは、後にログインすることを忘れないようにしたい場合. それはまた、多くの場合、設定を保存するために使用され (設定) アプリケーション.

建設クラスの恋人

私たちの恋人になります 5 学校はIDです, 名前, 電話, 日付を開始 (開始日の愛) VA終了日 (デイ別れ).

package cachhoc.net.demojson;

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

public class Lover {
    private int id;
    private String name;
    private String phone;
    private String beginDate;
    private String endDate;

    public Lover() {
    }

    public Lover(int id, String name, String phone, String beginDate, String endDate) {
        this.id = id;
        this.name = name;
        this.phone = phone;
        this.beginDate = beginDate;
        this.endDate = endDate;
    }

    public int getId() {
        return id;
    }

    public Lover setId(int id) {
        this.id = id;
        return this;
    }

    public String getName() {
        return name;
    }

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

    public String getPhone() {
        return phone;
    }

    public Lover setPhone(String phone) {
        this.phone = phone;
        return this;
    }

    public String getBeginDate() {
        return beginDate;
    }

    public Lover setBeginDate(String beginDate) {
        this.beginDate = beginDate;
        return this;
    }

    public String getEndDate() {
        return endDate;
    }

    public Lover setEndDate(String endDate) {
        this.endDate = endDate;
        return this;
    }

    public String toJSON() {
        JSONObject jsonObject = new JSONObject();
        try {
            jsonObject.put(Var.KEY_ID, getId());
            jsonObject.put(Var.KEY_NAME, getName());
            jsonObject.put(Var.KEY_PHONE, getPhone());
            jsonObject.put(Var.KEY_BEGIN_DATE, getBeginDate());
            jsonObject.put(Var.KEY_END_DATE, getEndDate());

            return jsonObject.toString();
        } catch (JSONException e) {
            e.printStackTrace();
            return "";
        }
    }
}

あなたの注意ゲッターは通常、私たちは何と通常値を払っていません 公共のボイド… 私はそれがオブジェクトの恋人を返し書きました (これを返します). これは私たちに容易な操作を提供します. たとえばあなたが設定したいとき 2 名前と電話値、あなたが書く必要があります 2 あなたのような市場に行くときlover.setPhone lover.setName時間などは、よりゆっくりとマシンの実行を行うことができます, あなたは野菜を購入し、上で実行します, その後買い豆を実行します,… そして、私はちょうどよ lover.setName(…).setPhone(…) すなわち野菜の買い物、常に豆を買います. =))

方法 toJSON 私は転送することが書いて 1 サーバに送信されたデータ操作を容易にするためにJSON形式にオブジェクト, しかし、このアプリケーションでは、私はそれを使用しないでください, あなたが知っているだけ他のアプリのために使用することができるように書きます.

建設クラスLoadJSon

実際に撮影しただけでなく、より多くの処理までにJSONデータを送信しません. 建設ファイル前日など lover.php 私たちは、変数メソッドを介しての行為を区別することを述べています.

package cachhoc.net.demojson;

import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.RequestParams;

import org.apache.http.Header;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;

public class LoadJson {

    public static final String LINK = "https://cachhoc.net/mobile/demo-json/lover.php";

    public void sendDataToServer(int method, HashMap<String, String> map) {
        AsyncHttpClient client = new AsyncHttpClient();
        RequestParams params = new RequestParams();

        // put data to server
        params.put(Var.KEY_METHOD, method);

        if (map != null) {
            for (String key : map.keySet()) {
                params.put(key, map.get(key));
            }
        }

        System.out.println("Post...");

        client.post(LINK, params, new AsyncHttpResponseHandler() {

            @SuppressWarnings("deprecation")
            @Override
            public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
                String json = new String(responseBody);
                System.out.println("onSuccess:" + json);
                onFinishLoadJSonListener.finishLoadJSon(null, json);
            }

            @SuppressWarnings("deprecation")
            @Override
            public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
                System.out.println("onFailure:" + statusCode);

                String e;

                if (statusCode == 404) {
                    e = "Requested resource not found";
                } else if (statusCode == 500) {
                    e = "Something went wrong at server end";
                } else {
                    e = "Device might not be connected to Internet";
                }
                onFinishLoadJSonListener.finishLoadJSon(e, null);
            }
        });
    }

    public static Lover jsonToLover(JSONObject jsonObject) {
        try {
            int id = jsonObject.getInt(Var.KEY_ID);
            String name = jsonObject.getString(Var.KEY_NAME);
            String phone = jsonObject.getString(Var.KEY_PHONE);
            String beginDate = jsonObject.getString(Var.KEY_BEGIN_DATE);
            String endDate = jsonObject.getString(Var.KEY_END_DATE);
            return new Lover(id, name, phone, beginDate, endDate);
        } catch (JSONException e) {
            e.printStackTrace();
            return null;
        }
    }

    public static ArrayList<Lover> jsonToListLover(String json) {
        ArrayList<Lover> list = new ArrayList<>();

        try {
            JSONArray arraySMSJson = new JSONArray(json);
            for (int i = 0; i < arraySMSJson.length(); i++) {
                JSONObject jsonObject = arraySMSJson.getJSONObject(i);
                Lover lover = jsonToLover(jsonObject);
                if (lover != null) {
                    list.add(lover);
                }
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return list;
    }


    public interface OnFinishLoadJSonListener {
        void finishLoadJSon(String error, String json);
    }

    public OnFinishLoadJSonListener onFinishLoadJSonListener;

    public void setOnFinishLoadJSonListener(OnFinishLoadJSonListener onFinishLoadJSonListener) {
        this.onFinishLoadJSonListener = onFinishLoadJSonListener;
    }
}

その中で:

  • 定数LINKは出力ファイルのJSONへのパスです – lover.phpファイルすでに構築前夜.

  • 方法 sendDataToServer 持っている 2 引数は、アクションを区別するための方法であり、 (ログイン, 登録, 負荷JSON, 恋人を追加) 治療を区別するために、サーバー上のファイルlover.php. 変数 HashMapの<文字列, 文字列>地図 私たちはあきらめたデータのためのキーと値のペアのリストです, サーバー上の対応する値を取得するための鍵に基づいて行われます.

  • 我々はclient.post呼び出された場合() システムは、サーバにデータを送信するためにバックグラウンドを実行します. 終了すると、システムが自動的にメソッドを呼び出します するonSuccess (成功しました) または ONFAILURE (罪を犯しました) し、対応する値を返します。. 方法では するonSuccess その後 responseBody 我々は、約得る.jsonです, それはバイトを必要とし、文字列に移動します.

  • JSONを取得し、他のクラスのプロセッサを提供します, 私たちは、そのインターフェイスを構築します OnFinishLoadJSonListener モダリティ finishLoadJSon(文字列のエラー, 文字列のJSON) 他のクラスにJSONやエラーが治療の後に撮影した実装.

  • この中でも、あなたに組み込まれています 2 メソッド jsonToLoverjsonToListLover 文字列のJSONオブジェクトまたはリストの恋人の恋人に変換します.

聞いて来て、やや長期的. 最も重要な部分は、JSONは、グリッチを持って取得することです. 私たちは、取り扱い続けます 4 アクティビティ.

活動の取り扱い

インタフェース部と同様に、, 私たちはステップをオンに移動します:
コンフィギュレーション, チュアンBI - >ログイン - >登録 - >リストオールド恋人 - >恋人を追加
そして、彼のコードの中で、それは多くの説明を必要としないことも非常に明確なメソッドに名前を付けます.

活動ログイン

ログインするには、我々はニックを送信し、システムチェックを渡す必要があります, lover.phpファイルはチェックし、trueの場合、新しいは、ログイン.

package cachhoc.net.demojson;

import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;

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

import java.util.HashMap;

public class LoginActivity extends AppCompatActivity implements View.OnClickListener, LoadJson.OnFinishLoadJSonListener {

    private EditText editNick, editPass;
    private CheckBox cbRememberPass;

    private LoadJson loadJson;

    private Context context;

    private ProgressDialog progressDialog;

    private String nick, pass;

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

        context = this;

        setupToolbar();

        connectView();

        loadJson = new LoadJson();
        loadJson.setOnFinishLoadJSonListener(this);
        progressDialog = new ProgressDialog(context);
        progressDialog.setMessage(context.getResources().getString(R.string.wait));
    }

    private void setupToolbar() {
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        if (toolbar != null) {
            setSupportActionBar(toolbar);
            if (getSupportActionBar() != null) {
                getSupportActionBar().setTitle(R.string.login);
            }
        }
    }

    private void connectView() {
        editNick = (EditText) findViewById(R.id.edit_nick);
        editPass = (EditText) findViewById(R.id.edit_pass);
        cbRememberPass = (CheckBox) findViewById(R.id.cb_remember);

        findViewById(R.id.btn_login).setOnClickListener(this);
        findViewById(R.id.btn_register).setOnClickListener(this);

        // get nick and pass if it be remember
        nick = Var.get(context, Var.KEY_NICK);
        pass = Var.get(context, Var.KEY_PASS);

        if (nick != null && pass != null) {
            editNick.setText(nick);
            editPass.setText(pass);
            cbRememberPass.setChecked(true);
        }

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_login:
                login();
                break;
            case R.id.btn_register:
                register();
                break;
            default:
                break;
        }
    }

    private void register() {
        Intent intent = new Intent(context, RegisterActivity.class);
        startActivity(intent);
    }

    private void login() {
        nick = editNick.getText().toString().trim();
        pass = editPass.getText().toString().trim();

        // not enter nick name
        if (nick.length() == 0) {
            editNick.requestFocus();
            Var.showToast(context, context.getResources().getString(R.string.enter_nick));
            return;
        }

        // not enter pass
        if (pass.length() == 0) {
            editPass.requestFocus();
            Var.showToast(context, context.getResources().getString(R.string.enter_pass));
            return;
        }

        // save nick and pass
        if (cbRememberPass.isChecked()) {
            Var.save(context, Var.KEY_NICK, nick);
            Var.save(context, Var.KEY_PASS, pass);
        } else {
            Var.save(context, Var.KEY_NICK, null);
            Var.save(context, Var.KEY_PASS, null);
        }

        HashMap<String, String> map = new HashMap<>();
        map.put(Var.KEY_NICK, nick);
        map.put(Var.KEY_PASS, pass);

        loadJson.sendDataToServer(Var.METHOD_LOGIN, map);
        progressDialog.show();
    }

    @Override
    public void finishLoadJSon(String error, String json) {
        if (progressDialog.isShowing()) {
            progressDialog.hide();
        }
        try {
            if (json != null) {
                JSONObject jsonObject = new JSONObject(json);
                if (jsonObject.getBoolean(Var.KEY_LOGIN)) {
                    Var.showToast(context, context.getResources().getString(R.string.login_success));

                    Intent intent = new Intent(context, MainActivity.class);
                    intent.putExtra(Var.KEY_NICK, nick);
                    startActivity(intent);

                    finish();
                } else {
                    Var.showToast(context, context.getResources().getString(R.string.login_fail));
                }
            } else {
                Var.showToast(context, error);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}

アクティビティの登録

いいえアカウントの場合, 我々は、データベースシステムに追加するために登録する必要があります.

package cachhoc.net.demojson;

import android.app.ProgressDialog;
import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.EditText;

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

import java.util.HashMap;

public class RegisterActivity extends AppCompatActivity implements View.OnClickListener, LoadJson.OnFinishLoadJSonListener {

    private EditText editNick, editPass, editRePass;

    private LoadJson loadJson;

    private Context context;

    private ProgressDialog progressDialog;

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

        context = this;

        setupToolbar();

        connectView();

        loadJson = new LoadJson();
        loadJson.setOnFinishLoadJSonListener(this);
        progressDialog = new ProgressDialog(context);
        progressDialog.setMessage(context.getResources().getString(R.string.wait));
    }

    private void setupToolbar() {
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        if (toolbar != null) {
            setSupportActionBar(toolbar);
            if (getSupportActionBar() != null) {
                getSupportActionBar().setTitle(R.string.register);
            }
        }
    }

    private void connectView() {
        editNick = (EditText) findViewById(R.id.edit_nick);
        editPass = (EditText) findViewById(R.id.edit_pass);
        editRePass = (EditText) findViewById(R.id.edit_re_pass);

        findViewById(R.id.btn_reset).setOnClickListener(this);
        findViewById(R.id.btn_register).setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_reset:
                reset();
                break;
            case R.id.btn_register:
                register();
                break;
            default:
                break;
        }
    }

    private void reset() {
        editNick.setText("");
        editPass.setText("");
        editRePass.setText("");
        editNick.requestFocus();
    }

    private void register() {
        String nick = editNick.getText().toString().trim();
        String pass = editPass.getText().toString().trim();
        String repass = editRePass.getText().toString().trim();

        // not enter nick name
        if (nick.length() == 0) {
            editNick.requestFocus();
            Var.showToast(context, context.getResources().getString(R.string.enter_nick));
            return;
        }

        // not enter pass
        if (pass.length() == 0) {
            editPass.requestFocus();
            Var.showToast(context, context.getResources().getString(R.string.enter_pass));
            return;
        }

        // not enter pass
        if (repass.length() == 0) {
            editRePass.requestFocus();
            Var.showToast(context, context.getResources().getString(R.string.enter_repass));
            return;
        }

        if (!repass.equals(pass)) {
            editPass.requestFocus();
            Var.showToast(context, context.getResources().getString(R.string.pass_not_match));
            return;
        }

        HashMap<String, String> map = new HashMap<>();
        map.put(Var.KEY_NICK, nick);
        map.put(Var.KEY_PASS, pass);

        loadJson.sendDataToServer(Var.METHOD_REGISTER, map);
        progressDialog.show();
    }

    @Override
    public void finishLoadJSon(String error, String json) {
        if (progressDialog.isShowing()) {
            progressDialog.hide();
        }
        try {
            if (json != null) {
                JSONObject jsonObject = new JSONObject(json);
                if (jsonObject.getBoolean(Var.KEY_REGISTER)) {
                    Var.showToast(context, context.getResources().getString(R.string.register_success));
                    finish();
                } else {
                    Var.showToast(context, context.getResources().getString(R.string.register_fail));
                }
            } else {
                Var.showToast(context, error);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}

アクティビティ恋人を追加

package cachhoc.net.demojson;

import android.app.ProgressDialog;
import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import com.wdullaer.materialdatetimepicker.date.DatePickerDialog;

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

import java.util.Calendar;
import java.util.HashMap;

public class AddLoverActivity extends AppCompatActivity implements View.OnClickListener, LoadJson.OnFinishLoadJSonListener, DatePickerDialog.OnDateSetListener {

    private EditText editName, editPhone;
    private Button btnBeginDate, btnEndDate;

    private LoadJson loadJson;

    private Context context;

    private ProgressDialog progressDialog;

    private String nick;

    // for begin date or end date
    private int typeDate;
    private String beginDate = "", endDate = "";

    public static final int BEGIN_DATE = 0;
    public static final int END_DATE = 1;

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

        context = this;

        setupToolbar();

        connectView();

        loadJson = new LoadJson();
        loadJson.setOnFinishLoadJSonListener(this);
        progressDialog = new ProgressDialog(context);
        progressDialog.setMessage(context.getResources().getString(R.string.wait));

        nick = getIntent().getStringExtra(Var.KEY_NICK);
    }

    private void setupToolbar() {
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        if (toolbar != null) {
            setSupportActionBar(toolbar);
            if (getSupportActionBar() != null) {
                getSupportActionBar().setTitle(R.string.title_activity_add_lover);
            }
        }
    }

    private void connectView() {
        editName = (EditText) findViewById(R.id.edit_name);
        editPhone = (EditText) findViewById(R.id.edit_phone);
        btnBeginDate = (Button) findViewById(R.id.btn_begin_date);
        btnEndDate = (Button) findViewById(R.id.btn_end_date);

        btnBeginDate.setOnClickListener(this);
        btnEndDate.setOnClickListener(this);

        findViewById(R.id.btn_add).setOnClickListener(this);
        findViewById(R.id.btn_reset).setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_reset:
                reset();
                break;
            case R.id.btn_add:
                add();
                break;
            case R.id.btn_begin_date:
                typeDate = BEGIN_DATE;
                showDatePicker();
                break;
            case R.id.btn_end_date:
                typeDate = END_DATE;
                showDatePicker();
                break;
            default:
                break;
        }
    }

    private void showDatePicker() {
        Calendar now = Calendar.getInstance();
        DatePickerDialog dpd = DatePickerDialog.newInstance(
                this,
                now.get(Calendar.YEAR),
                now.get(Calendar.MONTH),
                now.get(Calendar.DAY_OF_MONTH)
        );

        String title;
        if (typeDate == BEGIN_DATE) {
            title = context.getResources().getString(R.string.begin_date);
        } else {
            title = context.getResources().getString(R.string.end_date);
        }
        dpd.show(getFragmentManager(), title);
    }

    @Override
    public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) {
        String date = dayOfMonth + "/" + monthOfYear + "/" + year;
        if (typeDate == BEGIN_DATE) {
            beginDate = date;
            btnBeginDate.setText(date);
        } else {
            endDate = date;
            btnEndDate.setText(date);
        }
    }

    private void reset() {
        editName.setText("");
        editPhone.setText("");
        editName.requestFocus();
    }


    private void add() {
        String name = editName.getText().toString().trim();
        String phone = editPhone.getText().toString().trim();

        // not enter nick name
        if (name.length() == 0) {
            editName.requestFocus();
            Var.showToast(context, context.getResources().getString(R.string.enter_nick));
            return;
        }

        // not enter pass
        if (phone.length() == 0) {
            editPhone.requestFocus();
            Var.showToast(context, context.getResources().getString(R.string.enter_pass));
            return;
        }


        HashMap<String, String> map = new HashMap<>();
        map.put(Var.KEY_NICK, nick);
        map.put(Var.KEY_NAME, name);
        map.put(Var.KEY_PHONE, phone);
        map.put(Var.KEY_BEGIN_DATE, beginDate);
        map.put(Var.KEY_END_DATE, endDate);

        loadJson.sendDataToServer(Var.METHOD_ADD_OLD_LOVER, map);
        progressDialog.show();
    }

    @Override
    public void finishLoadJSon(String error, String json) {
        if (progressDialog.isShowing()) {
            progressDialog.hide();
        }
        try {
            if (json != null) {
                JSONObject jsonObject = new JSONObject(json);
                if (jsonObject.getBoolean(Var.KEY_ADD)) {
                    Var.showToast(context, context.getResources().getString(R.string.add_success));
                    finish();
                } else {
                    Var.showToast(context, context.getResources().getString(R.string.add_fail));
                }
            } else {
                Var.showToast(context, error);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}

活動の主な – リストの恋人

この中には 2 我々はリストとリストアダプタを処理する必要が一部.

ファイルMainActivity.java

package cachhoc.net.demojson;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.HashMap;

public class MainActivity extends AppCompatActivity implements View.OnClickListener, LoadJson.OnFinishLoadJSonListener {

    private ItemAdapter adapter;
    private ArrayList<Lover> list;

    private LoadJson loadJson;

    private Context context;

    private ProgressBar progressBar;
    private ViewGroup layoutProgress;
    private TextView tvNotify;

    private String nick;

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

        context = this;

        loadJson = new LoadJson();
        loadJson.setOnFinishLoadJSonListener(this);

        setupToolbar();
        setupRecyclerView();

        findViewById(R.id.fab_add).setOnClickListener(this);
        layoutProgress = (ViewGroup) findViewById(R.id.layout_progress);
        progressBar = (ProgressBar) findViewById(R.id.progress);
        tvNotify = (TextView) findViewById(R.id.tv_notify);

        nick = getIntent().getStringExtra(Var.KEY_NICK);
    }

    private void setupToolbar() {
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        if (toolbar != null) {
            setSupportActionBar(toolbar);
        }
    }

    private void setupRecyclerView() {
        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.rv_lover);

        // If the size of views will not change as the data changes.
        recyclerView.setHasFixedSize(true);

        // Setting the LayoutManager.
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);

        // Setting the adapter.
        list = new ArrayList<>();
        adapter = new ItemAdapter(context, list);
        recyclerView.setAdapter(adapter);
    }

    public void onResume() {
        super.onResume();
        refresh();
    }

    /**
     * re load data from server
     */
    private void refresh() {
        HashMap<String, String> map = new HashMap<>();
        map.put(Var.KEY_NICK, nick);
        loadJson.sendDataToServer(Var.METHOD_GET_OLD_LOVER, map);
        layoutProgress.setVisibility(View.VISIBLE);
        progressBar.setVisibility(View.VISIBLE);
        tvNotify.setVisibility(View.GONE);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_logout:
                logout();
                break;
            case R.id.action_refresh:
                refresh();
                break;
        }
        return super.onOptionsItemSelected(item);
    }

    private void logout() {
        Intent intent = new Intent(context, LoginActivity.class);
        startActivity(intent);
        finish();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.fab_add:
                addOldLover();
                break;
        }
    }

    private void addOldLover() {
        Intent intent = new Intent(context, AddLoverActivity.class);
        intent.putExtra(Var.KEY_NICK, nick);
        startActivity(intent);
    }

    @Override
    public void finishLoadJSon(String error, String json) {
        if (json != null) {
            layoutProgress.setVisibility(View.GONE);
            updateList(json);
        } else {
            showNotify(error);
        }
    }

    private void updateList(String json) {
        ArrayList<Lover> newList = LoadJson.jsonToListLover(json);
        list.clear();
        list.addAll(newList);
        adapter.notifyDataSetChanged();
        if (list.size() == 0) {
            showNotify(context.getResources().getString(R.string.no_lover));
        }
    }

    private void showNotify(String notify) {
        layoutProgress.setVisibility(View.VISIBLE);
        progressBar.setVisibility(View.GONE);
        tvNotify.setVisibility(View.VISIBLE);
        tvNotify.setText(notify);
    }

    /**
     * double click back then exit app (2 click in 2s to exit)
     */
    @Override
    public void onBackPressed() {
        if (doubleBackToExitPressedOnce) {
            super.onBackPressed();
            return;
        }

        this.doubleBackToExitPressedOnce = true;
        Var.showToast(context, context.getResources().getString(R.string.back_to_exit));
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                doubleBackToExitPressedOnce = false;
            }
        }, 2000);
    }

    private boolean doubleBackToExitPressedOnce;
}

これで、あなたは彼の注意上書き方法の下部にあります onBackPressed ユーザーが戻って押し通知します 2 エスケープ前の回. 2 2S内にこの出版物は回連続 (200 ミリ秒)

ItemAdapter.javaファイル

package cachhoc.net.demojson;

import android.content.Context;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.List;

public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.RecyclerViewHolder> {

    private List<Lover> list;
    private Context context;

    public ItemAdapter(Context context, List<Lover> list) {
        this.context = context;
        this.list = list;
    }

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

    /**
     * connect to item view
     */
    @Override
    public RecyclerViewHolder onCreateViewHolder(ViewGroup viewGroup, int position) {
        LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
        View itemView = inflater.inflate(R.layout.item, viewGroup, false);
        return new RecyclerViewHolder(itemView);
    }

    /**
     * set data for item
     */
    @Override
    public void onBindViewHolder(RecyclerViewHolder viewHolder, int position) {
        Lover lover = list.get(position);
        viewHolder.tvName.setText(lover.getName());
        viewHolder.tvPhone.setText(lover.getPhone());
        viewHolder.tvBeginDate.setText(lover.getBeginDate());
        viewHolder.tvEndDate.setText(lover.getEndDate());
    }

    /**
     * ViewHolder for item view of list
     */

    public class RecyclerViewHolder extends RecyclerView.ViewHolder implements
            OnClickListener {

        public CardView container;
        public TextView tvName;
        public TextView tvPhone;
        public TextView tvBeginDate;
        public TextView tvEndDate;

        public RecyclerViewHolder(View itemView) {
            super(itemView);

            container = (CardView) itemView.findViewById(R.id.item_container);
            tvName = (TextView) itemView.findViewById(R.id.tv_name);
            tvPhone = (TextView) itemView.findViewById(R.id.tv_phone);
            tvBeginDate = (TextView) itemView.findViewById(R.id.tv_begin_date);
            tvEndDate = (TextView) itemView.findViewById(R.id.tv_end_date);

            container.setOnClickListener(this);
        }

        // click item then display note
        @Override
        public void onClick(View v) {
            Var.showToast(context, list.get(getAdapterPosition()).getName());
        }
    }
}

だから我々は、アプリケーションを完了しました. 最後になりましたが長めのが、難しいことではありません.
あなたは、プロジェクトをダウンロードすることができます ここに

ファイルのダウンロードチャイ OldLover.apk

Chúc các bạn học tập vui vẻ 🙂

チュートリアルで行われた投稿 JSONのtrongのアンドロイド によって nguyenvanquan7826