Ich folgte dieser tutorial für die Einrichtung meiner Google App Engine-Instanz und ich verwende auch Firebase. Mein Ziel ist es, die gesamte "Berechnung" auf Google App Engine zu setzen. Ich möchte im Folgenden eine Funktion wie diese nennen:Firebase-Datenbank von Google App Engine anrufen
MyEndpoint:
package productions.widowmaker110.backend;
/** An endpoint class we are exposing */
@Api(
name = "myApi",
version = "v1",
namespace = @ApiNamespace(
ownerDomain = "backend.widowmaker110.productions",
ownerName = "backend.widowmaker110.productions",
packagePath=""
)
)
public class MyEndpoint {
/** A simple endpoint method that takes a name and says Hi back */
@ApiMethod(name = "sayHi")
public MyBean sayHi(@Named("name") String name) {
// Write a message to the database
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("message");
// Read from the database
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// This method is called once with the initial value and again
// whenever data at this location is updated.
String value = dataSnapshot.getValue(String.class);
Log.d(TAG, "Value is: " + value);
}
@Override
public void onCancelled(DatabaseError error) {
// Failed to read value
Log.w(TAG, "Failed to read value.", error.toException());
}
});
MyBean response = new MyBean();
response.setData("Hi, " + name);
return response;
}
}
MainActivity:
package productions.widowmaker110.gpsweather;
// imports...
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new EndpointsAsyncTask().execute(new Pair<Context, String>(this, "Manfred"));
}
class EndpointsAsyncTask extends AsyncTask<Pair<Context, String>, Void, String> {
private MyApi myApiService = null;
private Context context;
@Override
protected String doInBackground(Pair<Context, String>... params) {
if(myApiService == null) { // Only do this once
MyApi.Builder builder = new MyApi.Builder(AndroidHttp.newCompatibleTransport(),
new AndroidJsonFactory(), null)
// options for running against local devappserver
// - 10.0.2.2 is localhost's IP address in Android emulator
// - turn off compression when running against local devappserver
.setRootUrl("http://10.0.2.2:8080/_ah/api/")
.setGoogleClientRequestInitializer(new GoogleClientRequestInitializer() {
@Override
public void initialize(AbstractGoogleClientRequest<?> abstractGoogleClientRequest) throws IOException {
abstractGoogleClientRequest.setDisableGZipContent(true);
}
});
// end options for devappserver
myApiService = builder.build();
}
context = params[0].first;
String name = params[0].second;
try {
return myApiService.sayHi(name).execute().getData();
} catch (IOException e) {
return e.getMessage();
}
}
@Override
protected void onPostExecute(String result) {
Toast.makeText(context, result, Toast.LENGTH_LONG).show();
}
}
}
Ich verstehe den obigen Code für Firebase Android spezifisch ist so auf einer Google App Engine ausgeführt wird Instanz funktioniert nicht. Ich habe mich gefragt, ob jemand CRUD Operationen in einer Firebase-Datenbank vom Google App Engine-Backend ausführen kann. Jede Hilfe wird geschätzt.
Dank Kevin, ich werde es geben, an diesem Wochenende versuchen. Schätze die Hilfe. Wenn das klappt, gebe ich Ihnen innerhalb von 24 Stunden die beste Antwort. – booky99
Kein Problem, wenn ich eine Chance bekomme, werde ich einige weitere Informationen zur Verwendung von Aufgaben hinzufügen, weil es schwierig sein kann. –
Ich verstehe das Multithreading beteiligt, aber ich habe Schwierigkeiten zu verstehen, wie Sie die Aufgaben-API implementieren. Wie Sie oben gesagt haben, wenn Sie die Möglichkeit haben, diese Informationen zu teilen, würde ich es wirklich schätzen. – booky99