Передача массива JSON между действиями через намерение - PullRequest
5 голосов
/ 08 января 2012

Об этом уже спрашивали, но у меня это не сработало. Поэтому я подумал, что просто попрошу еще раз.

У меня есть JSONarray, который я хочу передать второму действию, используя намерение.

Это часть моего кода, которая подключается к базе данных mysql и помещает данные о пользователе в JSONarray. Пока все это работает.

try{
    BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
    sb = new StringBuilder();
    sb.append(reader.readLine() + "\n");

    String line="0";
    while ((line = reader.readLine()) != null) {
        sb.append(line + "\n");
    }
    is.close();
    result=sb.toString();

    }catch(Exception e){
        Log.e("log_tag", "Error converting result "+e.toString());
    }

String ct_user;
String ct_pass;

Intent personal = new Intent(Home.this, Loggedin.class);

try{
    jArray = new JSONArray(result);
    JSONObject json_data=null;
    json_data = jArray.getJSONObject(0);
    ct_user = json_data.getString("user");
    ct_pass = json_data.getString("pass");


    if (passwordstring.equals(ct_pass)){

        Bundle b = new Bundle();                
        b.putString("userdata",json_data.toString());
        personal.putExtras(b);

        startActivity(personal);
            }
    }

Я хотел бы отправить мой полный JSONarray через намерение ко второму виду деятельности (Loggedin). Так что я могу отобразить, например, ct_email = json_data.getString ("email"); которое является другим значением в массиве, которое первое действие получает из mysql.

Это был другой вопрос на эту тему: передача jsonarray из одного занятия в другое

Это решение не сработало для меня, потому что во втором упражнении все время говорили, что не может преобразовать пакет в намерение, я перепробовал все, что мог придумать.

Intent b = getIntent().getExtras();
String userdata=b.getString("userdata");

Спасибо


EDIT

Спасибо за быстрые ответы, ребята. Я новичок в Stackoverflow, так что извините за ошибки, связанные с маркировкой кода и т. Д. Я стараюсь все делать правильно.

Но это все еще не работает для меня. Это часть моего второго занятия:

public class Loggedin extends Activity {


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.loggedin);

    myfunction();

}

public void myfunction(){

    Bundle b = getIntent().getExtras();
    String userdataArray = b.getString("userdata");

    String ct_email;
    ct_email = userdataArray.getString("email");


}

}

Ошибка в том, что «метод getString (String) не определен для типа String». Я, должно быть, делаю что-то глупое.

Ответы [ 2 ]

6 голосов
/ 08 января 2012

Вы не можете вызвать getString () для String, потому что этот метод определен для JSONObject NOT String. Отсюда ошибка компилятора. Вы должны проанализировать строку в объектах JSON, а затем использовать ее для извлечения этих данных:

public void myfunction(){

  Bundle b = getIntent().getExtras();

  // parse the JSON passed as a string.
  JSONObject json = new JSONObject( b.getString("userdata") );
  String ct_email = json.getString("email");
}
6 голосов
/ 08 января 2012

getExtras() возвращает Bundle, а не Intent.Измените свой код, как это и попробуйте.

Bundle b = getIntent().getExtras(); 
String userdata=b.getString("userdata"); 
...