0
我一直在開發一個應用程序,其中包括登錄註冊,GPS和QR掃描儀。 現在我在profilefragment.java中有我的QR掃描代碼,我從mainactivity.java調用它.QR掃描的按鈕位於profilefragment.xml中,主要活動有mainactivity.java,它具有try catch塊。而不是去嘗試catch塊它顯示敬酒信息。 QR生成的字符串格式也是正確的。設置TextView而不是從活動中的片段吐司
代碼QR輪廓片段掃描(QR掃描結果在主activity.java)
public class ProfileFragment extends Fragment implements View.OnClickListener {
private TextView tv_name, tv_email, tv_message;
private SharedPreferences pref;
private AppCompatButton btn_change_password, btn_logout;
private EditText et_old_password, et_new_password;
private AlertDialog dialog;
private ProgressBar progress;
private Button buttonScan, Nextbutton;
private TextView textViewUnique;
private IntentIntegrator qrScan;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_profile, container, false);
initViews(view);
return view;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
pref = getActivity().getPreferences(0);
tv_name.setText("Welcome : " + pref.getString(Constants.NAME, ""));
tv_email.setText(pref.getString(Constants.EMAIL, ""));
}
private void initViews(View view) {
tv_name = (TextView) view.findViewById(R.id.tv_name);
tv_email = (TextView) view.findViewById(R.id.tv_email);
btn_change_password = (AppCompatButton) view.findViewById(R.id.btn_chg_password);
btn_logout = (AppCompatButton) view.findViewById(R.id.btn_logout);
buttonScan = (Button) view.findViewById(R.id.buttonScan);
Nextbutton = (Button) view.findViewById(R.id.Next);
textViewUnique = (TextView) view.findViewById(R.id.textViewUniqueId);
btn_change_password.setOnClickListener(this);
btn_logout.setOnClickListener(this);
buttonScan.setOnClickListener(this);
qrScan = new IntentIntegrator(getActivity());
Nextbutton.setOnClickListener(this);
}
private void showDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
View view = inflater.inflate(R.layout.dialog_change_password, null);
et_old_password = (EditText) view.findViewById(R.id.et_old_password);
et_new_password = (EditText) view.findViewById(R.id.et_new_password);
tv_message = (TextView) view.findViewById(R.id.tv_message);
progress = (ProgressBar) view.findViewById(R.id.progress);
builder.setView(view);
builder.setTitle("Change Password");
builder.setPositiveButton("Change Password", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
dialog = builder.create();
dialog.show();
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String old_password = et_old_password.getText().toString();
String new_password = et_new_password.getText().toString();
if (!old_password.isEmpty() && !new_password.isEmpty()) {
progress.setVisibility(View.VISIBLE);
changePasswordProcess(pref.getString(Constants.EMAIL, ""), old_password, new_password);
} else {
tv_message.setVisibility(View.VISIBLE);
tv_message.setText("Fields are empty");
}
}
});
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_chg_password:
showDialog();
break;
case R.id.btn_logout:
logout();
break;
case R.id.buttonScan:
qrScan.initiateScan();
break;
case R.id.Next:
Intent intent = new Intent(getActivity(), MapMainActivity.class);
getActivity().startActivity(intent);
break;
}
}
private void logout() {
SharedPreferences.Editor editor = pref.edit();
editor.putBoolean(Constants.IS_LOGGED_IN, false);
editor.putString(Constants.EMAIL, "");
editor.putString(Constants.NAME, "");
editor.putString(Constants.UNIQUE_ID, "");
editor.apply();
goToLogin();
}
private void goToLogin() {
Fragment login = new LoginFragment();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.fragment_frame, login);
ft.commit();
}
private void changePasswordProcess(String email, String old_password, String new_password) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Constants.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
RequestInterface requestInterface = retrofit.create(RequestInterface.class);
User user = new User();
user.setEmail(email);
user.setOld_password(old_password);
user.setNew_password(new_password);
ServerRequest request = new ServerRequest();
request.setOperation(Constants.CHANGE_PASSWORD_OPERATION);
request.setUser(user);
Call<ServerResponse> response = requestInterface.operation(request);
response.enqueue(new Callback<ServerResponse>() {
@Override
public void onResponse(Call<ServerResponse> call, retrofit2.Response<ServerResponse> response) {
ServerResponse resp = response.body();
if (resp.getResult().equals(Constants.SUCCESS)) {
progress.setVisibility(View.GONE);
tv_message.setVisibility(View.GONE);
dialog.dismiss();
Snackbar.make(getView(), resp.getMessage(), Snackbar.LENGTH_LONG).show();
} else {
progress.setVisibility(View.GONE);
tv_message.setVisibility(View.VISIBLE);
tv_message.setText(resp.getMessage());
}
}
@Override
public void onFailure(Call<ServerResponse> call, Throwable t) {
Log.d(Constants.TAG, "failed");
progress.setVisibility(View.GONE);
tv_message.setVisibility(View.VISIBLE);
tv_message.setText(t.getLocalizedMessage());
}
});
}
}
mainactivity.java
public class MainActivity extends FragmentActivity {
private TextView textViewUnique;
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.fragment_profile,container,false);
TextView textViewUnique = (TextView) view.findViewById(R.id.textViewUniqueId);
//return inflater.inflate(R.layout.fragment_profile, container);
return view;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textViewUnique = (TextView) findViewById(com.learn2crack.loginregistration.R.id.textViewUniqueId);
pref = getPreferences(0);
initFragment();
}
private void initFragment() {
Fragment fragment;
if (pref.getBoolean(Constants.IS_LOGGED_IN, false)) {
fragment = new ProfileFragment();
} else {
fragment = new LoginFragment();
}
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.fragment_frame, fragment);
ft.commit();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
if (result != null) {
//if qrcode has nothing in it
if (result.getContents() == null) {
Toast.makeText(this, "Result Not Found", Toast.LENGTH_LONG).show();
} else {
//if qr contains data
try {
ProfileFragment profileFragment = new ProfileFragment();
profileFragment.onActivityResult(requestCode, resultCode, data);
JSONObject obj = new JSONObject(result.getContents());
textViewUnique.setText(obj.getString("unique_id"));
//textViewUnique.setText(obj.getString("unique id"));
} catch (Exception e) {
e.printStackTrace();
//if control comes here
//that means the encoded format not matches
//in this case you can display whatever data is available on the qrcode
//to a toast
Toast.makeText(this, result.getContents(), Toast.LENGTH_LONG).show();
}
}
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
}
兩個XML是
activitymain.xml
<LinearLayout 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"
android:orientation="vertical"
tools:context="com.learn2crack.loginregistration.MainActivity">
<FrameLayout
android:id="@+id/fragment_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
</android.support.design.widget.CoordinatorLayout>
輪廓fragment.xml之
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main"
android:orientation="vertical"
android:layout_marginLeft="40dp"
android:layout_marginRight="40dp"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:baselineAligned="false">
<Button
android:id="@+id/buttonScan"
android:layout_width="104dp"
android:layout_height="wrap_content"
android:text="QR Scan"
android:layout_gravity="right" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="unique_id"
android:textSize="20dp" />
<TextView
android:id="@+id/textViewUniqueId"
android:layout_marginTop="10dp"
android:textSize="20sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"/>
</LinearLayout>