2016-03-15 2 views
1

Хорошо, этот вопрос был задан, и я попробовал все из решений, предлагаемых, но ни один из них не похож на работу,не удается разрешить методы requestLocationUpdates с помощью учебника Pubnub

Я использую учебник Pubnub который отображает мое местоположение в в реальном времени в приложении для Android, я столкнулся с несколькими ошибками, которые я не могу решить, в основном был «Не удается разрешить методы requestLocationUpdates»

Я видел в предыдущих сообщениях для добавления, импорта android.location.LocationListener; к импорту, но он ничего не меняет.

Если у кого-нибудь есть какое-либо решение, было бы здорово, а также мои другие ошибки, если вы знаете.

Основная деятельность:

package nixerpubcom.nixerpub; 

import android.location.Location; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.util.Log; 
import android.view.KeyEvent; 
import android.view.View; 
import android.view.Menu; 
import android.view.MenuItem; 

import com.google.android.gms.common.api.GoogleApiClient; 
import com.google.android.gms.location.LocationRequest; 
import com.google.android.gms.location.LocationServices; 
import com.pubnub.api.PubnubError; 

import android.location.LocationListener; 

import org.json.JSONException; 
import org.json.JSONObject; 

import javax.security.auth.callback.Callback; 

public class MainActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks { 

//Create Google API Client 
private GoogleApiClient mGoogleApiClient; 
//Create pubnub variable 
private Pubnub mPubnub; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    //Start The Google Client 
    this.buildGoogleApiClient(); 
    mGoogleApiClient.connect(); 

    //Retrieve pubnub keys 
    mPubnub = new Pubnub ("pub-c-fe4ed754-2b9d-4563-abb6-63c3f048f9ad","sub-c-82de7130-eacb-11e5-8346-0619f8945a4f"); 

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 
} 

//Google Api build Method 
private synchronized void buildGoogleApiClient() { 
    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .addConnectionCallbacks(this).addApi(LocationServices.API) 
      .build(); 
} 


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

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

// Implement the Connection Callback 
@Override 
public void onConnected(Bundle connectionHint) { 
    LocationRequest mLocationRequest = createLocationRequest(); 
    LocationServices.FusedLocationApi.requestLocationUpdates(
      mGoogleApiClient, mLocationRequest, this); 
} 
@Override 
public void onConnectionSuspended(int cause) { 

    Log.d(TAG, "Connection to Google API Suspended "); 

} 

private LocationRequest createLocationRequest() { 
    LocationRequest mLocationRequest = new LocationRequest(); 
    mLocationRequest.setInterval(10000); 
    mLocationRequest.setFastestInterval(5000); 
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
    return mLocationRequest; 
} 

@Override 
public void onLocationChanged(Location location) { 
    broadcastLocation(location); 
} 


private void broadcastLocation(Location location) { 
    JSONObject message = new JSONObject(); 
    try { 
     message.put("lat", location.getLatitude()); 
     message.put("lng", location.getLongitude()); 
     message.put("alt", location.getAltitude()); 
    } catch (JSONException e) { 
     Log.e(TAG, e.toString()); 
    } 
    mPubnub.publish("A Channel Name", message, publishCallback); 
} 

KeyEvent.Callback publishCallback = new Callback() { 
    @Override 
    public void successCallback(String channel, Object response) { 
     Log.d("PUBNUB", response.toString()); 
    } 

    @Override 
    public void errorCallback(String channel, PubnubError error) { 
     Log.e("PUBNUB", error.toString()); 
    } 
}; 

} 

This is the error I get for the Cannot resolve methods requestLocationUpdates, my other errors are also in there which is a TAG error and a pubnub error

Я новичок в этом, так что я прошу прощения, если вопрос не правильно отформатирована.

ответ

1
  1. В методе requestLocationUpdates:

    LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this); 
    

    Он ожидает, что класс, который звонит (MainActivity) реализует com.google.android.gms.location.LocationListener, так что вам нужно реализовать его, или изменить его с помощью анонимного класса:

    LocationServices.FusedLocationApi.requestLocationUpdates(
          mGoogleApiClient, mLocationRequest, new LocationListener() { 
           @Override 
           public void onLocationChanged(Location location) { 
            // Here you have the updated location 
           } 
          }); 
    } 
    
  2. строка TAG не определен в этом классе, поэтому создайте поле, подобное этому в своем классе:

    private static final String TAG = "MainActivity"; 
    

    Совет: введите «logt» + введите в Android Studio, чтобы сгенерировать эту строку.

  3. Обработчик вы хотите в

    KeyEvent.Callback publishCallback = new Callback() {...} 
    

    не из KeyEvent, но из com.pubnub.api.Callback

    com.pubnub.api.Callback publishCallback = new Callback() {...} 
    

Пожалуйста, убедитесь, что ваш импорт прав и что вы попросили указать место в манифесте:

android.permission.ACCESS_COARSE_LOCATION 

или

android.permission.ACCESS_COARSE_LOCATION 
Смежные вопросы