2017-01-16 4 views
-4

Я извлекаю ответ JSON из Google Адресов, и я хочу отобразить его в другой Acivity в ListView. То, что я пытаюсь сделать, - передать объект из одной активности в другую, но, похоже, не работает.Pass JSON Объект от одного действия до другого Android

Это часть моей деятельности, которую я пытаюсь передать JSON от:

public class GetNearbyPlacesList extends AsyncTask<Object, String, String> { 

    String googlePlacesData; 
    String url; 
    List<HashMap<String, String>> nearbyPlacesList = null; 
    private Intent context; 
    private SharedPreferences.Editor intent; 

    @Override 
    protected String doInBackground(Object... params) { 
     try { 
      Log.d("GetNearbyPlacesData", "doInBackground entered"); 
      url = (String) params[0]; 
      DownloadUrl downloadUrl = new DownloadUrl(); 
      googlePlacesData = downloadUrl.readUrl(url); 
      Log.d("GooglePlaceData", googlePlacesData); 
      Log.d("GooglePlacesReadTask", "doInBackground Exit"); 
     } catch (Exception e) { 
      Log.d("GooglePlacesReadTask", e.toString()); 
     } 
     return googlePlacesData; 
    } 

protected void onPostExecute(String result) { 
       Log.d("GooglePlacesReadTask", "onPostExecute Entered"); 
       ListParser listParser = new ListParser(); 
       nearbyPlacesList = listParser.parse(result); 
       Log.d("List of restaurants", nearbyPlacesList.toString()); 
       Log.d("GooglePlacesReadTask", "onPostExecute Exit"); 
     Intent intent = new Intent(GetNearbyPlacesList.this,ListRestActivity.class); 
     intent.putExtra("deal", nearbyPlacesList.toString()); 
     startActivity(intent); 
    } 

Это класс я хочу передать JSON в:

public class ListRestActivity extends Activity implements 
      GoogleApiClient.ConnectionCallbacks, 
    GoogleApiClient.OnConnectionFailedListener, 
    LocationListener { 


ListView lv; 
double latitude; 
double longitude; 
private int PROXIMITY_RADIUS = 10000; 
GoogleApiClient mGoogleApiClient; 
Location mLastLocation; 
Marker mCurrLocationMarker; 
LocationRequest mLocationRequest; 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_listrest); 
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     checkLocationPermission(); 
    } 

    //Check if Google Play Services Available or not 
    if (!CheckGooglePlayServices()) { 
     Log.d("onCreate", "Finishing test case since Google Play Services are not available"); 
     finish(); 
    } 
    else { 
     Log.d("onCreate","Google Play Services available."); 
    } 

    String Restaurant = "restaurant"; 

    String url = getUrl(latitude, longitude, Restaurant); 
    Object[] DataTransfer = new Object[1]; 
    DataTransfer[0] = url; 
    GetNearbyPlacesList getNearbyPlacesList = new GetNearbyPlacesList(); 
    getNearbyPlacesList.execute(DataTransfer); 
} 

ответ

0

Во втором действии вы можете получить доступ к строке JSON цели с

getIntent().getStringExtra("deal"); 

Затем вы можете преобразовать его обратно в объект JSON, если это необходимо.

Update:

Причина, почему вы получаете ошибку в Intent конструктора в вашей задаче асинхронной потому, что вы не передаете в правильном контексте в качестве параметра. Ваш контекст свойство типа Intent, когда он должен быть контекст так исправить, как это:

private Context mContext; 

Добавьте конструктор вашей GetNearbyPlacesList как так

public GetNearbyPlacesList(Context context) { 
    mContext = context 
} 

передать его контекст на конкретизации, ваша первая деятельность скорее всего.

Итак, когда вы строите, что намерение в вашем асинхронном классе задач вы можете сделать так, как это:

Intent intent = new Intent(mContext, ListRestActivity.class) 
+0

У меня есть предупреждение в onPostExecute, который говорит: Не удается разрешить конструктор Намерение – didi

+0

Убедитесь, что переменная контекста вам Переход в конструктор Intent на самом деле является контекстом. Я не вижу объявления вашего первого действия, но, скорее всего, вам нужно изменить «context» на «FirstActivity.this», если вы объявляете это намерение во внутреннем классе. –

+0

Также найден опечатка в фрагменте кода моего ответа. Соответственно обновлено. –

Смежные вопросы