【问题标题】:Display Strings from an arrayList in android在android中显示来自arrayList的字符串
【发布时间】:2014-01-28 04:16:18
【问题描述】:

目前我的 android 中有两个活动。 MainActivity 页面显示 toast 通知,我希望我的 HistoryActivity 页面显示所有以前的 toast。在我从 MainActivity 页面发送 toast 之前,我保存到 arrayList。然后,我想在 HistoryActivity 页面上显示这个 arrayList 中的所有字符串。我不确定如何构建 textview 以及如何将 textview 与 arrayList 中的字符串集成。请帮忙。

我还认为我需要在我的 xml 文件中添加一些内容,但我也不确定。谢谢。

MainActivity 页面的当前代码如下所示。

import java.util.ArrayList;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Toast;


public class MainActivity extends Activity {
private ContextCoreConnector contextCoreConnector;
private ContextPlaceConnector contextPlaceConnector;
private ArrayList<String> locations;

//Initializing contextPlaceConnector here, I initialize PlaceEventListener below and the logic for when a geofence is broken is below.

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    contextCoreConnector = ContextCoreConnectorFactory.get(this);
    contextPlaceConnector = ContextPlaceConnectorFactory.get(this);

    checkContextConnectorStatus();
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.

    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

private PlaceEventListener placeEventListener = new PlaceEventListener() {

    @Override
    public void placeEvent(PlaceEvent event) {
        String placeNameAndIdCurrent = " You are now at " + event.getPlace().getPlaceName() + ". The ID number of this location is " + event.getPlace().getId();
        String placeNameId = "Location is "+event.getPlace().getPlaceName() +". The ID number of this location is " + event.getPlace().getId();
        Toast toast = Toast.makeText(getApplicationContext(), placeNameAndIdCurrent, Toast.LENGTH_LONG);//changed from Toast.LENGTH_LONG
        toast.show();
        Log.i("found place", placeNameAndIdCurrent);
        locations= new ArrayList<String>();
        locations.add(placeNameId);
    }
};

private void checkContextConnectorStatus() {
    if (contextCoreConnector.isPermissionEnabled()) {
        // Gimbal is already enabled
        startListeningForGeofences();
    }
    else {
        contextCoreConnector.enable(this, new Callback<Void>() {

            @Override
            public void success(Void arg0) {
                startListeningForGeofences();
                // Gimbal is ready
            }

            @Override
            public void failure(int arg0, String arg1) {
                Log.e("failed to enable", arg1);
            }
        });
    }
}
private void startListeningForGeofences() {
    contextPlaceConnector.addPlaceEventListener(placeEventListener);
}
@Override
protected void onResume() {
super.onResume(); 
contextCoreConnector.setCurrentActivity(this);
}
@Override
protected void onPause() {
super.onPause(); contextCoreConnector.setCurrentActivity(null);
}

public void sendHistory(View view){
    Intent intent = new Intent(this, HistoryActivity.class);
    //EditText editText = (EditText) findViewById(R.id.edit_message);
    intent.putStringArrayListExtra("key", locations);
    startActivity(intent);  
}
public void sendLogin(View view){
    Intent intent = new Intent(this, LoginActivity.class);
    //EditText editText = (EditText) findViewById(R.id.edit_message);
    startActivity(intent);  
}

// return arrayList so that it can be used in other classes
public ArrayList<String> getList(){
    return locations;
}

那么 HistoryActivity 页面是这样的。

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.widget.LinearLayout;
import android.widget.TextView;


public class HistoryActivity extends Activity {
//private MainActivity Mac;
private TextView myText = null;
ArrayList<String> list = getIntent().getStringArrayListExtra("key");
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_history);

    LinearLayout lView = new LinearLayout(this);

        myText= new TextView(this);
        lView.addView(myText);
        for (int i=0; i<list.size();i++){
            myText.append(list.get(i));
            myText.append("\n");
        }
    setContentView(lView);


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.history, menu);
    return true;
}

现在我收到此错误。

