将JSON对象从一个活动传递到另一个Android

问题描述:

我从Google Places检索我的JSON响应,我想在ListView中的另一个活动中显示它。我试图做的是将对象从一个活动传递到另一个活动,但似乎并不奏效。将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); 
} 

在第二个活动中,您可以访问意图的JSON字符串,其中包含

getIntent().getStringExtra("deal"); 

然后,如果需要,您可以将其转换回JSON对象。

更新:

为什么你会在收到您的异步任务的意向构造一个错误的原因是因为你没有在一个有效的上下文作为参数传递。您的上下文属性的类型为意向时,它应该是上下文,以便解决这个问题是这样的:

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

在我的答案代码片段中也发现了一个错字。相应更新。 –