Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将数据从第二个活动发送到第一个活动不会';机器人不能工作_Java_Android_Android Intent - Fatal编程技术网

Java 将数据从第二个活动发送到第一个活动不会';机器人不能工作

Java 将数据从第二个活动发送到第一个活动不会';机器人不能工作,java,android,android-intent,Java,Android,Android Intent,我目前正在开发一个应用程序,可以让你列出笔记: 该列表可在第一个活动中查看 “新建注释”按钮将导致第二个活动,其中包含编辑文本和一些文本格式按钮(粗体、斜体、大文本、小文本) 该应用程序允许您长时间单击以编辑或删除列表中的注释 问题是,当我将数据从一个活动发送到另一个活动时,我在日志中发现以下错误: java.lang.NullPointerException:尝试调用虚拟方法 空对象上的“java.lang.String java.lang.Object.toString()” 参考文献

我目前正在开发一个应用程序,可以让你列出笔记:

  • 该列表可在第一个活动中查看
  • “新建注释”按钮将导致第二个活动,其中包含编辑文本和一些文本格式按钮(粗体、斜体、大文本、小文本)
  • 该应用程序允许您长时间单击以编辑或删除列表中的注释
问题是,当我将数据从一个活动发送到另一个活动时,我在日志中发现以下错误:

java.lang.NullPointerException:尝试调用虚拟方法 空对象上的“java.lang.String java.lang.Object.toString()” 参考文献

只有当我尝试将数据发送回第一个活动时,才会发生这种情况。当我尝试从第二个活动中的按钮内部保存时,使用相同的方法:

getText().toString() 
很好用。以下是在活动和之间发送/接收数据的代码以及保存方法

public void sendMessage(View view)
{
    editText = (EditText) findViewById(R.id.add_text);
    String message = editText.getText().toString();
    Intent intent  = new Intent(this, MainActivity.class);
    intent.putExtra(key_Message, message);
    startActivity(intent);
}


@Override
protected void onResume() {
    super.onResume();
    Intent intent = getIntent();
    String message = intent.getStringExtra(key_Message);
    list.add(message);
    adapter.notifyDataSetChanged();
}
下面是内部保存文本的方法(这很好)。请注意,我在writeMessage中添加了sendMessage函数(但对其进行了注释)

还有一个小问题,我也无法解决:

public void shrinkText(View view)
{   float modifySize = editText.getTextSize();
    modifySize = modifySize - 3;
    editText.setTextSize(modifySize);
}
是一种小方法,当用户单击按钮时,该方法可以从编辑文本中收缩文本。它总是增加文本。我们将非常感谢您的帮助

public void writeMessage(View view)
{
    String Message = editText.getText().toString();
    String file_name = "Notes_file";
    try {
        FileOutputStream fileOutputStream = openFileOutput(file_name, MODE_PRIVATE);
        fileOutputStream.write(Message.getBytes());
        fileOutputStream.close();
        Toast.makeText(getApplicationContext(), "Message has been saved", Toast.LENGTH_SHORT).show();
        String message = editText.getText().toString();
        Intent intent  = new Intent();
        intent.putExtra(key_edit, message);
        setResult(RESULT_OK, intent);
        finish();


    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}

 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == 1){
        if(resultCode == RESULT_OK){
            String item_tobeadded1;
            item_tobeadded1 = data.getStringExtra(key_edit);
            list.add(item_tobeadded1);
            //adapter.notifyDataSetChanged();
            adapter = new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1, list);
            list_view.setAdapter(adapter);
        }
    }
}
public void writeMessage(视图)
{
String Message=editText.getText().toString();
字符串文件\u name=“Notes\u file”;
试一试{
FileOutputStream FileOutputStream=openFileOutput(文件名,模式\私有);
fileOutputStream.write(Message.getBytes());
fileOutputStream.close();
Toast.makeText(getApplicationContext(),“消息已保存”,Toast.LENGTH\u SHORT.show();
String message=editText.getText().toString();
意图=新意图();
intent.putExtra(按键编辑,信息);
设置结果(结果正常,意图);
完成();
}catch(filenotfounde异常){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
}
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
if(requestCode==1){
if(resultCode==RESULT\u OK){
字符串项_应为1;
item_tobeaded1=data.getStringExtra(键编辑);
列表。添加(项目1);
//adapter.notifyDataSetChanged();
adapter=new ArrayAdapter(这是android.R.layout.simple\u expandable\u list\u item\u 1,list);
列表\视图.设置适配器(适配器);
}
}
}

正如前面所建议的那样,您可以使用编辑时刚刚单击的
列表视图
项上的数据,或者当您装入新文件时,开始您的第二项活动

通过这种方式,您可以编辑和创建新注释,而无需对代码进行太多更改

int RESPONSE_CODE = 123; // from this code will will differentiate if 
                         // the activity which we started actually did the task or not

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            Intent intent = new Intent(getApplicationContext(), NoteEditActivity.class);
            intent.putString("para1","arg1");
            intent.putString("para2","arg2");
            intent.putString("para3","arg3");
            intent.putString("para4","arg4");
            startActivityForResult(intent, RESPONSE_CODE);
        }
    });