01-31 01:28:25.675: E/AndroidRuntime(14623): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{concertpass.app/concertpass.app.HistoryActivity}: java.lang.NullPointerException
01-31 01:28:25.675: E/AndroidRuntime(14623):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)
01-31 01:28:25.675: E/AndroidRuntime(14623):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
01-31 01:28:25.675: E/AndroidRuntime(14623):    at android.app.ActivityThread.access$2300(ActivityThread.java:125)
01-31 01:28:25.675: E/AndroidRuntime(14623):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
01-31 01:28:25.675: E/AndroidRuntime(14623):    at android.os.Handler.dispatchMessage(Handler.java:99)
01-31 01:28:25.675: E/AndroidRuntime(14623):    at android.os.Looper.loop(Looper.java:123)
01-31 01:28:25.675: E/AndroidRuntime(14623):    at android.app.ActivityThread.main(ActivityThread.java:4627)
01-31 01:28:25.675: E/AndroidRuntime(14623):    at java.lang.reflect.Method.invokeNative(Native Method)
01-31 01:28:25.675: E/AndroidRuntime(14623):    at java.lang.reflect.Method.invoke(Method.java:521)
01-31 01:28:25.675: E/AndroidRuntime(14623):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
01-31 01:28:25.675: E/AndroidRuntime(14623):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
01-31 01:28:25.675: E/AndroidRuntime(14623):    at dalvik.system.NativeStart.main(Native Method)
01-31 01:28:25.675: E/AndroidRuntime(14623): Caused by: java.lang.NullPointerException
01-31 01:28:25.675: E/AndroidRuntime(14623):    at concertpass.app.HistoryActivity.<init>(HistoryActivity.java:15)
01-31 01:28:25.675: E/AndroidRuntime(14623):    at java.lang.Class.newInstanceImpl(Native Method)
01-31 01:28:25.675: E/AndroidRuntime(14623):    at java.lang.Class.newInstance(Class.java:1429)
01-31 01:28:25.675: E/AndroidRuntime(14623):    at android.app.Instrumentation.newActivity(Instrumentation.java:1023)
01-31 01:28:25.675: E/AndroidRuntime(14623):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)

<activity
    android:name="concertpass.app.HistoryActivity"
    android:label="@string/title_activity_history" >
</activity>

再次感谢。

【问题讨论】:

  • locations= new ArrayList();在 oncreate 中而不是在 placeEvent 中执行此操作
  • 你可以用JSONObjectJSONArray代替ArrayList
  • 它的 NUllPointerException。所以发布完整的堆栈跟踪不需要发布清单。会有部分原因说明原因
  • 你不能创建一个活动类。请在这里阅读 Raghav Sood 的回答stackoverflow.com/questions/14956018/…

标签: android arraylist textview


【解决方案1】:

首先,您需要使用意图将数组列表传递给HistoryPage

    Intent intent = new Intent(this, HistoryActivity.class);
    intent.putStringArrayListExtra("key",locations);
    startActivity(intent); 

然后在HistoryPage

    ArrayList<String> list = getIntent().getStringArrayListExtra("key");

然后循环遍历列表并在 textview 中显示。

 LinearLayout lView = new LinearLayout(this);
    myText= new TextView(this);
    lView.addView(myText);
    for (int i=0; i<list.size();i++){
        myText.append(list.get(i));
        myText.append("\n");
    }
    setContentView(lView);

你可以删除这个

  setContentView(R.layout.activity_history);

您也可以使用我认为适合这种情况的ListView

【讨论】:

  • 感谢您的帮助。我运行了那个代码,现在得到了这个错误。
  • 添加错误作为答案,因为我想添加代码。
  • @user3014093 发布完整的 logcat/stacktrace 并以相同的方式编辑您的问题。
  • @user3014093 第 15 行是什么HistoryActivity.java。表示第 15 行的某些内容为空
  • @user3014093 ArrayList&lt;String&gt; list = Mac.getList(); Mac 为空,您无法创建活动类的实例。按照我的建议去做。你根本没有关注帖子
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-19
  • 2019-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-23
相关资源
最近更新 更多