【问题标题】:Log statement giving error on printing the value of Intent in android在android中打印Intent的值时给出错误的日志语句
【发布时间】:2019-04-29 23:40:43
【问题描述】:

这让我出错了,我不知道如何解决。我想使用从其他意图传递的值。

package com.example.user.shopkeeper.activities;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.sqlite.SQLiteOpenHelper;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

import com.example.user.shopkeeper.R;

public class UserActivity extends AppCompatActivity  {
    SharedPreferences sp;
    private String name, contact, user_id, email;

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

//        initViews();
        Bundle extras = getIntent().getExtras();
        if(extras == null){
            email = null;
            name = null;
            contact = null;
            user_id = null;
        }
        else{
            email = extras.getString("Email");
            name = extras.getString("Name");
            user_id = extras.getString("User_Id");
            contact = extras.getString("Contact");
        }
        Log.d("User : ",user_id);
        FloatingActionButton add_user = findViewById(R.id.floatingActionButton7);
        add_user.setOnClickListener(new View.OnClickListener(){

                @Override
                public void onClick(View v) {
                    Intent i = new Intent(UserActivity.this, AddNewMember.class);
                    i.putExtra("Name",name);
                    i.putExtra("User_Id",user_id);
                    i.putExtra("Contact",contact);
                    startActivity(i);
                }
        });



    }

//    public void initViews(){
//        // Values from loginActivity area which is name,email,id,contact
//
//        Intent intent = getIntent();
//        email = intent.getStringExtra("Email");
//        name = intent.getStringExtra("Name");
//        user_id = intent.getStringExtra("User_Id");
//        contact = intent.getStringExtra("Contact");
//
//    }

    @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.logout:

                sp = getSharedPreferences(LoginActivity.MyPREFERENCES, Context.MODE_PRIVATE);
                SharedPreferences.Editor editor = sp.edit();
                editor.clear();
                editor.apply();

                Intent in = new Intent(UserActivity.this,LoginActivity.class);
                startActivity(in);
                finish();
                return true;
        }
        return false;
    }

我已经更新了两个文件,一个是我发送值的地方,另一个是我试图接收的地方

一个是LoginActivity文件,一个是UserActivity文件。

package com.example.user.shopkeeper.activities;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.constraint.ConstraintLayout;
import android.support.design.widget.Snackbar;
import android.support.design.widget.TextInputEditText;
import android.support.design.widget.TextInputLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.AppCompatButton;
import android.support.v7.widget.AppCompatTextView;
import android.util.Log;
import android.view.View;

import com.example.user.shopkeeper.R;
import com.example.user.shopkeeper.helper.InputValidation;
import com.example.user.shopkeeper.sql.DatabaseHelper;

import java.util.List;

public class LoginActivity extends AppCompatActivity implements View.OnClickListener{

    public final AppCompatActivity activity = LoginActivity.this;
    private ConstraintLayout constraintLayout;
    private TextInputLayout eT_email;
    private TextInputLayout eT_password;
    private TextInputEditText email;
    private TextInputEditText password;
    private AppCompatButton login;
    private AppCompatTextView sign_up;

    private InputValidation inputValidation;
    private DatabaseHelper databaseHelper;

    public static final String MyPREFERENCES = "MyPrefs" ;
    public static final String Phone = "phoneKey";
    public static final String Email = "emailKey";
    SharedPreferences sharedpreferences;

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

        getSupportActionBar().hide();
        sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
        initViews();
        initListeners();
        initObjects();

        if(sharedpreferences.getBoolean("logged",false)){
            Intent accountsIntent = new Intent(activity,UserActivity.class);
            accountsIntent.putExtra("EMAIL",email.getText().toString().trim());
            startActivity(accountsIntent);
            finish();
        }

    }

    private void initViews(){
        constraintLayout = findViewById(R.id.constraint_layout);
        eT_email = findViewById(R.id.eT_email);
        eT_password = findViewById(R.id.eT_Password);
        email = findViewById(R.id.email);
        password = findViewById(R.id.password);
        login = findViewById(R.id.login);
        sign_up = findViewById(R.id.sign_up);
    }

    private void initListeners(){
        login.setOnClickListener(this);
        sign_up.setOnClickListener(this);
    }

    private void initObjects(){
        databaseHelper = new DatabaseHelper(activity);
        inputValidation = new InputValidation(activity);
    }

    @Override
    public void onClick(View view){
        switch(view.getId()){
            case R.id.login:
                verifyFromSQLite();
                break;
            case R.id.sign_up:
                Intent register = new Intent(LoginActivity.this, RegisterActivity.class);
                startActivity(register);
                break;
        }
    }

    private void verifyFromSQLite(){
        if(!inputValidation.isInputTextFilled(email,eT_email,getString(R.string.error_message_email))){
            return;
        }
        if(!inputValidation.eT_email(email,eT_email,getString(R.string.error_message_email))){
            return;
        }
        if(!inputValidation.isInputTextFilled(password,eT_password,getString(R.string.error_message_password))){
            return;
        }



        if(databaseHelper.checkUser(email.getText().toString().trim(),password.getText().toString().trim())){


            DatabaseHelper db = new DatabaseHelper(LoginActivity.this);
            List<String> contactNumber = db.getContactNumber(email.getText().toString().trim());
            String contact_db = contactNumber.get(0);
            String name_db = contactNumber.get(1);
            String user_id_db = contactNumber.get(2);
            Log.d("Contact ", contact_db);
            Log.d("name_db ", name_db);
            Log.d("User Id  ", user_id_db);

            SharedPreferences.Editor editor = sharedpreferences.edit();
            editor.putString(Phone,contact_db);
            editor.putString(Email,email.getText().toString().trim());
            editor.putBoolean("logged",true).apply();
            editor.apply();

            Intent accountsIntent = new Intent(activity,UserActivity.class);

            Bundle extras = new Bundle();

            extras.putString("Email", email.getText().toString().trim());
            extras.putString("Name", name_db);
            extras.putString("User_Id", user_id_db);
            extras.putString("Contact", contact_db);

            accountsIntent.putExtras(extras);

            emptyInputEditText();
            startActivity(accountsIntent);
            finish();
        }
        else{
            Snackbar.make(findViewById(android.R.id.content),getString(R.string.error_valid_email_password),Snackbar.LENGTH_LONG).show();
        }
    }

    private void emptyInputEditText(){
        email.setText(null);
        password.setText(null);
    }
}