一旦你完成了笔记的创建或编辑,将相关数据附加到意图上,然后像这样完成活动

Intent intent = new Intent();
intent.putExtra("para1","edited_data_1");
intent.putExtra("para2","edited_data_2");
intent.putExtra("para3","edited_data_3");
intent.putExtra("para4","edited_data_4");
setResult(RESULT_OK, intent);        
finish(); 
如果任务成功,您将结果设置为
result\u OK
附加意图,您就完成了

在上一个活动中,您必须重写名为
onActivityResult()
的方法此方法从您开始执行某些任务的活动接收数据

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1) {
         if(resultCode == RESULT_OK){

            String arg1 = data.getStringExtra("para1");
            String arg2 = data.getStringExtra("para2");
            String arg3 = data.getStringExtra("para3");
            String arg4 = data.getStringExtra("para4");
            // if you receive the data here,
            // you can add another element to List from which the -
            //`ListView` is populated and call `notifyDataSetChanged()` on the adapter.
            // like this `adapter.notifyDataSetChanged();` it will update the `listview` -
            //with new data that you received from the `NoteEditActivity.class` 

             adapter.notifyDataSetChanged(); // I am assuming you would add the changed item to the List
         }     
    }
}
更新,我已经为您创建了一个虚拟代码,它确实有效,我已经测试过了,我还将它上传到Github上,您可以在那里检查它

NoteListActivity.java

public class NoteListActivity extends Activity {

    private ListView listView;
    private ArrayList<String> strings;
    public static final String NEW_ELEMENT = "NEW_ELEMENT";
    public static final String ELEMENT_VALUE = "ELEMENT_VALUE";
    public static final String ELEMENT_POSITION = "ELEMENT_POSITION";
    private ArrayAdapter<String> adapter;

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

        listView = (ListView) findViewById(R.id.NoteListActivity_listView);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String text = (String) listView.getItemAtPosition(position);
                Intent intent = new Intent(getApplicationContext(), NoteEditActivity.class);
                intent.putExtra(NEW_ELEMENT, false);
                intent.putExtra(ELEMENT_POSITION, position);
                intent.putExtra(ELEMENT_VALUE, text);
                startActivityForResult(intent, 123);
            }
        });

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.NoteListActivity_fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(getApplicationContext(), NoteEditActivity.class);
                intent.putExtra(NEW_ELEMENT, true);
                startActivityForResult(intent, 123);
            }
        });

        setUpList();

        adapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.simple_list_item_1, strings);
        listView.setAdapter(adapter);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Log.d("NoteListActivity1",""+data.getStringExtra(NoteListActivity.ELEMENT_VALUE));

        if (requestCode == 123) {
            if (resultCode == RESULT_OK) {
                Log.d("NoteListActivity2",""+data.getStringExtra(NoteListActivity.ELEMENT_VALUE));
                boolean isNewElement = data.getBooleanExtra(NoteListActivity.NEW_ELEMENT, false);
                if (isNewElement) {
                    strings.add("" + data.getStringExtra(NoteListActivity.ELEMENT_VALUE));
                    adapter.notifyDataSetChanged();
                } else {
                    strings.set(data.getIntExtra(NoteListActivity.ELEMENT_POSITION, 0), "" + data.getStringExtra(NoteListActivity.ELEMENT_VALUE));
                    adapter.notifyDataSetChanged();
                }
            }
        }
    }

    private void setUpList() {
        strings = new ArrayList<>();
        for (int i = 0; i < 4; i++) {
            strings.add("Element_1_" + i);
        }
    }
}
public class NoteEditActivity extends Activity {