在这种情况下,捆绑包也给出了错误。

11-28 11:57:30.477 16854-16854/com.example.user.shopkeeper E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.user.shopkeeper, PID: 16854
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.user.shopkeeper/com.example.user.shopkeeper.activities.UserActivity}: java.lang.NullPointerException: println needs a message
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2792)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2870)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1601)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:172)
        at android.app.ActivityThread.main(ActivityThread.java:6590)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
     Caused by: java.lang.NullPointerException: println needs a message
        at android.util.Log.println_native(Native Method)
        at android.util.Log.d(Log.java:145)
        at com.example.user.shopkeeper.activities.UserActivity.onCreate(UserActivity.java:40)
        at android.app.Activity.performCreate(Activity.java:7023)
        at android.app.Activity.performCreate(Activity.java:7014)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1215)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2745)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2870) 
        at android.app.ActivityThread.-wrap11(Unknown Source:0) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1601) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:172) 
        at android.app.ActivityThread.main(ActivityThread.java:6590) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 

错误是这样的。

【问题讨论】:

  • 您确定您确实从其他活动传递了这些密钥吗?
  • 确保您没有通过之前活动的捆绑包传递这些值。然后你需要从 bundle Bundle extras = getIntent().getExtras(); 中获取这些值
  • accountsIntent.putExtra("Email",email.getText().toString().trim()); accountsIntent.putExtra("名称",name_db); accountsIntent.putExtra("User_Id",user_id_db); accountsIntent.putExtra("联系人",contact_db);
  • 我通过了putExtra方法
  • 错误是什么?

标签: android sqlite


【解决方案1】:

像这样构建Intent

Intent intent = new Intent(activity, UserActivity.class);
Bundle extras = new Bundle();

extras.putString("Email", email.getText().toString().trim());
extras.putString("Name", name_db);
extras.putString("User_Id", user_id_db);
extras.putString("Contact", contact_db);

intent.putExtras(extras);
startActivity(intent);

虽然List&lt;String&gt; contactNumber = db.getContactNumber() 看起来已经很不幸了。

返回一些类Contact(待定义)而不是List&lt;String&gt;可能相当优雅

... 这样人们就不必使用索引访问来获取详细信息。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if(this.getIntent() != null) {
        String email = this.getIntent().getStringExtra("Email");
        Log.d("UserActivity", email);
    }
}

【讨论】:

  • 如何在另一边访问它们。
  • 值已正确返回,问题在于将它们发送到另一端。
  • @PriyanshuVaya 您的示例代码并没有真正指出该代码运行的位置......而我的示例代码从接收Activity 中检索它们onCreate()。普通的,在传递userIdInteger 值时,不需要在Bundle 中填充更多内容 - 当不想查找用户两次时,添加更多信息仍然会有所帮助。
【解决方案2】:

putExtra() 一起使用时,您可以从捆绑包中检索数据

String Email;
Bundle extras = getIntent().getExtras();
if(extras == null) {
    Email = null;
} else {
    Email= extras.getString("Email");
}  

【讨论】:

  • 有没有其他方法可以检查是否收到了值。
【解决方案3】:

首先检查你的 Intent Null 是否像这样:

Intent intent = getIntent();
    if (intent != null) {
        String email = intent.getStringExtra("Email");
        if (email != null) {
            // print here
        }
    }

请输入错误信息以供理解

【讨论】:

  • 我认为登录活动没有错误,因为错误方向是用户活动第二个是尝试下面的打印值代码,例如:更改此Log.d("Contact ", contact_db);变成 : Log.e("Contact",contact_dp);
猜你喜欢
  • 2014-02-27
  • 2018-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-15
  • 1970-01-01
  • 2012-10-26
  • 2015-06-29
相关资源
最近更新 更多