    private EditText editText;
    private Button button;
    private boolean isNewElement;
    private int position;

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

        editText = (EditText) findViewById(R.id.NoteEditActivity_editText);
        button = (Button) findViewById(R.id.NoteEditActivity_button);

        Intent myIntent = getIntent();
        isNewElement = myIntent.getBooleanExtra(NoteListActivity.NEW_ELEMENT, false);

        if (!isNewElement) {
            editText.setText("" + myIntent.getStringExtra(NoteListActivity.ELEMENT_VALUE));
            position = myIntent.getIntExtra(NoteListActivity.ELEMENT_POSITION,0);
        }

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String text = editText.getText().toString();
                if (text != null && text.trim().length() > 0) {
                    Intent intent = new Intent();
                    Log.d("NoteEditActivity",""+text);
                    intent.putExtra(NoteListActivity.ELEMENT_VALUE, text);
                    intent.putExtra(NoteListActivity.NEW_ELEMENT, isNewElement);
                    if (!isNewElement) {
                        intent.putExtra(NoteListActivity.ELEMENT_POSITION, position);
                    }
                    setResult(RESULT_OK, intent);
                    finish();
                } else {
                    Toast.makeText(getApplicationContext(), "Kindly write a valid element name", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
}
活动\u注释\u edit.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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:fitsSystemWindows="true"
    tools:context="com.nimgade.pk.mytutorialapplication.MainActivity">

    <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="activities.list.first.NoteListActivity">


        <ListView
            android:id="@+id/NoteListActivity_listView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/NoteListActivity_fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="@dimen/fab_margin"
        android:src="@android:drawable/ic_menu_add" />

</android.support.design.widget.CoordinatorLayout>
<?xml version="1.0" encoding="utf-8"?>
<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:gravity="center"
    android:orientation="vertical"
    tools:context="activities.list.first.NoteEditActivity">


    <EditText
        android:id="@+id/NoteEditActivity_editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/NoteEditActivity_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Save"
        android:textAllCaps="false" />
</LinearLayout>


这是一个很好的答案,可以帮助您实现您的逻辑。发送现在可以工作,但当我将特定项添加到listview时,它不会出现。请调用列表视图的适配器,并在发送对象时调用notifyDataSetChanged。确实如此。。。否则我就不可能在这里了。。但它仍然不会将项目添加到列表中,我使用list.add(item)和adapter.notifyDataSetChanged()@user3402719 ok,在这种情况下,将项目添加到列表后重新启动适配器,并将此适配器设置为listviewStill nothing。。。我添加该项,然后重新初始化适配器,并将其重新设置为用于listLast代码块。它发送数据,不会将其添加到列表中。您的列表是否为字符串类型?
public class NoteEditActivity extends Activity {

    private EditText editText;
    private Button button;
    private boolean isNewElement;
    private int position;

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

        editText = (EditText) findViewById(R.id.NoteEditActivity_editText);
        button = (Button) findViewById(R.id.NoteEditActivity_button);

        Intent myIntent = getIntent();
        isNewElement = myIntent.getBooleanExtra(NoteListActivity.NEW_ELEMENT, false);

        if (!isNewElement) {
            editText.setText("" + myIntent.getStringExtra(NoteListActivity.ELEMENT_VALUE));
            position = myIntent.getIntExtra(NoteListActivity.ELEMENT_POSITION,0);
        }

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String text = editText.getText().toString();
                if (text != null && text.trim().length() > 0) {
                    Intent intent = new Intent();
                    Log.d("NoteEditActivity",""+text);
                    intent.putExtra(NoteListActivity.ELEMENT_VALUE, text);
                    intent.putExtra(NoteListActivity.NEW_ELEMENT, isNewElement);
                    if (!isNewElement) {
                        intent.putExtra(NoteListActivity.ELEMENT_POSITION, position);
                    }
                    setResult(RESULT_OK, intent);
                    finish();
                } else {
                    Toast.makeText(getApplicationContext(), "Kindly write a valid element name", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
}
<?xml version="1.0" encoding="utf-8"?>
<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:gravity="center"
    android:orientation="vertical"
    tools:context="activities.list.first.NoteEditActivity">


    <EditText
        android:id="@+id/NoteEditActivity_editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/NoteEditActivity_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Save"
        android:textAllCaps="false" />
</LinearLayout>